diff --git a/.generated-info b/.generated-info index c4dcf185e00..9cd7f08dbed 100644 --- a/.generated-info +++ b/.generated-info @@ -1,4 +1,4 @@ { - "spec_repo_commit": "d51e9a8", - "generated": "2025-07-25 13:24:36.914" + "spec_repo_commit": "e4f653f", + "generated": "2025-07-25 14:08:34.729" } diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index db8036425c4..64cfcb7b7c4 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -12478,7 +12478,14 @@ components: - type type: object Dataset: - description: Dataset object. + description: "Dataset object.\n\n### Datasets Constraints\n- **Tag Limit per + Dataset**:\n - Each restricted dataset supports a maximum of 10 key:value + pairs per product.\n\n- **Tag Key Rules per Telemetry Type**:\n - Only one + tag key or attribute may be used to define access within a single telemetry + type.\n - The same or different tag key may be used across different telemetry + types.\n\n- **Tag Value Uniqueness**:\n - Tag values must be unique within + a single dataset.\n - A tag value used in one dataset cannot be reused in + another dataset of the same telemetry type." properties: attributes: $ref: '#/components/schemas/DatasetAttributes' @@ -12556,6 +12563,14 @@ components: required: - data type: object + DatasetUpdateRequest: + description: Edit request for a dataset. + properties: + data: + $ref: '#/components/schemas/Dataset' + required: + - data + type: object Date: description: Date as Unix timestamp in milliseconds. example: 1722439510282 @@ -16083,10 +16098,9 @@ components: type: array product: description: 'Name of the product the dataset is for. Possible values are - ''apm'', ''rum'', ''synthetics'', + ''apm'', ''rum'', - ''metrics'', ''logs'', ''sd_repoinfo'', ''error_tracking'', ''cloud_cost'', - and ''ml_obs''.' + ''metrics'', ''logs'', ''error_tracking'', and ''cloud_cost''.' example: logs type: string required: @@ -48282,6 +48296,44 @@ paths: x-permission: operator: OPEN permissions: [] + put: + description: Edits the dataset associated with the ID. + operationId: UpdateDataset + parameters: + - $ref: '#/components/parameters/DatasetID' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DatasetUpdateRequest' + description: Dataset payload + required: true + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/DatasetResponseSingle' + description: OK + '400': + $ref: '#/components/responses/BadRequestResponse' + '403': + $ref: '#/components/responses/NotAuthorizedResponse' + '404': + $ref: '#/components/responses/NotFoundResponse' + '429': + $ref: '#/components/responses/TooManyRequestsResponse' + security: + - apiKeyAuth: [] + appKeyAuth: [] + - AuthZ: [] + summary: Edit a dataset + tags: + - Datasets + x-codegen-request-body-name: body + x-permission: + operator: OPEN + permissions: [] /api/v2/deletion/data/{product}: post: description: Creates a data deletion request by providing a query and a timeframe diff --git a/examples/v2/datasets/UpdateDataset.java b/examples/v2/datasets/UpdateDataset.java new file mode 100644 index 00000000000..fa5c90e0f38 --- /dev/null +++ b/examples/v2/datasets/UpdateDataset.java @@ -0,0 +1,48 @@ +// Edit a dataset returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.DatasetsApi; +import com.datadog.api.client.v2.model.Dataset; +import com.datadog.api.client.v2.model.DatasetAttributes; +import com.datadog.api.client.v2.model.DatasetResponseSingle; +import com.datadog.api.client.v2.model.DatasetUpdateRequest; +import com.datadog.api.client.v2.model.FiltersPerProduct; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + DatasetsApi apiInstance = new DatasetsApi(defaultClient); + + DatasetUpdateRequest body = + new DatasetUpdateRequest() + .data( + new Dataset() + .attributes( + new DatasetAttributes() + .createdAt(null) + .name("Security Audit Dataset") + .principals( + Collections.singletonList( + "role:86245fce-0a4e-11f0-92bd-da7ad0900002")) + .productFilters( + Collections.singletonList( + new FiltersPerProduct() + .filters(Collections.singletonList("@application.id:ABCD")) + .product("logs")))) + .id("123e4567-e89b-12d3-a456-426614174000") + .type("dataset")); + + try { + DatasetResponseSingle result = apiInstance.updateDataset("dataset_id", body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling DatasetsApi#updateDataset"); + System.err.println("Status code: " + e.getCode()); + System.err.println("Reason: " + e.getResponseBody()); + System.err.println("Response headers: " + e.getResponseHeaders()); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/datadog/api/client/v2/api/DatasetsApi.java b/src/main/java/com/datadog/api/client/v2/api/DatasetsApi.java index 6ef55d80558..89c92b1f840 100644 --- a/src/main/java/com/datadog/api/client/v2/api/DatasetsApi.java +++ b/src/main/java/com/datadog/api/client/v2/api/DatasetsApi.java @@ -7,6 +7,7 @@ import com.datadog.api.client.v2.model.DatasetCreateRequest; import com.datadog.api.client.v2.model.DatasetResponseMulti; import com.datadog.api.client.v2.model.DatasetResponseSingle; +import com.datadog.api.client.v2.model.DatasetUpdateRequest; import jakarta.ws.rs.client.Invocation; import jakarta.ws.rs.core.GenericType; import java.util.ArrayList; @@ -554,4 +555,161 @@ public CompletableFuture> getDatasetWithHttpI false, new GenericType() {}); } + + /** + * Edit a dataset. + * + *

See {@link #updateDatasetWithHttpInfo}. + * + * @param datasetId The ID of a defined dataset. (required) + * @param body Dataset payload (required) + * @return DatasetResponseSingle + * @throws ApiException if fails to make API call + */ + public DatasetResponseSingle updateDataset(String datasetId, DatasetUpdateRequest body) + throws ApiException { + return updateDatasetWithHttpInfo(datasetId, body).getData(); + } + + /** + * Edit a dataset. + * + *

See {@link #updateDatasetWithHttpInfoAsync}. + * + * @param datasetId The ID of a defined dataset. (required) + * @param body Dataset payload (required) + * @return CompletableFuture<DatasetResponseSingle> + */ + public CompletableFuture updateDatasetAsync( + String datasetId, DatasetUpdateRequest body) { + return updateDatasetWithHttpInfoAsync(datasetId, body) + .thenApply( + response -> { + return response.getData(); + }); + } + + /** + * Edits the dataset associated with the ID. + * + * @param datasetId The ID of a defined dataset. (required) + * @param body Dataset payload (required) + * @return ApiResponse<DatasetResponseSingle> + * @throws ApiException if fails to make API call + * @http.response.details + * + * + * + * + * + * + * + * + *
Response details
Status Code Description Response Headers
200 OK -
400 Bad Request -
403 Not Authorized -
404 Not Found -
429 Too many requests -
+ */ + public ApiResponse updateDatasetWithHttpInfo( + String datasetId, DatasetUpdateRequest body) throws ApiException { + Object localVarPostBody = body; + + // verify the required parameter 'datasetId' is set + if (datasetId == null) { + throw new ApiException( + 400, "Missing the required parameter 'datasetId' when calling updateDataset"); + } + + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException( + 400, "Missing the required parameter 'body' when calling updateDataset"); + } + // create path and map variables + String localVarPath = + "/api/v2/datasets/{dataset_id}" + .replaceAll("\\{" + "dataset_id" + "\\}", apiClient.escapeString(datasetId.toString())); + + Map localVarHeaderParams = new HashMap(); + + Invocation.Builder builder = + apiClient.createBuilder( + "v2.DatasetsApi.updateDataset", + localVarPath, + new ArrayList(), + localVarHeaderParams, + new HashMap(), + new String[] {"application/json"}, + new String[] {"apiKeyAuth", "appKeyAuth", "AuthZ"}); + return apiClient.invokeAPI( + "PUT", + builder, + localVarHeaderParams, + new String[] {"application/json"}, + localVarPostBody, + new HashMap(), + false, + new GenericType() {}); + } + + /** + * Edit a dataset. + * + *

See {@link #updateDatasetWithHttpInfo}. + * + * @param datasetId The ID of a defined dataset. (required) + * @param body Dataset payload (required) + * @return CompletableFuture<ApiResponse<DatasetResponseSingle>> + */ + public CompletableFuture> updateDatasetWithHttpInfoAsync( + String datasetId, DatasetUpdateRequest body) { + Object localVarPostBody = body; + + // verify the required parameter 'datasetId' is set + if (datasetId == null) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally( + new ApiException( + 400, "Missing the required parameter 'datasetId' when calling updateDataset")); + return result; + } + + // verify the required parameter 'body' is set + if (body == null) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally( + new ApiException( + 400, "Missing the required parameter 'body' when calling updateDataset")); + return result; + } + // create path and map variables + String localVarPath = + "/api/v2/datasets/{dataset_id}" + .replaceAll("\\{" + "dataset_id" + "\\}", apiClient.escapeString(datasetId.toString())); + + Map localVarHeaderParams = new HashMap(); + + Invocation.Builder builder; + try { + builder = + apiClient.createBuilder( + "v2.DatasetsApi.updateDataset", + localVarPath, + new ArrayList(), + localVarHeaderParams, + new HashMap(), + new String[] {"application/json"}, + new String[] {"apiKeyAuth", "appKeyAuth", "AuthZ"}); + } catch (ApiException ex) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally(ex); + return result; + } + return apiClient.invokeAPIAsync( + "PUT", + builder, + localVarHeaderParams, + new String[] {"application/json"}, + localVarPostBody, + new HashMap(), + false, + new GenericType() {}); + } } diff --git a/src/main/java/com/datadog/api/client/v2/model/Dataset.java b/src/main/java/com/datadog/api/client/v2/model/Dataset.java index f990b7a7ba0..4b8cef5c856 100644 --- a/src/main/java/com/datadog/api/client/v2/model/Dataset.java +++ b/src/main/java/com/datadog/api/client/v2/model/Dataset.java @@ -17,7 +17,27 @@ import java.util.Map; import java.util.Objects; -/** Dataset object. */ +/** + * Dataset object. + * + *

Datasets Constraints

+ * + * + */ @JsonPropertyOrder({ Dataset.JSON_PROPERTY_ATTRIBUTES, Dataset.JSON_PROPERTY_ID, diff --git a/src/main/java/com/datadog/api/client/v2/model/DatasetCreateRequest.java b/src/main/java/com/datadog/api/client/v2/model/DatasetCreateRequest.java index 3f6865fe089..b1ffd0d2776 100644 --- a/src/main/java/com/datadog/api/client/v2/model/DatasetCreateRequest.java +++ b/src/main/java/com/datadog/api/client/v2/model/DatasetCreateRequest.java @@ -44,6 +44,25 @@ public DatasetCreateRequest data(Dataset data) { /** * Dataset object. * + *

Datasets Constraints

+ * + * + * * @return data */ @JsonProperty(JSON_PROPERTY_DATA) diff --git a/src/main/java/com/datadog/api/client/v2/model/DatasetResponseSingle.java b/src/main/java/com/datadog/api/client/v2/model/DatasetResponseSingle.java index a316ce5d685..27b8420fb57 100644 --- a/src/main/java/com/datadog/api/client/v2/model/DatasetResponseSingle.java +++ b/src/main/java/com/datadog/api/client/v2/model/DatasetResponseSingle.java @@ -44,6 +44,25 @@ public DatasetResponseSingle data(Dataset data) { /** * Dataset object. * + *

Datasets Constraints

+ * + * + * * @return data */ @JsonProperty(JSON_PROPERTY_DATA) diff --git a/src/main/java/com/datadog/api/client/v2/model/DatasetUpdateRequest.java b/src/main/java/com/datadog/api/client/v2/model/DatasetUpdateRequest.java new file mode 100644 index 00000000000..cf8fcd56284 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/DatasetUpdateRequest.java @@ -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. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** Edit request for a dataset. */ +@JsonPropertyOrder({DatasetUpdateRequest.JSON_PROPERTY_DATA}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class DatasetUpdateRequest { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_DATA = "data"; + private Dataset data; + + public DatasetUpdateRequest() {} + + @JsonCreator + public DatasetUpdateRequest( + @JsonProperty(required = true, value = JSON_PROPERTY_DATA) Dataset data) { + this.data = data; + this.unparsed |= data.unparsed; + } + + public DatasetUpdateRequest data(Dataset data) { + this.data = data; + this.unparsed |= data.unparsed; + return this; + } + + /** + * Dataset object. + * + *

Datasets Constraints

+ * + * + * + * @return data + */ + @JsonProperty(JSON_PROPERTY_DATA) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public Dataset getData() { + return data; + } + + public void setData(Dataset data) { + this.data = data; + } + + /** + * A container for additional, undeclared properties. This is a holder for any undeclared + * properties as specified with the 'additionalProperties' keyword in the OAS document. + */ + private Map additionalProperties; + + /** + * Set the additional (undeclared) property with the specified name and value. If the property + * does not already exist, create it otherwise replace it. + * + * @param key The arbitrary key to set + * @param value The associated value + * @return DatasetUpdateRequest + */ + @JsonAnySetter + public DatasetUpdateRequest putAdditionalProperty(String key, Object value) { + if (this.additionalProperties == null) { + this.additionalProperties = new HashMap(); + } + this.additionalProperties.put(key, value); + return this; + } + + /** + * Return the additional (undeclared) property. + * + * @return The additional properties + */ + @JsonAnyGetter + public Map getAdditionalProperties() { + return additionalProperties; + } + + /** + * Return the additional (undeclared) property with the specified name. + * + * @param key The arbitrary key to get + * @return The specific additional property for the given key + */ + public Object getAdditionalProperty(String key) { + if (this.additionalProperties == null) { + return null; + } + return this.additionalProperties.get(key); + } + + /** Return true if this DatasetUpdateRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DatasetUpdateRequest datasetUpdateRequest = (DatasetUpdateRequest) o; + return Objects.equals(this.data, datasetUpdateRequest.data) + && Objects.equals(this.additionalProperties, datasetUpdateRequest.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(data, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class DatasetUpdateRequest {\n"); + sb.append(" data: ").append(toIndentedString(data)).append("\n"); + sb.append(" additionalProperties: ") + .append(toIndentedString(additionalProperties)) + .append("\n"); + sb.append('}'); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/FiltersPerProduct.java b/src/main/java/com/datadog/api/client/v2/model/FiltersPerProduct.java index b114147e126..bc39b101044 100644 --- a/src/main/java/com/datadog/api/client/v2/model/FiltersPerProduct.java +++ b/src/main/java/com/datadog/api/client/v2/model/FiltersPerProduct.java @@ -78,8 +78,8 @@ public FiltersPerProduct product(String product) { } /** - * Name of the product the dataset is for. Possible values are 'apm', 'rum', 'synthetics', - * 'metrics', 'logs', 'sd_repoinfo', 'error_tracking', 'cloud_cost', and 'ml_obs'. + * Name of the product the dataset is for. Possible values are 'apm', 'rum', 'metrics', 'logs', + * 'error_tracking', and 'cloud_cost'. * * @return product */ diff --git a/src/test/resources/com/datadog/api/client/v2/api/datasets.feature b/src/test/resources/com/datadog/api/client/v2/api/datasets.feature index 7ce2e160a37..4a220a3c845 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/datasets.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/datasets.feature @@ -53,6 +53,30 @@ Feature: Datasets When the request is sent Then the response status is 404 Not Found + @generated @skip @team:DataDog/aaa-granular-access + Scenario: Edit a dataset returns "Bad Request" response + Given new "UpdateDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/aaa-granular-access + Scenario: Edit a dataset returns "Not Found" response + Given new "UpdateDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + When the request is sent + Then the response status is 404 Not Found + + @generated @skip @team:DataDog/aaa-granular-access + Scenario: Edit a dataset returns "OK" response + Given new "UpdateDataset" request + And request contains "dataset_id" parameter from "REPLACE.ME" + And body with value {"data": {"attributes": {"created_at": null, "name": "Security Audit Dataset", "principals": ["role:86245fce-0a4e-11f0-92bd-da7ad0900002"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "id": "123e4567-e89b-12d3-a456-426614174000", "type": "dataset"}} + When the request is sent + Then the response status is 200 OK + @generated @skip @team:DataDog/aaa-granular-access Scenario: Get a single dataset by ID returns "Bad Request" response Given new "GetDataset" request diff --git a/src/test/resources/com/datadog/api/client/v2/api/undo.json b/src/test/resources/com/datadog/api/client/v2/api/undo.json index a75ff96853d..a1fe13fed9d 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/undo.json +++ b/src/test/resources/com/datadog/api/client/v2/api/undo.json @@ -888,6 +888,12 @@ "type": "safe" } }, + "UpdateDataset": { + "tag": "Datasets", + "undo": { + "type": "idempotent" + } + }, "CreateDataDeletionRequest": { "tag": "Data Deletion", "undo": {