From 6887d13788cf80e3af3a6ed8c9e0e8615e329f34 Mon Sep 17 00:00:00 2001 From: "guillaume.lecetre" Date: Fri, 19 Jun 2026 13:44:56 +0000 Subject: [PATCH 1/2] fix(logs-archives): use LogsArchiveIntegrationS3Role in S3 archive tests Environment: Datadog workspace Co-Authored-By: Claude Sonnet 4.6 --- .../com/datadog/api/client/v2/api/LogsArchivesApiTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/datadog/api/client/v2/api/LogsArchivesApiTest.java b/src/test/java/com/datadog/api/client/v2/api/LogsArchivesApiTest.java index 26deb3b9f5c..db3f999e605 100644 --- a/src/test/java/com/datadog/api/client/v2/api/LogsArchivesApiTest.java +++ b/src/test/java/com/datadog/api/client/v2/api/LogsArchivesApiTest.java @@ -39,6 +39,7 @@ import com.datadog.api.client.v2.model.LogsArchiveIntegrationAzure; import com.datadog.api.client.v2.model.LogsArchiveIntegrationGCS; import com.datadog.api.client.v2.model.LogsArchiveIntegrationS3; +import com.datadog.api.client.v2.model.LogsArchiveIntegrationS3Role; import com.datadog.api.client.v2.model.LogsArchiveOrder; import com.datadog.api.client.v2.model.LogsArchiveOrderAttributes; import com.datadog.api.client.v2.model.LogsArchiveOrderDefinition; @@ -280,10 +281,11 @@ private LogsArchiveOrder createUpdatedLogsArchiveOrder() throws IOException { } private LogsArchiveCreateRequest createLogsArchiveCreateRequestS3() { - LogsArchiveIntegrationS3 integration = - new LogsArchiveIntegrationS3() + LogsArchiveIntegrationS3Role integrationRole = + new LogsArchiveIntegrationS3Role() .accountId("711111111111") .roleName("DatadogGoClientTestIntegrationRole"); + LogsArchiveIntegrationS3 integration = new LogsArchiveIntegrationS3(integrationRole); LogsArchiveEncryptionS3 encryptionS3 = new LogsArchiveEncryptionS3().key("test").type(LogsArchiveEncryptionS3Type.NO_OVERRIDE); LogsArchiveDestinationS3 destination = From 50178f339ec927a859bc016252b0247ff9da720b Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Wed, 24 Jun 2026 14:05:07 +0000 Subject: [PATCH 2/2] Regenerate client from commit cbf6224 of spec repo --- .generator/schemas/v1/openapi.yaml | 185 +++++ .generator/schemas/v2/openapi.yaml | 668 +++++++++++++++++- .../CreateLogsPipeline_104735144.java | 54 ++ .../CreateLogsPipeline_1185292896.java | 64 ++ .../CreateLogsPipeline_2402034476.java | 53 ++ .../CreateLogsPipeline_3996915493.java | 65 ++ .../GetCodeCoverageBranchSummary.java | 3 +- .../GetCodeCoverageCommitSummary.java | 3 +- .../CreateVariantForFeatureFlag.java | 31 + .../DeleteVariantFromFeatureFlag.java | 25 + .../UpdateVariantForFeatureFlag.java | 33 + .../ValidatePipeline_1238441879.java | 110 +++ .../ValidatePipeline_337125830.java | 105 +++ .../ValidatePipeline_620504950.java | 123 ++++ .../LogsArrayMapArithmeticSubProcessor.java | 266 +++++++ .../model/LogsArrayMapAttributeRemapper.java | 341 +++++++++ .../LogsArrayMapCategorySubProcessor.java | 252 +++++++ .../v1/model/LogsArrayMapProcessor.java | 341 +++++++++ .../v1/model/LogsArrayMapProcessorType.java | 57 ++ ...LogsArrayMapStringBuilderSubProcessor.java | 268 +++++++ .../v1/model/LogsArrayMapSubProcessor.java | 440 ++++++++++++ .../api/client/v1/model/LogsProcessor.java | 75 +- .../api/client/v2/api/FeatureFlagsApi.java | 542 ++++++++++++++ .../client/v2/api/SecurityMonitoringApi.java | 11 +- ...ranchCoverageSummaryRequestAttributes.java | 44 +- ...ommitCoverageSummaryRequestAttributes.java | 44 +- .../v2/model/LogsArchiveDestinationS3.java | 4 +- .../v2/model/LogsArchiveIntegrationS3.java | 357 ++++++---- .../LogsArchiveIntegrationS3AccessKey.java | 145 ++++ .../model/LogsArchiveIntegrationS3Role.java | 174 +++++ ...vabilityPipelineClickhouseDestination.java | 585 +++++++++++++++ ...lityPipelineClickhouseDestinationAuth.java | 216 ++++++ ...lineClickhouseDestinationAuthStrategy.java | 64 ++ ...ityPipelineClickhouseDestinationBatch.java | 170 +++++ ...ineClickhouseDestinationBatchEncoding.java | 197 ++++++ ...ickhouseDestinationBatchEncodingCodec.java | 65 ++ ...elineClickhouseDestinationCompression.java | 360 ++++++++++ ...khouseDestinationCompressionAlgorithm.java | 67 ++ ...lickhouseDestinationCompressionObject.java | 195 +++++ ...tyPipelineClickhouseDestinationFormat.java | 78 ++ ...lityPipelineClickhouseDestinationType.java | 62 ++ ...vabilityPipelineConfigDestinationItem.java | 84 ++- ...ObservabilityPipelineConfigSourceItem.java | 86 ++- .../ObservabilityPipelineWebsocketSource.java | 437 ++++++++++++ ...tyPipelineWebsocketSourceAuthStrategy.java | 69 ++ ...servabilityPipelineWebsocketSourceTls.java | 330 +++++++++ ...lityPipelineWebsocketSourceTlsEnabled.java | 157 ++++ ...PipelineWebsocketSourceTlsEnabledMode.java | 62 ++ ...elineWebsocketSourceTlsWithClientCert.java | 275 +++++++ ...eWebsocketSourceTlsWithClientCertMode.java | 63 ++ ...ervabilityPipelineWebsocketSourceType.java | 62 ++ ...curityMonitoringTerraformResourceType.java | 7 +- .../client/v2/model/UpdateVariantRequest.java | 164 +++++ ...y_Map_Processor_returns_OK_response.freeze | 1 + ...ray_Map_Processor_returns_OK_response.json | 58 ++ ...c_sub_processor_returns_OK_response.freeze | 1 + ...tic_sub_processor_returns_OK_response.json | 58 ++ ...y_sub_processor_returns_OK_response.freeze | 1 + ...ory_sub_processor_returns_OK_response.json | 58 ++ ...ve_source_false_returns_OK_response.freeze | 1 + ...erve_source_false_returns_OK_response.json | 58 ++ ...w_stream_format_returns_OK_response.freeze | 1 + ...row_stream_format_returns_OK_response.json | 32 + ...use_destination_returns_OK_response.freeze | 1 + ...House_destination_returns_OK_response.json | 32 + ...rce_bearer_auth_returns_OK_response.freeze | 1 + ...ource_bearer_auth_returns_OK_response.json | 32 + .../api/client/v1/api/logs_pipelines.feature | 28 + .../api/client/v2/api/code_coverage.feature | 12 +- .../api/client/v2/api/feature_flags.feature | 100 +++ .../v2/api/observability_pipelines.feature | 24 + .../com/datadog/api/client/v2/api/undo.json | 18 + 72 files changed, 9083 insertions(+), 172 deletions(-) create mode 100644 examples/v1/logs-pipelines/CreateLogsPipeline_104735144.java create mode 100644 examples/v1/logs-pipelines/CreateLogsPipeline_1185292896.java create mode 100644 examples/v1/logs-pipelines/CreateLogsPipeline_2402034476.java create mode 100644 examples/v1/logs-pipelines/CreateLogsPipeline_3996915493.java create mode 100644 examples/v2/feature-flags/CreateVariantForFeatureFlag.java create mode 100644 examples/v2/feature-flags/DeleteVariantFromFeatureFlag.java create mode 100644 examples/v2/feature-flags/UpdateVariantForFeatureFlag.java create mode 100644 examples/v2/observability-pipelines/ValidatePipeline_1238441879.java create mode 100644 examples/v2/observability-pipelines/ValidatePipeline_337125830.java create mode 100644 examples/v2/observability-pipelines/ValidatePipeline_620504950.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/LogsArrayMapArithmeticSubProcessor.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/LogsArrayMapAttributeRemapper.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/LogsArrayMapCategorySubProcessor.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/LogsArrayMapProcessor.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/LogsArrayMapProcessorType.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/LogsArrayMapStringBuilderSubProcessor.java create mode 100644 src/main/java/com/datadog/api/client/v1/model/LogsArrayMapSubProcessor.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3AccessKey.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3Role.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestination.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationAuth.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationAuthStrategy.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatch.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatchEncoding.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatchEncodingCodec.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompression.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompressionObject.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationFormat.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationType.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSource.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceAuthStrategy.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTls.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsEnabled.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsEnabledMode.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsWithClientCert.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsWithClientCertMode.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceType.java create mode 100644 src/main/java/com/datadog/api/client/v2/model/UpdateVariantRequest.java create mode 100644 src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_returns_OK_response.json create mode 100644 src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_arithmetic_sub_processor_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_arithmetic_sub_processor_returns_OK_response.json create mode 100644 src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_category_sub_processor_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_category_sub_processor_returns_OK_response.json create mode 100644 src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_with_preserve_source_false_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_with_preserve_source_false_returns_OK_response.json create mode 100644 src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_arrow_stream_format_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_arrow_stream_format_returns_OK_response.json create mode 100644 src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_returns_OK_response.json create mode 100644 src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_websocket_source_bearer_auth_returns_OK_response.freeze create mode 100644 src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_websocket_source_bearer_auth_returns_OK_response.json diff --git a/.generator/schemas/v1/openapi.yaml b/.generator/schemas/v1/openapi.yaml index 2ba4dbf6d68..683c28d9d2f 100644 --- a/.generator/schemas/v1/openapi.yaml +++ b/.generator/schemas/v1/openapi.yaml @@ -6182,6 +6182,190 @@ components: type: string x-enum-varnames: - ARITHMETIC_PROCESSOR + LogsArrayMapArithmeticSubProcessor: + description: |- + An arithmetic sub-processor for use inside an array-map processor. + Unlike the top-level arithmetic processor, `is_enabled` is not supported. + properties: + expression: + description: Arithmetic operation to perform. + example: $sourceElem.count * 2 + type: string + is_replace_missing: + default: false + description: Replace missing attribute values with 0. + type: boolean + name: + description: Name of the sub-processor. + type: string + target: + description: Target attribute path for the result. + example: $targetElem.doubled + type: string + type: + $ref: "#/components/schemas/LogsArithmeticProcessorType" + required: + - expression + - target + - type + type: object + LogsArrayMapAttributeRemapper: + description: |- + 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. + properties: + name: + description: Name of the sub-processor. + type: string + override_on_conflict: + default: false + description: Override the target element if already set. + type: boolean + preserve_source: + default: false + description: Remove or preserve the remapped source element. + type: boolean + sources: + description: Array of source attribute paths. + example: + - $sourceElem.id + items: + type: string + type: array + target: + description: Target attribute path. + example: $targetElem.uid + type: string + target_format: + $ref: "#/components/schemas/TargetFormatType" + type: + $ref: "#/components/schemas/LogsAttributeRemapperType" + required: + - sources + - target + - type + type: object + LogsArrayMapCategorySubProcessor: + description: |- + A category sub-processor for use inside an array-map processor. + Unlike the top-level category processor, `is_enabled` is not supported. + properties: + categories: + description: Array of filters to match against a log and the corresponding value to assign. + items: + $ref: "#/components/schemas/LogsCategoryProcessorCategory" + type: array + name: + description: Name of the sub-processor. + type: string + target: + description: Target attribute path for the category value. + example: $targetElem.level + type: string + type: + $ref: "#/components/schemas/LogsCategoryProcessorType" + required: + - categories + - target + - type + type: object + LogsArrayMapProcessor: + description: |- + 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). + properties: + is_enabled: + default: false + description: Whether or not the processor is enabled. + type: boolean + name: + description: Name of the processor. + type: string + preserve_source: + default: true + description: |- + When `false` and `source != target`, the source attribute is removed after + processing. Cannot be `false` when `source == target`. + type: boolean + processors: + description: |- + Sub-processors applied to each element. Allowed types: `attribute-remapper`, + `string-builder-processor`, `arithmetic-processor`, `category-processor`. + items: + $ref: "#/components/schemas/LogsArrayMapSubProcessor" + type: array + source: + description: |- + Attribute path of the source array. Elements are read-only via `$sourceElem` + inside sub-processors. + example: detail.resource.s3BucketDetails + type: string + target: + description: |- + Attribute path of the output array. Sub-processors write to `$targetElem` + (or `$targetElem.`) to build each output element. + example: ocsf.resources + type: string + type: + $ref: "#/components/schemas/LogsArrayMapProcessorType" + required: + - source + - target + - processors + - type + type: object + LogsArrayMapProcessorType: + default: array-map-processor + description: Type of logs array-map processor. + enum: + - array-map-processor + example: array-map-processor + type: string + x-enum-varnames: + - ARRAY_MAP_PROCESSOR + LogsArrayMapStringBuilderSubProcessor: + description: |- + A string builder sub-processor for use inside an array-map processor. + Unlike the top-level string builder processor, `is_enabled` is not supported. + properties: + is_replace_missing: + default: false + description: Replace missing attribute values with an empty string. + type: boolean + name: + description: Name of the sub-processor. + type: string + target: + description: Target attribute path for the result. + example: $targetElem.label + type: string + template: + description: Formula with one or more attributes and raw text. + example: item-%{$sourceElem.id} + type: string + type: + $ref: "#/components/schemas/LogsStringBuilderProcessorType" + required: + - template + - target + - type + type: object + LogsArrayMapSubProcessor: + description: |- + A sub-processor used inside an array-map processor. + Allowed types: `attribute-remapper`, `string-builder-processor`, + `arithmetic-processor`, `category-processor`. + oneOf: + - $ref: "#/components/schemas/LogsArrayMapAttributeRemapper" + - $ref: "#/components/schemas/LogsArrayMapArithmeticSubProcessor" + - $ref: "#/components/schemas/LogsArrayMapStringBuilderSubProcessor" + - $ref: "#/components/schemas/LogsArrayMapCategorySubProcessor" LogsArrayProcessor: description: |- A processor for extracting, aggregating, or transforming values from JSON arrays within your logs. @@ -7237,6 +7421,7 @@ components: - $ref: "#/components/schemas/LogsDecoderProcessor" - $ref: "#/components/schemas/LogsSchemaProcessor" - $ref: "#/components/schemas/LogsExcludeAttributeProcessor" + - $ref: "#/components/schemas/LogsArrayMapProcessor" LogsQueryCompute: description: Define computation for a log query. properties: diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index 65d674fb23d..738f4ba6490 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -1966,6 +1966,15 @@ components: example: "550e8400-e29b-41d4-a716-446655440000" format: uuid type: string + variant_id: + description: The ID of the variant. + in: path + name: variant_id + required: true + schema: + example: "550e8400-e29b-41d4-a716-446655440002" + format: uuid + type: string requestBodies: {} responses: BadRequestResponse: @@ -13100,12 +13109,17 @@ components: minLength: 1 type: string repository_id: - description: The repository identifier. + deprecated: true + description: "Deprecated: use `repository_url` instead. The repository URL." example: github.com/datadog/shopist minLength: 1 type: string + repository_url: + description: The repository URL. Accepts a full URL with or without a scheme (for example, `https://github.com/org/repo` or `github.com/org/repo`). + example: https://github.com/datadog/shopist + minLength: 1 + type: string required: - - repository_id - branch type: object BranchCoverageSummaryRequestData: @@ -19067,12 +19081,17 @@ components: pattern: "^[a-fA-F0-9]{40}$" type: string repository_id: - description: The repository identifier. + deprecated: true + description: "Deprecated: use `repository_url` instead. The repository URL." example: github.com/datadog/shopist minLength: 1 type: string + repository_url: + description: The repository URL. Accepts a full URL with or without a scheme (for example, `https://github.com/org/repo` or `github.com/org/repo`). + example: https://github.com/datadog/shopist + minLength: 1 + type: string required: - - repository_id - commit_sha type: object CommitCoverageSummaryRequestData: @@ -56750,19 +56769,35 @@ components: - client_email type: object LogsArchiveIntegrationS3: - description: The S3 Archive's integration destination. + description: >- + 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. + oneOf: + - $ref: "#/components/schemas/LogsArchiveIntegrationS3AccessKey" + - $ref: "#/components/schemas/LogsArchiveIntegrationS3Role" + LogsArchiveIntegrationS3AccessKey: + description: The S3 Archive's integration destination using an access key. + properties: + access_key_id: + description: The access key ID for the integration. + example: AKIAIOSFODNN7EXAMPLE + type: string + required: + - access_key_id + type: object + LogsArchiveIntegrationS3Role: + description: The S3 Archive's integration destination using an IAM role. properties: account_id: description: The account ID for the integration. example: "123456789012" type: string role_name: - description: The path of the integration. + description: The name of the role to assume for the integration. example: role-name type: string required: - - role_name - account_id + - role_name type: object LogsArchiveOrder: description: A ordered list of archive IDs. @@ -63725,6 +63760,199 @@ components: x-enum-varnames: - BLOCK - DROP_NEWEST + ObservabilityPipelineClickhouseDestination: + description: |- + The `clickhouse` destination sends log events to a ClickHouse database table over HTTP. + + **Supported pipeline types:** logs. + properties: + auth: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationAuth" + batch: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationBatch" + batch_encoding: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationBatchEncoding" + compression: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationCompression" + database: + description: Optional ClickHouse database name. If omitted, the user's default database on the ClickHouse server is used. + example: my_database + type: string + date_time_best_effort: + description: When `true`, enables flexible DateTime parsing on the ClickHouse server side. + example: false + type: boolean + endpoint_url_key: + description: |- + 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). + example: CLICKHOUSE_ENDPOINT_URL + type: string + format: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationFormat" + id: + description: The unique identifier for this component. + example: clickhouse-destination + type: string + inputs: + description: A list of component IDs whose output is used as the `input` for this component. + example: ["filter-processor"] + items: + description: The ID of a component whose output is used as input for this destination. + type: string + type: array + skip_unknown_fields: + description: |- + 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. + example: true + nullable: true + type: boolean + table: + description: Target ClickHouse table name. Events are inserted into this table. + example: application_logs + type: string + tls: + $ref: "#/components/schemas/ObservabilityPipelineTls" + type: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationType" + required: + - id + - type + - inputs + - table + type: object + x-pipeline-types: [logs] + ObservabilityPipelineClickhouseDestinationAuth: + description: |- + 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. + properties: + password_key: + description: Name of the environment variable or secret that contains the ClickHouse password. + example: CLICKHOUSE_PASSWORD + type: string + strategy: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationAuthStrategy" + username_key: + description: Name of the environment variable or secret that contains the ClickHouse username. + example: CLICKHOUSE_USERNAME + type: string + required: + - strategy + type: object + ObservabilityPipelineClickhouseDestinationAuthStrategy: + description: The authentication strategy for ClickHouse HTTP requests. Only `basic` is supported. + enum: + - basic + example: basic + type: string + x-enum-varnames: + - BASIC + ObservabilityPipelineClickhouseDestinationBatch: + description: Batching configuration for ClickHouse inserts. + properties: + max_events: + description: Maximum number of events per batch before it is flushed. + example: 1000 + format: int64 + minimum: 1 + type: integer + timeout_secs: + description: Maximum number of seconds to wait before flushing a partial batch. + example: 1 + format: int64 + maximum: 65535 + minimum: 1 + type: integer + type: object + ObservabilityPipelineClickhouseDestinationBatchEncoding: + description: |- + Batch encoding configuration for the ClickHouse destination. + Required when `format` is `arrow_stream`. The `codec` field must be set to `arrow_stream`. + properties: + allow_nullable_fields: + description: |- + 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. + example: false + type: boolean + codec: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationBatchEncodingCodec" + required: + - codec + type: object + ObservabilityPipelineClickhouseDestinationBatchEncodingCodec: + description: The codec used for batch encoding. Only `arrow_stream` is supported. + enum: + - arrow_stream + example: arrow_stream + type: string + x-enum-varnames: + - ARROW_STREAM + ObservabilityPipelineClickhouseDestinationCompression: + description: |- + 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). + oneOf: + - $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationCompressionAlgorithm" + - $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationCompressionObject" + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm: + description: The compression algorithm applied to outbound HTTP requests. + enum: + - gzip + - none + example: gzip + type: string + x-enum-varnames: + - GZIP + - NONE + ObservabilityPipelineClickhouseDestinationCompressionObject: + description: |- + Structured compression configuration for the ClickHouse destination. + Use `algorithm` to specify the compression type and `level` (optional, gzip only) to control compression strength. + properties: + algorithm: + $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestinationCompressionAlgorithm" + level: + description: Compression level (1–9). Only applicable when `algorithm` is `gzip`. + example: 6 + format: int64 + maximum: 9 + minimum: 1 + type: integer + required: + - algorithm + type: object + ObservabilityPipelineClickhouseDestinationFormat: + description: |- + 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`. + enum: + - json_each_row + - json_as_object + - json_as_string + - arrow_stream + example: json_each_row + type: string + x-enum-varnames: + - JSON_EACH_ROW + - JSON_AS_OBJECT + - JSON_AS_STRING + - ARROW_STREAM + ObservabilityPipelineClickhouseDestinationType: + default: clickhouse + description: The destination type. The value must be `clickhouse`. + enum: + - clickhouse + example: clickhouse + type: string + x-enum-varnames: + - CLICKHOUSE ObservabilityPipelineCloudPremDestination: description: |- The `cloud_prem` destination sends logs to Datadog CloudPrem. @@ -63824,6 +64052,7 @@ components: - $ref: "#/components/schemas/ObservabilityPipelineAmazonS3GenericDestination" - $ref: "#/components/schemas/ObservabilityPipelineAmazonSecurityLakeDestination" - $ref: "#/components/schemas/AzureStorageDestination" + - $ref: "#/components/schemas/ObservabilityPipelineClickhouseDestination" - $ref: "#/components/schemas/ObservabilityPipelineCloudPremDestination" - $ref: "#/components/schemas/ObservabilityPipelineCrowdStrikeNextGenSiemDestination" - $ref: "#/components/schemas/ObservabilityPipelineDatadogLogsDestination" @@ -63939,6 +64168,7 @@ components: - $ref: "#/components/schemas/ObservabilityPipelineSplunkTcpSource" - $ref: "#/components/schemas/ObservabilityPipelineSumoLogicSource" - $ref: "#/components/schemas/ObservabilityPipelineSyslogNgSource" + - $ref: "#/components/schemas/ObservabilityPipelineWebsocketSource" - $ref: "#/components/schemas/ObservabilityPipelineOpentelemetrySource" ObservabilityPipelineCrowdStrikeNextGenSiemDestination: description: |- @@ -68595,6 +68825,128 @@ components: required: - crt_file type: object + ObservabilityPipelineWebsocketSource: + description: |- + The `websocket` source ingests logs from a WebSocket server using the `ws://` or `wss://` protocol. + + **Supported pipeline types:** logs. + properties: + auth_strategy: + $ref: "#/components/schemas/ObservabilityPipelineWebsocketSourceAuthStrategy" + custom_key: + description: Name of the environment variable or secret that holds the custom authorization header value. Used when `auth_strategy` is `custom`. + example: WS_AUTH_CUSTOM_HEADER + type: string + decoding: + $ref: "#/components/schemas/ObservabilityPipelineDecoding" + id: + description: The unique identifier for this component. + example: websocket-source + type: string + password_key: + description: Name of the environment variable or secret that holds the password. Used when `auth_strategy` is `basic`. + example: WS_AUTH_PASSWORD + type: string + tls: + $ref: "#/components/schemas/ObservabilityPipelineWebsocketSourceTls" + token_key: + description: Name of the environment variable or secret that holds the bearer token. Used when `auth_strategy` is `bearer`. + example: WS_BEARER_TOKEN + type: string + type: + $ref: "#/components/schemas/ObservabilityPipelineWebsocketSourceType" + uri_key: + description: Name of the environment variable or secret that holds the WebSocket server URI (`ws://` or `wss://`). + example: WS_URI + type: string + username_key: + description: Name of the environment variable or secret that holds the username. Used when `auth_strategy` is `basic`. + example: WS_AUTH_USERNAME + type: string + required: + - id + - type + - decoding + - auth_strategy + type: object + x-pipeline-types: [logs] + ObservabilityPipelineWebsocketSourceAuthStrategy: + description: Authentication strategy for the WebSocket source connection. + enum: + - none + - basic + - bearer + - custom + example: bearer + type: string + x-enum-varnames: + - NONE + - BASIC + - BEARER + - CUSTOM + ObservabilityPipelineWebsocketSourceTls: + description: TLS configuration for the WebSocket source. Use `enabled` for standard `wss://` connections, or `with_client_cert` to present a client certificate for mutual TLS. + oneOf: + - $ref: "#/components/schemas/ObservabilityPipelineWebsocketSourceTlsEnabled" + - $ref: "#/components/schemas/ObservabilityPipelineWebsocketSourceTlsWithClientCert" + ObservabilityPipelineWebsocketSourceTlsEnabled: + description: TLS configuration that enables encryption without a client certificate. Use this for standard `wss://` connections that do not require mutual TLS. + properties: + mode: + $ref: "#/components/schemas/ObservabilityPipelineWebsocketSourceTlsEnabledMode" + required: + - mode + type: object + ObservabilityPipelineWebsocketSourceTlsEnabledMode: + description: TLS mode. Must be `enabled`. + enum: + - enabled + example: enabled + type: string + x-enum-varnames: + - ENABLED + ObservabilityPipelineWebsocketSourceTlsWithClientCert: + description: TLS configuration that enables encryption and presents a client certificate for mutual TLS authentication. + properties: + ca_file: + description: Path to the Certificate Authority (CA) file used to validate the remote server's TLS certificate. + example: /path/to/ca.crt + type: string + crt_file: + description: Path to the TLS client certificate file used to identify this source to the remote server. + example: /path/to/client.crt + type: string + key_file: + description: Path to the private key file associated with the client certificate. + example: /path/to/client.key + type: string + key_pass_key: + description: Name of the environment variable or secret that holds the passphrase for the private key file. + example: WS_TLS_KEY_PASSPHRASE + type: string + mode: + $ref: "#/components/schemas/ObservabilityPipelineWebsocketSourceTlsWithClientCertMode" + required: + - mode + - crt_file + type: object + ObservabilityPipelineWebsocketSourceTlsWithClientCertMode: + description: TLS mode. Must be `with_client_cert`. + enum: + - with_client_cert + example: with_client_cert + type: string + x-enum-varnames: + - WITH_CLIENT_CERT + ObservabilityPipelineWebsocketSourceType: + default: websocket + description: The source type. The value should always be `websocket`. + enum: + - websocket + example: websocket + type: string + x-enum-varnames: + - WEBSOCKET OktaAPIToken: description: The definition of the `OktaAPIToken` object. properties: @@ -88603,10 +88955,14 @@ components: enum: - suppressions - critical_assets + - security_filters + - rules type: string x-enum-varnames: - SUPPRESSIONS - CRITICAL_ASSETS + - SECURITY_FILTERS + - RULES SecurityMonitoringThirdPartyRootQuery: description: A query to be combined with the third party case query. properties: @@ -105616,6 +105972,18 @@ components: required: - data type: object + UpdateVariantRequest: + description: Request to update an existing variant's name and value. + properties: + name: + description: The display name of the variant. + example: "Variant ABC123 Updated" + type: string + value: + description: The value of the variant as a string. + example: "new_value" + type: string + type: object UpdateWorkflowRequest: description: A request object for updating an existing workflow. example: @@ -122130,7 +122498,7 @@ paths: data: attributes: branch: prod - repository_id: github.com/datadog/test-service + repository_url: https://github.com/datadog/test-service type: ci_app_coverage_branch_summary_request schema: $ref: "#/components/schemas/BranchCoverageSummaryRequest" @@ -122200,7 +122568,7 @@ paths: data: attributes: commit_sha: 66adc9350f2cc9b250b69abddab733dd55e1a588 - repository_id: github.com/datadog/test-service + repository_url: https://github.com/datadog/test-service type: ci_app_coverage_commit_summary_request schema: $ref: "#/components/schemas/CommitCoverageSummaryRequest" @@ -132913,6 +133281,217 @@ paths: permissions: - feature_flag_config_write - feature_flag_environment_config_read + /api/v2/feature-flags/{feature_flag_id}/variants: + post: + description: |- + 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. + operationId: CreateVariantForFeatureFlag + parameters: + - $ref: "#/components/parameters/feature_flag_id" + requestBody: + content: + application/json: + examples: + default: + value: + data: + attributes: + key: dark + name: Dark Theme + value: dark + type: variants + schema: + $ref: "#/components/schemas/CreateVariant" + required: true + responses: + "201": + content: + application/json: + examples: + default: + value: + data: + attributes: + created_at: "2024-01-01T00:00:00+00:00" + key: dark + name: Dark Theme + updated_at: "2024-01-01T00:00:00+00:00" + value: dark + id: "550e8400-e29b-41d4-a716-446655440002" + type: variants + schema: + $ref: "#/components/schemas/Variant" + description: Created + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Not Found + "409": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Conflict - A variant with this key already exists on the flag. + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + summary: Add a variant to a feature flag + tags: + - Feature Flags + x-permission: + operator: AND + permissions: + - feature_flag_config_write + /api/v2/feature-flags/{feature_flag_id}/variants/{variant_id}: + delete: + description: |- + 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`. + operationId: DeleteVariantFromFeatureFlag + parameters: + - $ref: "#/components/parameters/feature_flag_id" + - $ref: "#/components/parameters/variant_id" + responses: + "204": + description: No Content + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Not Found + "409": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Conflict - A pending suggestion already exists for this property. + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + summary: Delete a variant + tags: + - Feature Flags + x-permission: + operator: AND + permissions: + - feature_flag_config_write + put: + description: |- + 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`. + operationId: UpdateVariantForFeatureFlag + parameters: + - $ref: "#/components/parameters/feature_flag_id" + - $ref: "#/components/parameters/variant_id" + requestBody: + content: + application/json: + examples: + default: + value: + data: + attributes: + name: Dark Theme Updated + value: dark_v2 + id: "550e8400-e29b-41d4-a716-446655440002" + type: variants + schema: + $ref: "#/components/schemas/UpdateVariantRequest" + required: true + responses: + "200": + content: + application/json: + examples: + default: + value: + data: + attributes: + created_at: "2024-01-01T00:00:00+00:00" + key: dark + name: Dark Theme Updated + updated_at: "2024-06-01T00:00:00+00:00" + value: dark_v2 + id: "550e8400-e29b-41d4-a716-446655440002" + type: variants + schema: + $ref: "#/components/schemas/Variant" + description: OK + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Forbidden + "404": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Not Found + "409": + content: + application/json: + schema: + $ref: "#/components/schemas/APIErrorResponse" + description: Conflict - A pending suggestion already exists for this property. + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + security: + - apiKeyAuth: [] + appKeyAuth: [] + summary: Update a variant + tags: + - Feature Flags + x-permission: + operator: AND + permissions: + - feature_flag_config_write /api/v2/forms: get: description: Get all forms for the authenticated user's organization. @@ -148590,6 +149169,18 @@ paths: - team:intake - team:app type: archives + s3_access_key_id: + value: + data: + attributes: + destination: + bucket: my-bucket + integration: + access_key_id: AKIAIOSFODNN7EXAMPLE + type: s3 + name: Nginx Archive + query: source:nginx + type: archives schema: $ref: "#/components/schemas/LogsArchiveCreateRequest" description: The definition of the new archive. @@ -148615,6 +149206,21 @@ paths: state: WORKING id: 00000000-0000-0000-0000-000000000002 type: archives + s3_access_key_id: + value: + data: + attributes: + destination: + bucket: my-bucket + integration: + access_key_id: AKIAIOSFODNN7EXAMPLE + type: s3 + include_tags: false + name: Nginx Archive + query: source:nginx + state: WORKING + id: 00000000-0000-0000-0000-000000000002 + type: archives schema: $ref: "#/components/schemas/LogsArchive" description: OK @@ -148764,6 +149370,18 @@ paths: - team:intake - team:app type: archives + s3_access_key_id: + value: + data: + attributes: + destination: + bucket: my-bucket + integration: + access_key_id: AKIAIOSFODNN7EXAMPLE + type: s3 + name: Nginx Archive + query: source:nginx + type: archives schema: $ref: "#/components/schemas/LogsArchiveCreateRequest" description: New definition of the archive. @@ -148789,6 +149407,21 @@ paths: state: WORKING id: 00000000-0000-0000-0000-000000000004 type: archives + s3_access_key_id: + value: + data: + attributes: + destination: + bucket: my-bucket + integration: + access_key_id: AKIAIOSFODNN7EXAMPLE + type: s3 + include_tags: false + name: Nginx Archive + query: source:nginx + state: WORKING + id: 00000000-0000-0000-0000-000000000004 + type: archives schema: $ref: "#/components/schemas/LogsArchive" description: OK @@ -177087,8 +177720,9 @@ paths: description: |- 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` or `critical_assets`. + 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. operationId: BulkExportSecurityMonitoringTerraformResources parameters: - $ref: "#/components/parameters/SecurityMonitoringTerraformResourceType" @@ -177133,6 +177767,8 @@ paths: - security_monitoring_suppressions_read - AuthZ: - security_monitoring_rules_read + - AuthZ: + - security_monitoring_filters_read summary: Export security monitoring resources to Terraform tags: - Security Monitoring @@ -177142,13 +177778,14 @@ paths: permissions: - security_monitoring_suppressions_read - security_monitoring_rules_read + - security_monitoring_filters_read x-unstable: "**Note**: This endpoint is in Preview. If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/)." /api/v2/security_monitoring/terraform/{resource_type}/convert: post: description: |- 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` or `critical_assets`. + and must be one of `suppressions`, `critical_assets`, `security_filters`, or `rules`. operationId: ConvertSecurityMonitoringTerraformResource parameters: - $ref: "#/components/parameters/SecurityMonitoringTerraformResourceType" @@ -177201,6 +177838,8 @@ paths: - security_monitoring_suppressions_read - AuthZ: - security_monitoring_rules_read + - AuthZ: + - security_monitoring_filters_read summary: Convert security monitoring resource to Terraform tags: - Security Monitoring @@ -177210,13 +177849,15 @@ paths: permissions: - security_monitoring_suppressions_read - security_monitoring_rules_read + - security_monitoring_filters_read x-unstable: "**Note**: This endpoint is in Preview. If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/)." /api/v2/security_monitoring/terraform/{resource_type}/{resource_id}: get: description: |- 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` or `critical_assets`. + and must be one of `suppressions`, `critical_assets`, `security_filters`, or `rules`. + For `rules`, partner rules cannot be exported and return a 400 error. operationId: ExportSecurityMonitoringTerraformResource parameters: - $ref: "#/components/parameters/SecurityMonitoringTerraformResourceType" @@ -177251,6 +177892,8 @@ paths: - security_monitoring_suppressions_read - AuthZ: - security_monitoring_rules_read + - AuthZ: + - security_monitoring_filters_read summary: Export security monitoring resource to Terraform tags: - Security Monitoring @@ -177259,6 +177902,7 @@ paths: permissions: - security_monitoring_suppressions_read - security_monitoring_rules_read + - security_monitoring_filters_read x-unstable: "**Note**: This endpoint is in Preview. If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/)." /api/v2/sensitive-data-scanner/config: get: diff --git a/examples/v1/logs-pipelines/CreateLogsPipeline_104735144.java b/examples/v1/logs-pipelines/CreateLogsPipeline_104735144.java new file mode 100644 index 00000000000..ac13bbab8e5 --- /dev/null +++ b/examples/v1/logs-pipelines/CreateLogsPipeline_104735144.java @@ -0,0 +1,54 @@ +// Create a pipeline with Array Map Processor with preserve_source false returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v1.api.LogsPipelinesApi; +import com.datadog.api.client.v1.model.LogsArrayMapAttributeRemapper; +import com.datadog.api.client.v1.model.LogsArrayMapProcessor; +import com.datadog.api.client.v1.model.LogsArrayMapProcessorType; +import com.datadog.api.client.v1.model.LogsArrayMapSubProcessor; +import com.datadog.api.client.v1.model.LogsAttributeRemapperType; +import com.datadog.api.client.v1.model.LogsFilter; +import com.datadog.api.client.v1.model.LogsPipeline; +import com.datadog.api.client.v1.model.LogsProcessor; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + LogsPipelinesApi apiInstance = new LogsPipelinesApi(defaultClient); + + LogsPipeline body = + new LogsPipeline() + .filter(new LogsFilter().query("source:python")) + .name("testPipelineArrayMapNoPreserve") + .processors( + Collections.singletonList( + new LogsProcessor( + new LogsArrayMapProcessor() + .type(LogsArrayMapProcessorType.ARRAY_MAP_PROCESSOR) + .isEnabled(true) + .name("map and remove source") + .source("items") + .target("out") + .preserveSource(false) + .processors( + Collections.singletonList( + new LogsArrayMapSubProcessor( + new LogsArrayMapAttributeRemapper() + .type(LogsAttributeRemapperType.ATTRIBUTE_REMAPPER) + .sources(Collections.singletonList("$sourceElem.id")) + .target("$targetElem.uid"))))))); + + try { + LogsPipeline result = apiInstance.createLogsPipeline(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling LogsPipelinesApi#createLogsPipeline"); + 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/examples/v1/logs-pipelines/CreateLogsPipeline_1185292896.java b/examples/v1/logs-pipelines/CreateLogsPipeline_1185292896.java new file mode 100644 index 00000000000..b7cb1055178 --- /dev/null +++ b/examples/v1/logs-pipelines/CreateLogsPipeline_1185292896.java @@ -0,0 +1,64 @@ +// Create a pipeline with Array Map Processor using category sub-processor returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v1.api.LogsPipelinesApi; +import com.datadog.api.client.v1.model.LogsArrayMapCategorySubProcessor; +import com.datadog.api.client.v1.model.LogsArrayMapProcessor; +import com.datadog.api.client.v1.model.LogsArrayMapProcessorType; +import com.datadog.api.client.v1.model.LogsArrayMapSubProcessor; +import com.datadog.api.client.v1.model.LogsCategoryProcessorCategory; +import com.datadog.api.client.v1.model.LogsCategoryProcessorType; +import com.datadog.api.client.v1.model.LogsFilter; +import com.datadog.api.client.v1.model.LogsPipeline; +import com.datadog.api.client.v1.model.LogsProcessor; +import java.util.Arrays; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + LogsPipelinesApi apiInstance = new LogsPipelinesApi(defaultClient); + + LogsPipeline body = + new LogsPipeline() + .filter(new LogsFilter().query("source:python")) + .name("testPipelineArrayMapCategory") + .processors( + Collections.singletonList( + new LogsProcessor( + new LogsArrayMapProcessor() + .type(LogsArrayMapProcessorType.ARRAY_MAP_PROCESSOR) + .isEnabled(true) + .name("categorize items") + .source("items") + .target("out") + .processors( + Collections.singletonList( + new LogsArrayMapSubProcessor( + new LogsArrayMapCategorySubProcessor() + .type(LogsCategoryProcessorType.CATEGORY_PROCESSOR) + .target("$targetElem.level") + .categories( + Arrays.asList( + new LogsCategoryProcessorCategory() + .filter( + new LogsFilter() + .query("@$sourceElem.status:error")) + .name("error"), + new LogsCategoryProcessorCategory() + .filter(new LogsFilter().query("*")) + .name("info"))))))))); + + try { + LogsPipeline result = apiInstance.createLogsPipeline(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling LogsPipelinesApi#createLogsPipeline"); + 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/examples/v1/logs-pipelines/CreateLogsPipeline_2402034476.java b/examples/v1/logs-pipelines/CreateLogsPipeline_2402034476.java new file mode 100644 index 00000000000..565208b74a3 --- /dev/null +++ b/examples/v1/logs-pipelines/CreateLogsPipeline_2402034476.java @@ -0,0 +1,53 @@ +// Create a pipeline with Array Map Processor using arithmetic sub-processor returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v1.api.LogsPipelinesApi; +import com.datadog.api.client.v1.model.LogsArithmeticProcessorType; +import com.datadog.api.client.v1.model.LogsArrayMapArithmeticSubProcessor; +import com.datadog.api.client.v1.model.LogsArrayMapProcessor; +import com.datadog.api.client.v1.model.LogsArrayMapProcessorType; +import com.datadog.api.client.v1.model.LogsArrayMapSubProcessor; +import com.datadog.api.client.v1.model.LogsFilter; +import com.datadog.api.client.v1.model.LogsPipeline; +import com.datadog.api.client.v1.model.LogsProcessor; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + LogsPipelinesApi apiInstance = new LogsPipelinesApi(defaultClient); + + LogsPipeline body = + new LogsPipeline() + .filter(new LogsFilter().query("source:python")) + .name("testPipelineArrayMapArithmetic") + .processors( + Collections.singletonList( + new LogsProcessor( + new LogsArrayMapProcessor() + .type(LogsArrayMapProcessorType.ARRAY_MAP_PROCESSOR) + .isEnabled(true) + .name("double counts") + .source("items") + .target("out") + .processors( + Collections.singletonList( + new LogsArrayMapSubProcessor( + new LogsArrayMapArithmeticSubProcessor() + .type(LogsArithmeticProcessorType.ARITHMETIC_PROCESSOR) + .expression("$sourceElem.count * 2") + .target("$targetElem.doubled"))))))); + + try { + LogsPipeline result = apiInstance.createLogsPipeline(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling LogsPipelinesApi#createLogsPipeline"); + 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/examples/v1/logs-pipelines/CreateLogsPipeline_3996915493.java b/examples/v1/logs-pipelines/CreateLogsPipeline_3996915493.java new file mode 100644 index 00000000000..9f29e6693a0 --- /dev/null +++ b/examples/v1/logs-pipelines/CreateLogsPipeline_3996915493.java @@ -0,0 +1,65 @@ +// Create a pipeline with Array Map Processor returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v1.api.LogsPipelinesApi; +import com.datadog.api.client.v1.model.LogsArrayMapAttributeRemapper; +import com.datadog.api.client.v1.model.LogsArrayMapProcessor; +import com.datadog.api.client.v1.model.LogsArrayMapProcessorType; +import com.datadog.api.client.v1.model.LogsArrayMapStringBuilderSubProcessor; +import com.datadog.api.client.v1.model.LogsArrayMapSubProcessor; +import com.datadog.api.client.v1.model.LogsAttributeRemapperType; +import com.datadog.api.client.v1.model.LogsFilter; +import com.datadog.api.client.v1.model.LogsPipeline; +import com.datadog.api.client.v1.model.LogsProcessor; +import com.datadog.api.client.v1.model.LogsStringBuilderProcessorType; +import java.util.Arrays; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + LogsPipelinesApi apiInstance = new LogsPipelinesApi(defaultClient); + + LogsPipeline body = + new LogsPipeline() + .filter(new LogsFilter().query("source:python")) + .name("testPipelineArrayMap") + .processors( + Collections.singletonList( + new LogsProcessor( + new LogsArrayMapProcessor() + .type(LogsArrayMapProcessorType.ARRAY_MAP_PROCESSOR) + .isEnabled(true) + .name("map items") + .source("items") + .target("out") + .preserveSource(true) + .processors( + Arrays.asList( + new LogsArrayMapSubProcessor( + new LogsArrayMapAttributeRemapper() + .type(LogsAttributeRemapperType.ATTRIBUTE_REMAPPER) + .sources(Collections.singletonList("$sourceElem.id")) + .target("$targetElem.uid") + .preserveSource(true)), + new LogsArrayMapSubProcessor( + new LogsArrayMapStringBuilderSubProcessor() + .type( + LogsStringBuilderProcessorType + .STRING_BUILDER_PROCESSOR) + .template("item-%{$sourceElem.id}") + .target("$targetElem.label"))))))); + + try { + LogsPipeline result = apiInstance.createLogsPipeline(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling LogsPipelinesApi#createLogsPipeline"); + 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/examples/v2/code-coverage/GetCodeCoverageBranchSummary.java b/examples/v2/code-coverage/GetCodeCoverageBranchSummary.java index 9c8d00b6666..466a6bf6cb7 100644 --- a/examples/v2/code-coverage/GetCodeCoverageBranchSummary.java +++ b/examples/v2/code-coverage/GetCodeCoverageBranchSummary.java @@ -22,7 +22,8 @@ public static void main(String[] args) { .attributes( new BranchCoverageSummaryRequestAttributes() .branch("prod") - .repositoryId("github.com/datadog/shopist")) + .repositoryId("github.com/datadog/shopist") + .repositoryUrl("https://github.com/datadog/shopist")) .type(BranchCoverageSummaryRequestType.CI_APP_COVERAGE_BRANCH_SUMMARY_REQUEST)); try { diff --git a/examples/v2/code-coverage/GetCodeCoverageCommitSummary.java b/examples/v2/code-coverage/GetCodeCoverageCommitSummary.java index 2bed679f517..028c94cfd3f 100644 --- a/examples/v2/code-coverage/GetCodeCoverageCommitSummary.java +++ b/examples/v2/code-coverage/GetCodeCoverageCommitSummary.java @@ -22,7 +22,8 @@ public static void main(String[] args) { .attributes( new CommitCoverageSummaryRequestAttributes() .commitSha("66adc9350f2cc9b250b69abddab733dd55e1a588") - .repositoryId("github.com/datadog/shopist")) + .repositoryId("github.com/datadog/shopist") + .repositoryUrl("https://github.com/datadog/shopist")) .type(CommitCoverageSummaryRequestType.CI_APP_COVERAGE_COMMIT_SUMMARY_REQUEST)); try { diff --git a/examples/v2/feature-flags/CreateVariantForFeatureFlag.java b/examples/v2/feature-flags/CreateVariantForFeatureFlag.java new file mode 100644 index 00000000000..5a75501f4ca --- /dev/null +++ b/examples/v2/feature-flags/CreateVariantForFeatureFlag.java @@ -0,0 +1,31 @@ +// Add a variant to a feature flag returns "Created" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.FeatureFlagsApi; +import com.datadog.api.client.v2.model.CreateVariant; +import com.datadog.api.client.v2.model.Variant; +import java.util.UUID; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + FeatureFlagsApi apiInstance = new FeatureFlagsApi(defaultClient); + + CreateVariant body = + new CreateVariant().key("variant-abc123").name("Variant ABC123").value("true"); + + try { + Variant result = + apiInstance.createVariantForFeatureFlag( + UUID.fromString("550e8400-e29b-41d4-a716-446655440000"), body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling FeatureFlagsApi#createVariantForFeatureFlag"); + 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/examples/v2/feature-flags/DeleteVariantFromFeatureFlag.java b/examples/v2/feature-flags/DeleteVariantFromFeatureFlag.java new file mode 100644 index 00000000000..fa77dae849b --- /dev/null +++ b/examples/v2/feature-flags/DeleteVariantFromFeatureFlag.java @@ -0,0 +1,25 @@ +// Delete a variant returns "No Content" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.FeatureFlagsApi; +import java.util.UUID; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + FeatureFlagsApi apiInstance = new FeatureFlagsApi(defaultClient); + + try { + apiInstance.deleteVariantFromFeatureFlag( + UUID.fromString("550e8400-e29b-41d4-a716-446655440000"), + UUID.fromString("550e8400-e29b-41d4-a716-446655440002")); + } catch (ApiException e) { + System.err.println("Exception when calling FeatureFlagsApi#deleteVariantFromFeatureFlag"); + 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/examples/v2/feature-flags/UpdateVariantForFeatureFlag.java b/examples/v2/feature-flags/UpdateVariantForFeatureFlag.java new file mode 100644 index 00000000000..761c7cdce8d --- /dev/null +++ b/examples/v2/feature-flags/UpdateVariantForFeatureFlag.java @@ -0,0 +1,33 @@ +// Update a variant returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.FeatureFlagsApi; +import com.datadog.api.client.v2.model.UpdateVariantRequest; +import com.datadog.api.client.v2.model.Variant; +import java.util.UUID; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + FeatureFlagsApi apiInstance = new FeatureFlagsApi(defaultClient); + + UpdateVariantRequest body = + new UpdateVariantRequest().name("Variant ABC123 Updated").value("new_value"); + + try { + Variant result = + apiInstance.updateVariantForFeatureFlag( + UUID.fromString("550e8400-e29b-41d4-a716-446655440000"), + UUID.fromString("550e8400-e29b-41d4-a716-446655440002"), + body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling FeatureFlagsApi#updateVariantForFeatureFlag"); + 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/examples/v2/observability-pipelines/ValidatePipeline_1238441879.java b/examples/v2/observability-pipelines/ValidatePipeline_1238441879.java new file mode 100644 index 00000000000..f40bde76eac --- /dev/null +++ b/examples/v2/observability-pipelines/ValidatePipeline_1238441879.java @@ -0,0 +1,110 @@ +// Validate an observability pipeline with ClickHouse destination returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.ObservabilityPipelinesApi; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestination; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationAuth; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationAuthStrategy; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationBatch; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationCompression; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationCompressionAlgorithm; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationType; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfig; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigDestinationItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorGroup; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigSourceItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineDataAttributes; +import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogAgentSource; +import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogAgentSourceType; +import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessor; +import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessorType; +import com.datadog.api.client.v2.model.ObservabilityPipelineSpec; +import com.datadog.api.client.v2.model.ObservabilityPipelineSpecData; +import com.datadog.api.client.v2.model.ValidationResponse; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + ObservabilityPipelinesApi apiInstance = new ObservabilityPipelinesApi(defaultClient); + + ObservabilityPipelineSpec body = + new ObservabilityPipelineSpec() + .data( + new ObservabilityPipelineSpecData() + .attributes( + new ObservabilityPipelineDataAttributes() + .config( + new ObservabilityPipelineConfig() + .destinations( + Collections.singletonList( + new ObservabilityPipelineConfigDestinationItem( + new ObservabilityPipelineClickhouseDestination() + .id("clickhouse-destination") + .inputs( + Collections.singletonList( + "my-processor-group")) + .type( + ObservabilityPipelineClickhouseDestinationType + .CLICKHOUSE) + .table("application_logs") + .database("my_database") + .compression( + new ObservabilityPipelineClickhouseDestinationCompression( + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + .GZIP)) + .auth( + new ObservabilityPipelineClickhouseDestinationAuth() + .strategy( + ObservabilityPipelineClickhouseDestinationAuthStrategy + .BASIC) + .usernameKey("CLICKHOUSE_USERNAME") + .passwordKey("CLICKHOUSE_PASSWORD")) + .batch( + new ObservabilityPipelineClickhouseDestinationBatch() + .maxEvents(1000L) + .timeoutSecs(1L))))) + .processorGroups( + Collections.singletonList( + new ObservabilityPipelineConfigProcessorGroup() + .enabled(true) + .id("my-processor-group") + .include("service:my-service") + .inputs( + Collections.singletonList( + "datadog-agent-source")) + .processors( + Collections.singletonList( + new ObservabilityPipelineConfigProcessorItem( + new ObservabilityPipelineFilterProcessor() + .enabled(true) + .id("filter-processor") + .include("status:error") + .type( + ObservabilityPipelineFilterProcessorType + .FILTER)))))) + .sources( + Collections.singletonList( + new ObservabilityPipelineConfigSourceItem( + new ObservabilityPipelineDatadogAgentSource() + .id("datadog-agent-source") + .type( + ObservabilityPipelineDatadogAgentSourceType + .DATADOG_AGENT))))) + .name("Pipeline with ClickHouse Destination")) + .type("pipelines")); + + try { + ValidationResponse result = apiInstance.validatePipeline(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling ObservabilityPipelinesApi#validatePipeline"); + 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/examples/v2/observability-pipelines/ValidatePipeline_337125830.java b/examples/v2/observability-pipelines/ValidatePipeline_337125830.java new file mode 100644 index 00000000000..d0fe89b76be --- /dev/null +++ b/examples/v2/observability-pipelines/ValidatePipeline_337125830.java @@ -0,0 +1,105 @@ +// Validate an observability pipeline with websocket source bearer auth returns "OK" response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.ObservabilityPipelinesApi; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfig; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigDestinationItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorGroup; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigSourceItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineDataAttributes; +import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogLogsDestination; +import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogLogsDestinationType; +import com.datadog.api.client.v2.model.ObservabilityPipelineDecoding; +import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessor; +import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessorType; +import com.datadog.api.client.v2.model.ObservabilityPipelineSpec; +import com.datadog.api.client.v2.model.ObservabilityPipelineSpecData; +import com.datadog.api.client.v2.model.ObservabilityPipelineWebsocketSource; +import com.datadog.api.client.v2.model.ObservabilityPipelineWebsocketSourceAuthStrategy; +import com.datadog.api.client.v2.model.ObservabilityPipelineWebsocketSourceTls; +import com.datadog.api.client.v2.model.ObservabilityPipelineWebsocketSourceTlsEnabled; +import com.datadog.api.client.v2.model.ObservabilityPipelineWebsocketSourceTlsEnabledMode; +import com.datadog.api.client.v2.model.ObservabilityPipelineWebsocketSourceType; +import com.datadog.api.client.v2.model.ValidationResponse; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + ObservabilityPipelinesApi apiInstance = new ObservabilityPipelinesApi(defaultClient); + + ObservabilityPipelineSpec body = + new ObservabilityPipelineSpec() + .data( + new ObservabilityPipelineSpecData() + .attributes( + new ObservabilityPipelineDataAttributes() + .config( + new ObservabilityPipelineConfig() + .destinations( + Collections.singletonList( + new ObservabilityPipelineConfigDestinationItem( + new ObservabilityPipelineDatadogLogsDestination() + .id("datadog-logs-destination") + .inputs( + Collections.singletonList( + "my-processor-group")) + .type( + ObservabilityPipelineDatadogLogsDestinationType + .DATADOG_LOGS)))) + .processorGroups( + Collections.singletonList( + new ObservabilityPipelineConfigProcessorGroup() + .enabled(true) + .id("my-processor-group") + .include("service:my-service") + .inputs( + Collections.singletonList("websocket-source")) + .processors( + Collections.singletonList( + new ObservabilityPipelineConfigProcessorItem( + new ObservabilityPipelineFilterProcessor() + .enabled(true) + .id("filter-processor") + .include("status:error") + .type( + ObservabilityPipelineFilterProcessorType + .FILTER)))))) + .sources( + Collections.singletonList( + new ObservabilityPipelineConfigSourceItem( + new ObservabilityPipelineWebsocketSource() + .id("websocket-source") + .type( + ObservabilityPipelineWebsocketSourceType + .WEBSOCKET) + .decoding( + ObservabilityPipelineDecoding.DECODE_JSON) + .authStrategy( + ObservabilityPipelineWebsocketSourceAuthStrategy + .BEARER) + .tokenKey("WS_BEARER_TOKEN") + .uriKey("WS_URI") + .tls( + new ObservabilityPipelineWebsocketSourceTls( + new ObservabilityPipelineWebsocketSourceTlsEnabled() + .mode( + ObservabilityPipelineWebsocketSourceTlsEnabledMode + .ENABLED))))))) + .name("Pipeline with WebSocket Source")) + .type("pipelines")); + + try { + ValidationResponse result = apiInstance.validatePipeline(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling ObservabilityPipelinesApi#validatePipeline"); + 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/examples/v2/observability-pipelines/ValidatePipeline_620504950.java b/examples/v2/observability-pipelines/ValidatePipeline_620504950.java new file mode 100644 index 00000000000..dfcb3db6e4d --- /dev/null +++ b/examples/v2/observability-pipelines/ValidatePipeline_620504950.java @@ -0,0 +1,123 @@ +// Validate an observability pipeline with ClickHouse destination arrow_stream format returns "OK" +// response + +import com.datadog.api.client.ApiClient; +import com.datadog.api.client.ApiException; +import com.datadog.api.client.v2.api.ObservabilityPipelinesApi; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestination; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationAuth; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationAuthStrategy; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationBatch; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationBatchEncoding; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationBatchEncodingCodec; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationCompression; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationCompressionAlgorithm; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationFormat; +import com.datadog.api.client.v2.model.ObservabilityPipelineClickhouseDestinationType; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfig; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigDestinationItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorGroup; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigProcessorItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineConfigSourceItem; +import com.datadog.api.client.v2.model.ObservabilityPipelineDataAttributes; +import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogAgentSource; +import com.datadog.api.client.v2.model.ObservabilityPipelineDatadogAgentSourceType; +import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessor; +import com.datadog.api.client.v2.model.ObservabilityPipelineFilterProcessorType; +import com.datadog.api.client.v2.model.ObservabilityPipelineSpec; +import com.datadog.api.client.v2.model.ObservabilityPipelineSpecData; +import com.datadog.api.client.v2.model.ValidationResponse; +import java.util.Collections; + +public class Example { + public static void main(String[] args) { + ApiClient defaultClient = ApiClient.getDefaultApiClient(); + ObservabilityPipelinesApi apiInstance = new ObservabilityPipelinesApi(defaultClient); + + ObservabilityPipelineSpec body = + new ObservabilityPipelineSpec() + .data( + new ObservabilityPipelineSpecData() + .attributes( + new ObservabilityPipelineDataAttributes() + .config( + new ObservabilityPipelineConfig() + .destinations( + Collections.singletonList( + new ObservabilityPipelineConfigDestinationItem( + new ObservabilityPipelineClickhouseDestination() + .id("clickhouse-destination") + .inputs( + Collections.singletonList( + "my-processor-group")) + .type( + ObservabilityPipelineClickhouseDestinationType + .CLICKHOUSE) + .table("application_logs") + .database("my_database") + .format( + ObservabilityPipelineClickhouseDestinationFormat + .ARROW_STREAM) + .batchEncoding( + new ObservabilityPipelineClickhouseDestinationBatchEncoding() + .codec( + ObservabilityPipelineClickhouseDestinationBatchEncodingCodec + .ARROW_STREAM) + .allowNullableFields(false)) + .compression( + new ObservabilityPipelineClickhouseDestinationCompression( + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + .GZIP)) + .auth( + new ObservabilityPipelineClickhouseDestinationAuth() + .strategy( + ObservabilityPipelineClickhouseDestinationAuthStrategy + .BASIC) + .usernameKey("CLICKHOUSE_USERNAME") + .passwordKey("CLICKHOUSE_PASSWORD")) + .batch( + new ObservabilityPipelineClickhouseDestinationBatch() + .maxEvents(1000L) + .timeoutSecs(1L))))) + .processorGroups( + Collections.singletonList( + new ObservabilityPipelineConfigProcessorGroup() + .enabled(true) + .id("my-processor-group") + .include("service:my-service") + .inputs( + Collections.singletonList( + "datadog-agent-source")) + .processors( + Collections.singletonList( + new ObservabilityPipelineConfigProcessorItem( + new ObservabilityPipelineFilterProcessor() + .enabled(true) + .id("filter-processor") + .include("status:error") + .type( + ObservabilityPipelineFilterProcessorType + .FILTER)))))) + .sources( + Collections.singletonList( + new ObservabilityPipelineConfigSourceItem( + new ObservabilityPipelineDatadogAgentSource() + .id("datadog-agent-source") + .type( + ObservabilityPipelineDatadogAgentSourceType + .DATADOG_AGENT))))) + .name("Pipeline with ClickHouse Destination Arrow Stream")) + .type("pipelines")); + + try { + ValidationResponse result = apiInstance.validatePipeline(body); + System.out.println(result); + } catch (ApiException e) { + System.err.println("Exception when calling ObservabilityPipelinesApi#validatePipeline"); + 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/v1/model/LogsArrayMapArithmeticSubProcessor.java b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapArithmeticSubProcessor.java new file mode 100644 index 00000000000..d9c28ee7cf1 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapArithmeticSubProcessor.java @@ -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. + */ + +package com.datadog.api.client.v1.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; + +/** + * An arithmetic sub-processor for use inside an array-map processor. Unlike the top-level + * arithmetic processor, is_enabled is not supported. + */ +@JsonPropertyOrder({ + LogsArrayMapArithmeticSubProcessor.JSON_PROPERTY_EXPRESSION, + LogsArrayMapArithmeticSubProcessor.JSON_PROPERTY_IS_REPLACE_MISSING, + LogsArrayMapArithmeticSubProcessor.JSON_PROPERTY_NAME, + LogsArrayMapArithmeticSubProcessor.JSON_PROPERTY_TARGET, + LogsArrayMapArithmeticSubProcessor.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class LogsArrayMapArithmeticSubProcessor { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_EXPRESSION = "expression"; + private String expression; + + public static final String JSON_PROPERTY_IS_REPLACE_MISSING = "is_replace_missing"; + private Boolean isReplaceMissing = false; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_TARGET = "target"; + private String target; + + public static final String JSON_PROPERTY_TYPE = "type"; + private LogsArithmeticProcessorType type = LogsArithmeticProcessorType.ARITHMETIC_PROCESSOR; + + public LogsArrayMapArithmeticSubProcessor() {} + + @JsonCreator + public LogsArrayMapArithmeticSubProcessor( + @JsonProperty(required = true, value = JSON_PROPERTY_EXPRESSION) String expression, + @JsonProperty(required = true, value = JSON_PROPERTY_TARGET) String target, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) LogsArithmeticProcessorType type) { + this.expression = expression; + this.target = target; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public LogsArrayMapArithmeticSubProcessor expression(String expression) { + this.expression = expression; + return this; + } + + /** + * Arithmetic operation to perform. + * + * @return expression + */ + @JsonProperty(JSON_PROPERTY_EXPRESSION) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getExpression() { + return expression; + } + + public void setExpression(String expression) { + this.expression = expression; + } + + public LogsArrayMapArithmeticSubProcessor isReplaceMissing(Boolean isReplaceMissing) { + this.isReplaceMissing = isReplaceMissing; + return this; + } + + /** + * Replace missing attribute values with 0. + * + * @return isReplaceMissing + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_IS_REPLACE_MISSING) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getIsReplaceMissing() { + return isReplaceMissing; + } + + public void setIsReplaceMissing(Boolean isReplaceMissing) { + this.isReplaceMissing = isReplaceMissing; + } + + public LogsArrayMapArithmeticSubProcessor name(String name) { + this.name = name; + return this; + } + + /** + * Name of the sub-processor. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LogsArrayMapArithmeticSubProcessor target(String target) { + this.target = target; + return this; + } + + /** + * Target attribute path for the result. + * + * @return target + */ + @JsonProperty(JSON_PROPERTY_TARGET) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public LogsArrayMapArithmeticSubProcessor type(LogsArithmeticProcessorType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * Type of logs arithmetic processor. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public LogsArithmeticProcessorType getType() { + return type; + } + + public void setType(LogsArithmeticProcessorType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * 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 LogsArrayMapArithmeticSubProcessor + */ + @JsonAnySetter + public LogsArrayMapArithmeticSubProcessor 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 LogsArrayMapArithmeticSubProcessor object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LogsArrayMapArithmeticSubProcessor logsArrayMapArithmeticSubProcessor = + (LogsArrayMapArithmeticSubProcessor) o; + return Objects.equals(this.expression, logsArrayMapArithmeticSubProcessor.expression) + && Objects.equals( + this.isReplaceMissing, logsArrayMapArithmeticSubProcessor.isReplaceMissing) + && Objects.equals(this.name, logsArrayMapArithmeticSubProcessor.name) + && Objects.equals(this.target, logsArrayMapArithmeticSubProcessor.target) + && Objects.equals(this.type, logsArrayMapArithmeticSubProcessor.type) + && Objects.equals( + this.additionalProperties, logsArrayMapArithmeticSubProcessor.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(expression, isReplaceMissing, name, target, type, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LogsArrayMapArithmeticSubProcessor {\n"); + sb.append(" expression: ").append(toIndentedString(expression)).append("\n"); + sb.append(" isReplaceMissing: ").append(toIndentedString(isReplaceMissing)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" target: ").append(toIndentedString(target)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).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/v1/model/LogsArrayMapAttributeRemapper.java b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapAttributeRemapper.java new file mode 100644 index 00000000000..4f0845cebc2 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapAttributeRemapper.java @@ -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. + */ + +package com.datadog.api.client.v1.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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 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. + */ +@JsonPropertyOrder({ + LogsArrayMapAttributeRemapper.JSON_PROPERTY_NAME, + LogsArrayMapAttributeRemapper.JSON_PROPERTY_OVERRIDE_ON_CONFLICT, + LogsArrayMapAttributeRemapper.JSON_PROPERTY_PRESERVE_SOURCE, + LogsArrayMapAttributeRemapper.JSON_PROPERTY_SOURCES, + LogsArrayMapAttributeRemapper.JSON_PROPERTY_TARGET, + LogsArrayMapAttributeRemapper.JSON_PROPERTY_TARGET_FORMAT, + LogsArrayMapAttributeRemapper.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class LogsArrayMapAttributeRemapper { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_OVERRIDE_ON_CONFLICT = "override_on_conflict"; + private Boolean overrideOnConflict = false; + + public static final String JSON_PROPERTY_PRESERVE_SOURCE = "preserve_source"; + private Boolean preserveSource = false; + + public static final String JSON_PROPERTY_SOURCES = "sources"; + private List sources = new ArrayList<>(); + + public static final String JSON_PROPERTY_TARGET = "target"; + private String target; + + public static final String JSON_PROPERTY_TARGET_FORMAT = "target_format"; + private TargetFormatType targetFormat; + + public static final String JSON_PROPERTY_TYPE = "type"; + private LogsAttributeRemapperType type = LogsAttributeRemapperType.ATTRIBUTE_REMAPPER; + + public LogsArrayMapAttributeRemapper() {} + + @JsonCreator + public LogsArrayMapAttributeRemapper( + @JsonProperty(required = true, value = JSON_PROPERTY_SOURCES) List sources, + @JsonProperty(required = true, value = JSON_PROPERTY_TARGET) String target, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) LogsAttributeRemapperType type) { + this.sources = sources; + this.target = target; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public LogsArrayMapAttributeRemapper name(String name) { + this.name = name; + return this; + } + + /** + * Name of the sub-processor. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LogsArrayMapAttributeRemapper overrideOnConflict(Boolean overrideOnConflict) { + this.overrideOnConflict = overrideOnConflict; + return this; + } + + /** + * Override the target element if already set. + * + * @return overrideOnConflict + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_OVERRIDE_ON_CONFLICT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getOverrideOnConflict() { + return overrideOnConflict; + } + + public void setOverrideOnConflict(Boolean overrideOnConflict) { + this.overrideOnConflict = overrideOnConflict; + } + + public LogsArrayMapAttributeRemapper preserveSource(Boolean preserveSource) { + this.preserveSource = preserveSource; + return this; + } + + /** + * Remove or preserve the remapped source element. + * + * @return preserveSource + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_PRESERVE_SOURCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getPreserveSource() { + return preserveSource; + } + + public void setPreserveSource(Boolean preserveSource) { + this.preserveSource = preserveSource; + } + + public LogsArrayMapAttributeRemapper sources(List sources) { + this.sources = sources; + return this; + } + + public LogsArrayMapAttributeRemapper addSourcesItem(String sourcesItem) { + this.sources.add(sourcesItem); + return this; + } + + /** + * Array of source attribute paths. + * + * @return sources + */ + @JsonProperty(JSON_PROPERTY_SOURCES) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getSources() { + return sources; + } + + public void setSources(List sources) { + this.sources = sources; + } + + public LogsArrayMapAttributeRemapper target(String target) { + this.target = target; + return this; + } + + /** + * Target attribute path. + * + * @return target + */ + @JsonProperty(JSON_PROPERTY_TARGET) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public LogsArrayMapAttributeRemapper targetFormat(TargetFormatType targetFormat) { + this.targetFormat = targetFormat; + this.unparsed |= !targetFormat.isValid(); + return this; + } + + /** + * 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. + * + * @return targetFormat + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TARGET_FORMAT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public TargetFormatType getTargetFormat() { + return targetFormat; + } + + public void setTargetFormat(TargetFormatType targetFormat) { + if (!targetFormat.isValid()) { + this.unparsed = true; + } + this.targetFormat = targetFormat; + } + + public LogsArrayMapAttributeRemapper type(LogsAttributeRemapperType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * Type of logs attribute remapper. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public LogsAttributeRemapperType getType() { + return type; + } + + public void setType(LogsAttributeRemapperType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * 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 LogsArrayMapAttributeRemapper + */ + @JsonAnySetter + public LogsArrayMapAttributeRemapper 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 LogsArrayMapAttributeRemapper object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LogsArrayMapAttributeRemapper logsArrayMapAttributeRemapper = (LogsArrayMapAttributeRemapper) o; + return Objects.equals(this.name, logsArrayMapAttributeRemapper.name) + && Objects.equals(this.overrideOnConflict, logsArrayMapAttributeRemapper.overrideOnConflict) + && Objects.equals(this.preserveSource, logsArrayMapAttributeRemapper.preserveSource) + && Objects.equals(this.sources, logsArrayMapAttributeRemapper.sources) + && Objects.equals(this.target, logsArrayMapAttributeRemapper.target) + && Objects.equals(this.targetFormat, logsArrayMapAttributeRemapper.targetFormat) + && Objects.equals(this.type, logsArrayMapAttributeRemapper.type) + && Objects.equals( + this.additionalProperties, logsArrayMapAttributeRemapper.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash( + name, + overrideOnConflict, + preserveSource, + sources, + target, + targetFormat, + type, + additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LogsArrayMapAttributeRemapper {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" overrideOnConflict: ").append(toIndentedString(overrideOnConflict)).append("\n"); + sb.append(" preserveSource: ").append(toIndentedString(preserveSource)).append("\n"); + sb.append(" sources: ").append(toIndentedString(sources)).append("\n"); + sb.append(" target: ").append(toIndentedString(target)).append("\n"); + sb.append(" targetFormat: ").append(toIndentedString(targetFormat)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).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/v1/model/LogsArrayMapCategorySubProcessor.java b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapCategorySubProcessor.java new file mode 100644 index 00000000000..ef8f9f27de0 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapCategorySubProcessor.java @@ -0,0 +1,252 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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.v1.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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * A category sub-processor for use inside an array-map processor. Unlike the top-level category + * processor, is_enabled is not supported. + */ +@JsonPropertyOrder({ + LogsArrayMapCategorySubProcessor.JSON_PROPERTY_CATEGORIES, + LogsArrayMapCategorySubProcessor.JSON_PROPERTY_NAME, + LogsArrayMapCategorySubProcessor.JSON_PROPERTY_TARGET, + LogsArrayMapCategorySubProcessor.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class LogsArrayMapCategorySubProcessor { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_CATEGORIES = "categories"; + private List categories = new ArrayList<>(); + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_TARGET = "target"; + private String target; + + public static final String JSON_PROPERTY_TYPE = "type"; + private LogsCategoryProcessorType type = LogsCategoryProcessorType.CATEGORY_PROCESSOR; + + public LogsArrayMapCategorySubProcessor() {} + + @JsonCreator + public LogsArrayMapCategorySubProcessor( + @JsonProperty(required = true, value = JSON_PROPERTY_CATEGORIES) + List categories, + @JsonProperty(required = true, value = JSON_PROPERTY_TARGET) String target, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) LogsCategoryProcessorType type) { + this.categories = categories; + this.target = target; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public LogsArrayMapCategorySubProcessor categories( + List categories) { + this.categories = categories; + for (LogsCategoryProcessorCategory item : categories) { + this.unparsed |= item.unparsed; + } + return this; + } + + public LogsArrayMapCategorySubProcessor addCategoriesItem( + LogsCategoryProcessorCategory categoriesItem) { + this.categories.add(categoriesItem); + this.unparsed |= categoriesItem.unparsed; + return this; + } + + /** + * Array of filters to match against a log and the corresponding value to assign. + * + * @return categories + */ + @JsonProperty(JSON_PROPERTY_CATEGORIES) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getCategories() { + return categories; + } + + public void setCategories(List categories) { + this.categories = categories; + } + + public LogsArrayMapCategorySubProcessor name(String name) { + this.name = name; + return this; + } + + /** + * Name of the sub-processor. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LogsArrayMapCategorySubProcessor target(String target) { + this.target = target; + return this; + } + + /** + * Target attribute path for the category value. + * + * @return target + */ + @JsonProperty(JSON_PROPERTY_TARGET) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public LogsArrayMapCategorySubProcessor type(LogsCategoryProcessorType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * Type of logs category processor. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public LogsCategoryProcessorType getType() { + return type; + } + + public void setType(LogsCategoryProcessorType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * 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 LogsArrayMapCategorySubProcessor + */ + @JsonAnySetter + public LogsArrayMapCategorySubProcessor 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 LogsArrayMapCategorySubProcessor object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LogsArrayMapCategorySubProcessor logsArrayMapCategorySubProcessor = + (LogsArrayMapCategorySubProcessor) o; + return Objects.equals(this.categories, logsArrayMapCategorySubProcessor.categories) + && Objects.equals(this.name, logsArrayMapCategorySubProcessor.name) + && Objects.equals(this.target, logsArrayMapCategorySubProcessor.target) + && Objects.equals(this.type, logsArrayMapCategorySubProcessor.type) + && Objects.equals( + this.additionalProperties, logsArrayMapCategorySubProcessor.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(categories, name, target, type, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LogsArrayMapCategorySubProcessor {\n"); + sb.append(" categories: ").append(toIndentedString(categories)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" target: ").append(toIndentedString(target)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).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/v1/model/LogsArrayMapProcessor.java b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapProcessor.java new file mode 100644 index 00000000000..ea8cea24d30 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapProcessor.java @@ -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. + */ + +package com.datadog.api.client.v1.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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; + +/** + * 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.<field> (object element field), bare $sourceElem (primitive + * element), or any parent log attribute path. Sub-processors write to + * $targetElem.<field> (object output field) or bare $targetElem + * (primitive output). + */ +@JsonPropertyOrder({ + LogsArrayMapProcessor.JSON_PROPERTY_IS_ENABLED, + LogsArrayMapProcessor.JSON_PROPERTY_NAME, + LogsArrayMapProcessor.JSON_PROPERTY_PRESERVE_SOURCE, + LogsArrayMapProcessor.JSON_PROPERTY_PROCESSORS, + LogsArrayMapProcessor.JSON_PROPERTY_SOURCE, + LogsArrayMapProcessor.JSON_PROPERTY_TARGET, + LogsArrayMapProcessor.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class LogsArrayMapProcessor { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_IS_ENABLED = "is_enabled"; + private Boolean isEnabled = false; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_PRESERVE_SOURCE = "preserve_source"; + private Boolean preserveSource = true; + + public static final String JSON_PROPERTY_PROCESSORS = "processors"; + private List processors = new ArrayList<>(); + + public static final String JSON_PROPERTY_SOURCE = "source"; + private String source; + + public static final String JSON_PROPERTY_TARGET = "target"; + private String target; + + public static final String JSON_PROPERTY_TYPE = "type"; + private LogsArrayMapProcessorType type = LogsArrayMapProcessorType.ARRAY_MAP_PROCESSOR; + + public LogsArrayMapProcessor() {} + + @JsonCreator + public LogsArrayMapProcessor( + @JsonProperty(required = true, value = JSON_PROPERTY_PROCESSORS) + List processors, + @JsonProperty(required = true, value = JSON_PROPERTY_SOURCE) String source, + @JsonProperty(required = true, value = JSON_PROPERTY_TARGET) String target, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) LogsArrayMapProcessorType type) { + this.processors = processors; + this.source = source; + this.target = target; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public LogsArrayMapProcessor isEnabled(Boolean isEnabled) { + this.isEnabled = isEnabled; + return this; + } + + /** + * Whether or not the processor is enabled. + * + * @return isEnabled + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_IS_ENABLED) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getIsEnabled() { + return isEnabled; + } + + public void setIsEnabled(Boolean isEnabled) { + this.isEnabled = isEnabled; + } + + public LogsArrayMapProcessor name(String name) { + this.name = name; + return this; + } + + /** + * Name of the processor. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LogsArrayMapProcessor preserveSource(Boolean preserveSource) { + this.preserveSource = preserveSource; + return this; + } + + /** + * When false and source != target, the source attribute is removed + * after processing. Cannot be false when source == target. + * + * @return preserveSource + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_PRESERVE_SOURCE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getPreserveSource() { + return preserveSource; + } + + public void setPreserveSource(Boolean preserveSource) { + this.preserveSource = preserveSource; + } + + public LogsArrayMapProcessor processors(List processors) { + this.processors = processors; + for (LogsArrayMapSubProcessor item : processors) { + this.unparsed |= item.unparsed; + } + return this; + } + + public LogsArrayMapProcessor addProcessorsItem(LogsArrayMapSubProcessor processorsItem) { + this.processors.add(processorsItem); + this.unparsed |= processorsItem.unparsed; + return this; + } + + /** + * Sub-processors applied to each element. Allowed types: attribute-remapper, + * string-builder-processor, arithmetic-processor, category-processor + * . + * + * @return processors + */ + @JsonProperty(JSON_PROPERTY_PROCESSORS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getProcessors() { + return processors; + } + + public void setProcessors(List processors) { + this.processors = processors; + } + + public LogsArrayMapProcessor source(String source) { + this.source = source; + return this; + } + + /** + * Attribute path of the source array. Elements are read-only via $sourceElem inside + * sub-processors. + * + * @return source + */ + @JsonProperty(JSON_PROPERTY_SOURCE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public LogsArrayMapProcessor target(String target) { + this.target = target; + return this; + } + + /** + * Attribute path of the output array. Sub-processors write to $targetElem (or + * $targetElem.<field>) to build each output element. + * + * @return target + */ + @JsonProperty(JSON_PROPERTY_TARGET) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public LogsArrayMapProcessor type(LogsArrayMapProcessorType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * Type of logs array-map processor. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public LogsArrayMapProcessorType getType() { + return type; + } + + public void setType(LogsArrayMapProcessorType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * 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 LogsArrayMapProcessor + */ + @JsonAnySetter + public LogsArrayMapProcessor 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 LogsArrayMapProcessor object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LogsArrayMapProcessor logsArrayMapProcessor = (LogsArrayMapProcessor) o; + return Objects.equals(this.isEnabled, logsArrayMapProcessor.isEnabled) + && Objects.equals(this.name, logsArrayMapProcessor.name) + && Objects.equals(this.preserveSource, logsArrayMapProcessor.preserveSource) + && Objects.equals(this.processors, logsArrayMapProcessor.processors) + && Objects.equals(this.source, logsArrayMapProcessor.source) + && Objects.equals(this.target, logsArrayMapProcessor.target) + && Objects.equals(this.type, logsArrayMapProcessor.type) + && Objects.equals(this.additionalProperties, logsArrayMapProcessor.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash( + isEnabled, name, preserveSource, processors, source, target, type, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LogsArrayMapProcessor {\n"); + sb.append(" isEnabled: ").append(toIndentedString(isEnabled)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" preserveSource: ").append(toIndentedString(preserveSource)).append("\n"); + sb.append(" processors: ").append(toIndentedString(processors)).append("\n"); + sb.append(" source: ").append(toIndentedString(source)).append("\n"); + sb.append(" target: ").append(toIndentedString(target)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).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/v1/model/LogsArrayMapProcessorType.java b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapProcessorType.java new file mode 100644 index 00000000000..761826c5fbe --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapProcessorType.java @@ -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. + */ + +package com.datadog.api.client.v1.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** Type of logs array-map processor. */ +@JsonSerialize(using = LogsArrayMapProcessorType.LogsArrayMapProcessorTypeSerializer.class) +public class LogsArrayMapProcessorType extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("array-map-processor")); + + public static final LogsArrayMapProcessorType ARRAY_MAP_PROCESSOR = + new LogsArrayMapProcessorType("array-map-processor"); + + LogsArrayMapProcessorType(String value) { + super(value, allowedValues); + } + + public static class LogsArrayMapProcessorTypeSerializer + extends StdSerializer { + public LogsArrayMapProcessorTypeSerializer(Class t) { + super(t); + } + + public LogsArrayMapProcessorTypeSerializer() { + this(null); + } + + @Override + public void serialize( + LogsArrayMapProcessorType value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static LogsArrayMapProcessorType fromValue(String value) { + return new LogsArrayMapProcessorType(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapStringBuilderSubProcessor.java b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapStringBuilderSubProcessor.java new file mode 100644 index 00000000000..2a4b636c03e --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapStringBuilderSubProcessor.java @@ -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. + */ + +package com.datadog.api.client.v1.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; + +/** + * A string builder sub-processor for use inside an array-map processor. Unlike the top-level string + * builder processor, is_enabled is not supported. + */ +@JsonPropertyOrder({ + LogsArrayMapStringBuilderSubProcessor.JSON_PROPERTY_IS_REPLACE_MISSING, + LogsArrayMapStringBuilderSubProcessor.JSON_PROPERTY_NAME, + LogsArrayMapStringBuilderSubProcessor.JSON_PROPERTY_TARGET, + LogsArrayMapStringBuilderSubProcessor.JSON_PROPERTY_TEMPLATE, + LogsArrayMapStringBuilderSubProcessor.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class LogsArrayMapStringBuilderSubProcessor { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_IS_REPLACE_MISSING = "is_replace_missing"; + private Boolean isReplaceMissing = false; + + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_TARGET = "target"; + private String target; + + public static final String JSON_PROPERTY_TEMPLATE = "template"; + private String template; + + public static final String JSON_PROPERTY_TYPE = "type"; + private LogsStringBuilderProcessorType type = + LogsStringBuilderProcessorType.STRING_BUILDER_PROCESSOR; + + public LogsArrayMapStringBuilderSubProcessor() {} + + @JsonCreator + public LogsArrayMapStringBuilderSubProcessor( + @JsonProperty(required = true, value = JSON_PROPERTY_TARGET) String target, + @JsonProperty(required = true, value = JSON_PROPERTY_TEMPLATE) String template, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) + LogsStringBuilderProcessorType type) { + this.target = target; + this.template = template; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public LogsArrayMapStringBuilderSubProcessor isReplaceMissing(Boolean isReplaceMissing) { + this.isReplaceMissing = isReplaceMissing; + return this; + } + + /** + * Replace missing attribute values with an empty string. + * + * @return isReplaceMissing + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_IS_REPLACE_MISSING) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getIsReplaceMissing() { + return isReplaceMissing; + } + + public void setIsReplaceMissing(Boolean isReplaceMissing) { + this.isReplaceMissing = isReplaceMissing; + } + + public LogsArrayMapStringBuilderSubProcessor name(String name) { + this.name = name; + return this; + } + + /** + * Name of the sub-processor. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public LogsArrayMapStringBuilderSubProcessor target(String target) { + this.target = target; + return this; + } + + /** + * Target attribute path for the result. + * + * @return target + */ + @JsonProperty(JSON_PROPERTY_TARGET) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public LogsArrayMapStringBuilderSubProcessor template(String template) { + this.template = template; + return this; + } + + /** + * Formula with one or more attributes and raw text. + * + * @return template + */ + @JsonProperty(JSON_PROPERTY_TEMPLATE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTemplate() { + return template; + } + + public void setTemplate(String template) { + this.template = template; + } + + public LogsArrayMapStringBuilderSubProcessor type(LogsStringBuilderProcessorType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * Type of logs string builder processor. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public LogsStringBuilderProcessorType getType() { + return type; + } + + public void setType(LogsStringBuilderProcessorType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * 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 LogsArrayMapStringBuilderSubProcessor + */ + @JsonAnySetter + public LogsArrayMapStringBuilderSubProcessor 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 LogsArrayMapStringBuilderSubProcessor object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LogsArrayMapStringBuilderSubProcessor logsArrayMapStringBuilderSubProcessor = + (LogsArrayMapStringBuilderSubProcessor) o; + return Objects.equals( + this.isReplaceMissing, logsArrayMapStringBuilderSubProcessor.isReplaceMissing) + && Objects.equals(this.name, logsArrayMapStringBuilderSubProcessor.name) + && Objects.equals(this.target, logsArrayMapStringBuilderSubProcessor.target) + && Objects.equals(this.template, logsArrayMapStringBuilderSubProcessor.template) + && Objects.equals(this.type, logsArrayMapStringBuilderSubProcessor.type) + && Objects.equals( + this.additionalProperties, logsArrayMapStringBuilderSubProcessor.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(isReplaceMissing, name, target, template, type, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LogsArrayMapStringBuilderSubProcessor {\n"); + sb.append(" isReplaceMissing: ").append(toIndentedString(isReplaceMissing)).append("\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" target: ").append(toIndentedString(target)).append("\n"); + sb.append(" template: ").append(toIndentedString(template)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).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/v1/model/LogsArrayMapSubProcessor.java b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapSubProcessor.java new file mode 100644 index 00000000000..c1b3191f703 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v1/model/LogsArrayMapSubProcessor.java @@ -0,0 +1,440 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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.v1.model; + +import com.datadog.api.client.AbstractOpenApiSchema; +import com.datadog.api.client.JSON; +import com.datadog.api.client.UnparsedObject; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import jakarta.ws.rs.core.GenericType; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +@JsonDeserialize(using = LogsArrayMapSubProcessor.LogsArrayMapSubProcessorDeserializer.class) +@JsonSerialize(using = LogsArrayMapSubProcessor.LogsArrayMapSubProcessorSerializer.class) +public class LogsArrayMapSubProcessor extends AbstractOpenApiSchema { + private static final Logger log = Logger.getLogger(LogsArrayMapSubProcessor.class.getName()); + + @JsonIgnore public boolean unparsed = false; + + public static class LogsArrayMapSubProcessorSerializer + extends StdSerializer { + public LogsArrayMapSubProcessorSerializer(Class t) { + super(t); + } + + public LogsArrayMapSubProcessorSerializer() { + this(null); + } + + @Override + public void serialize( + LogsArrayMapSubProcessor value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static class LogsArrayMapSubProcessorDeserializer + extends StdDeserializer { + public LogsArrayMapSubProcessorDeserializer() { + this(LogsArrayMapSubProcessor.class); + } + + public LogsArrayMapSubProcessorDeserializer(Class vc) { + super(vc); + } + + @Override + public LogsArrayMapSubProcessor deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + Object tmp = null; + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize LogsArrayMapAttributeRemapper + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LogsArrayMapAttributeRemapper.class.equals(Integer.class) + || LogsArrayMapAttributeRemapper.class.equals(Long.class) + || LogsArrayMapAttributeRemapper.class.equals(Float.class) + || LogsArrayMapAttributeRemapper.class.equals(Double.class) + || LogsArrayMapAttributeRemapper.class.equals(Boolean.class) + || LogsArrayMapAttributeRemapper.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LogsArrayMapAttributeRemapper.class.equals(Integer.class) + || LogsArrayMapAttributeRemapper.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LogsArrayMapAttributeRemapper.class.equals(Float.class) + || LogsArrayMapAttributeRemapper.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (LogsArrayMapAttributeRemapper.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LogsArrayMapAttributeRemapper.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = tree.traverse(jp.getCodec()).readValueAs(LogsArrayMapAttributeRemapper.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((LogsArrayMapAttributeRemapper) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'LogsArrayMapAttributeRemapper'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'LogsArrayMapAttributeRemapper'", e); + } + + // deserialize LogsArrayMapArithmeticSubProcessor + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LogsArrayMapArithmeticSubProcessor.class.equals(Integer.class) + || LogsArrayMapArithmeticSubProcessor.class.equals(Long.class) + || LogsArrayMapArithmeticSubProcessor.class.equals(Float.class) + || LogsArrayMapArithmeticSubProcessor.class.equals(Double.class) + || LogsArrayMapArithmeticSubProcessor.class.equals(Boolean.class) + || LogsArrayMapArithmeticSubProcessor.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LogsArrayMapArithmeticSubProcessor.class.equals(Integer.class) + || LogsArrayMapArithmeticSubProcessor.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LogsArrayMapArithmeticSubProcessor.class.equals(Float.class) + || LogsArrayMapArithmeticSubProcessor.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (LogsArrayMapArithmeticSubProcessor.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LogsArrayMapArithmeticSubProcessor.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = tree.traverse(jp.getCodec()).readValueAs(LogsArrayMapArithmeticSubProcessor.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((LogsArrayMapArithmeticSubProcessor) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'LogsArrayMapArithmeticSubProcessor'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'LogsArrayMapArithmeticSubProcessor'", + e); + } + + // deserialize LogsArrayMapStringBuilderSubProcessor + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LogsArrayMapStringBuilderSubProcessor.class.equals(Integer.class) + || LogsArrayMapStringBuilderSubProcessor.class.equals(Long.class) + || LogsArrayMapStringBuilderSubProcessor.class.equals(Float.class) + || LogsArrayMapStringBuilderSubProcessor.class.equals(Double.class) + || LogsArrayMapStringBuilderSubProcessor.class.equals(Boolean.class) + || LogsArrayMapStringBuilderSubProcessor.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LogsArrayMapStringBuilderSubProcessor.class.equals(Integer.class) + || LogsArrayMapStringBuilderSubProcessor.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LogsArrayMapStringBuilderSubProcessor.class.equals(Float.class) + || LogsArrayMapStringBuilderSubProcessor.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (LogsArrayMapStringBuilderSubProcessor.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LogsArrayMapStringBuilderSubProcessor.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()).readValueAs(LogsArrayMapStringBuilderSubProcessor.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((LogsArrayMapStringBuilderSubProcessor) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'LogsArrayMapStringBuilderSubProcessor'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'LogsArrayMapStringBuilderSubProcessor'", + e); + } + + // deserialize LogsArrayMapCategorySubProcessor + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LogsArrayMapCategorySubProcessor.class.equals(Integer.class) + || LogsArrayMapCategorySubProcessor.class.equals(Long.class) + || LogsArrayMapCategorySubProcessor.class.equals(Float.class) + || LogsArrayMapCategorySubProcessor.class.equals(Double.class) + || LogsArrayMapCategorySubProcessor.class.equals(Boolean.class) + || LogsArrayMapCategorySubProcessor.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LogsArrayMapCategorySubProcessor.class.equals(Integer.class) + || LogsArrayMapCategorySubProcessor.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LogsArrayMapCategorySubProcessor.class.equals(Float.class) + || LogsArrayMapCategorySubProcessor.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (LogsArrayMapCategorySubProcessor.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LogsArrayMapCategorySubProcessor.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = tree.traverse(jp.getCodec()).readValueAs(LogsArrayMapCategorySubProcessor.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((LogsArrayMapCategorySubProcessor) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'LogsArrayMapCategorySubProcessor'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, "Input data does not match schema 'LogsArrayMapCategorySubProcessor'", e); + } + + LogsArrayMapSubProcessor ret = new LogsArrayMapSubProcessor(); + if (match == 1) { + ret.setActualInstance(deserialized); + } else { + Map res = + new ObjectMapper() + .readValue( + tree.traverse(jp.getCodec()).readValueAsTree().toString(), + new TypeReference>() {}); + ret.setActualInstance(new UnparsedObject(res)); + } + return ret; + } + + /** Handle deserialization of the 'null' value. */ + @Override + public LogsArrayMapSubProcessor getNullValue(DeserializationContext ctxt) + throws JsonMappingException { + throw new JsonMappingException(ctxt.getParser(), "LogsArrayMapSubProcessor cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map schemas = new HashMap(); + + public LogsArrayMapSubProcessor() { + super("oneOf", Boolean.FALSE); + } + + public LogsArrayMapSubProcessor(LogsArrayMapAttributeRemapper o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public LogsArrayMapSubProcessor(LogsArrayMapArithmeticSubProcessor o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public LogsArrayMapSubProcessor(LogsArrayMapStringBuilderSubProcessor o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public LogsArrayMapSubProcessor(LogsArrayMapCategorySubProcessor o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put( + "LogsArrayMapAttributeRemapper", new GenericType() {}); + schemas.put( + "LogsArrayMapArithmeticSubProcessor", + new GenericType() {}); + schemas.put( + "LogsArrayMapStringBuilderSubProcessor", + new GenericType() {}); + schemas.put( + "LogsArrayMapCategorySubProcessor", new GenericType() {}); + JSON.registerDescendants(LogsArrayMapSubProcessor.class, Collections.unmodifiableMap(schemas)); + } + + @Override + public Map getSchemas() { + return LogsArrayMapSubProcessor.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: LogsArrayMapAttributeRemapper, + * LogsArrayMapArithmeticSubProcessor, LogsArrayMapStringBuilderSubProcessor, + * LogsArrayMapCategorySubProcessor + * + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSON.isInstanceOf(LogsArrayMapAttributeRemapper.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf( + LogsArrayMapArithmeticSubProcessor.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf( + LogsArrayMapStringBuilderSubProcessor.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf( + LogsArrayMapCategorySubProcessor.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(UnparsedObject.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + throw new RuntimeException( + "Invalid instance type. Must be LogsArrayMapAttributeRemapper," + + " LogsArrayMapArithmeticSubProcessor, LogsArrayMapStringBuilderSubProcessor," + + " LogsArrayMapCategorySubProcessor"); + } + + /** + * Get the actual instance, which can be the following: LogsArrayMapAttributeRemapper, + * LogsArrayMapArithmeticSubProcessor, LogsArrayMapStringBuilderSubProcessor, + * LogsArrayMapCategorySubProcessor + * + * @return The actual instance (LogsArrayMapAttributeRemapper, LogsArrayMapArithmeticSubProcessor, + * LogsArrayMapStringBuilderSubProcessor, LogsArrayMapCategorySubProcessor) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `LogsArrayMapAttributeRemapper`. If the actual instance is not + * `LogsArrayMapAttributeRemapper`, the ClassCastException will be thrown. + * + * @return The actual instance of `LogsArrayMapAttributeRemapper` + * @throws ClassCastException if the instance is not `LogsArrayMapAttributeRemapper` + */ + public LogsArrayMapAttributeRemapper getLogsArrayMapAttributeRemapper() + throws ClassCastException { + return (LogsArrayMapAttributeRemapper) super.getActualInstance(); + } + + /** + * Get the actual instance of `LogsArrayMapArithmeticSubProcessor`. If the actual instance is not + * `LogsArrayMapArithmeticSubProcessor`, the ClassCastException will be thrown. + * + * @return The actual instance of `LogsArrayMapArithmeticSubProcessor` + * @throws ClassCastException if the instance is not `LogsArrayMapArithmeticSubProcessor` + */ + public LogsArrayMapArithmeticSubProcessor getLogsArrayMapArithmeticSubProcessor() + throws ClassCastException { + return (LogsArrayMapArithmeticSubProcessor) super.getActualInstance(); + } + + /** + * Get the actual instance of `LogsArrayMapStringBuilderSubProcessor`. If the actual instance is + * not `LogsArrayMapStringBuilderSubProcessor`, the ClassCastException will be thrown. + * + * @return The actual instance of `LogsArrayMapStringBuilderSubProcessor` + * @throws ClassCastException if the instance is not `LogsArrayMapStringBuilderSubProcessor` + */ + public LogsArrayMapStringBuilderSubProcessor getLogsArrayMapStringBuilderSubProcessor() + throws ClassCastException { + return (LogsArrayMapStringBuilderSubProcessor) super.getActualInstance(); + } + + /** + * Get the actual instance of `LogsArrayMapCategorySubProcessor`. If the actual instance is not + * `LogsArrayMapCategorySubProcessor`, the ClassCastException will be thrown. + * + * @return The actual instance of `LogsArrayMapCategorySubProcessor` + * @throws ClassCastException if the instance is not `LogsArrayMapCategorySubProcessor` + */ + public LogsArrayMapCategorySubProcessor getLogsArrayMapCategorySubProcessor() + throws ClassCastException { + return (LogsArrayMapCategorySubProcessor) super.getActualInstance(); + } +} diff --git a/src/main/java/com/datadog/api/client/v1/model/LogsProcessor.java b/src/main/java/com/datadog/api/client/v1/model/LogsProcessor.java index 199b9fcba3b..09cdb347350 100644 --- a/src/main/java/com/datadog/api/client/v1/model/LogsProcessor.java +++ b/src/main/java/com/datadog/api/client/v1/model/LogsProcessor.java @@ -1010,6 +1010,51 @@ public LogsProcessor deserialize(JsonParser jp, DeserializationContext ctxt) log.log(Level.FINER, "Input data does not match schema 'LogsExcludeAttributeProcessor'", e); } + // deserialize LogsArrayMapProcessor + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LogsArrayMapProcessor.class.equals(Integer.class) + || LogsArrayMapProcessor.class.equals(Long.class) + || LogsArrayMapProcessor.class.equals(Float.class) + || LogsArrayMapProcessor.class.equals(Double.class) + || LogsArrayMapProcessor.class.equals(Boolean.class) + || LogsArrayMapProcessor.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LogsArrayMapProcessor.class.equals(Integer.class) + || LogsArrayMapProcessor.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LogsArrayMapProcessor.class.equals(Float.class) + || LogsArrayMapProcessor.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (LogsArrayMapProcessor.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LogsArrayMapProcessor.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = tree.traverse(jp.getCodec()).readValueAs(LogsArrayMapProcessor.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((LogsArrayMapProcessor) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'LogsArrayMapProcessor'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'LogsArrayMapProcessor'", e); + } + LogsProcessor ret = new LogsProcessor(); if (match == 1) { ret.setActualInstance(deserialized); @@ -1143,6 +1188,11 @@ public LogsProcessor(LogsExcludeAttributeProcessor o) { setActualInstance(o); } + public LogsProcessor(LogsArrayMapProcessor o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + static { schemas.put("LogsGrokParser", new GenericType() {}); schemas.put("LogsDateRemapper", new GenericType() {}); @@ -1168,6 +1218,7 @@ public LogsProcessor(LogsExcludeAttributeProcessor o) { schemas.put("LogsSchemaProcessor", new GenericType() {}); schemas.put( "LogsExcludeAttributeProcessor", new GenericType() {}); + schemas.put("LogsArrayMapProcessor", new GenericType() {}); JSON.registerDescendants(LogsProcessor.class, Collections.unmodifiableMap(schemas)); } @@ -1183,7 +1234,7 @@ public Map getSchemas() { * LogsUserAgentParser, LogsCategoryProcessor, LogsArithmeticProcessor, * LogsStringBuilderProcessor, LogsPipelineProcessor, LogsGeoIPParser, LogsLookupProcessor, * ReferenceTableLogsLookupProcessor, LogsTraceRemapper, LogsSpanRemapper, LogsArrayProcessor, - * LogsDecoderProcessor, LogsSchemaProcessor, LogsExcludeAttributeProcessor + * LogsDecoderProcessor, LogsSchemaProcessor, LogsExcludeAttributeProcessor, LogsArrayMapProcessor * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a * composed schema (allOf, anyOf, oneOf). @@ -1275,6 +1326,10 @@ public void setActualInstance(Object instance) { super.setActualInstance(instance); return; } + if (JSON.isInstanceOf(LogsArrayMapProcessor.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } if (JSON.isInstanceOf(UnparsedObject.class, instance, new HashSet>())) { super.setActualInstance(instance); @@ -1287,7 +1342,7 @@ public void setActualInstance(Object instance) { + " LogsStringBuilderProcessor, LogsPipelineProcessor, LogsGeoIPParser," + " LogsLookupProcessor, ReferenceTableLogsLookupProcessor, LogsTraceRemapper," + " LogsSpanRemapper, LogsArrayProcessor, LogsDecoderProcessor, LogsSchemaProcessor," - + " LogsExcludeAttributeProcessor"); + + " LogsExcludeAttributeProcessor, LogsArrayMapProcessor"); } /** @@ -1296,14 +1351,15 @@ public void setActualInstance(Object instance) { * LogsURLParser, LogsUserAgentParser, LogsCategoryProcessor, LogsArithmeticProcessor, * LogsStringBuilderProcessor, LogsPipelineProcessor, LogsGeoIPParser, LogsLookupProcessor, * ReferenceTableLogsLookupProcessor, LogsTraceRemapper, LogsSpanRemapper, LogsArrayProcessor, - * LogsDecoderProcessor, LogsSchemaProcessor, LogsExcludeAttributeProcessor + * LogsDecoderProcessor, LogsSchemaProcessor, LogsExcludeAttributeProcessor, LogsArrayMapProcessor * * @return The actual instance (LogsGrokParser, LogsDateRemapper, LogsStatusRemapper, * LogsServiceRemapper, LogsMessageRemapper, LogsAttributeRemapper, LogsURLParser, * LogsUserAgentParser, LogsCategoryProcessor, LogsArithmeticProcessor, * LogsStringBuilderProcessor, LogsPipelineProcessor, LogsGeoIPParser, LogsLookupProcessor, * ReferenceTableLogsLookupProcessor, LogsTraceRemapper, LogsSpanRemapper, LogsArrayProcessor, - * LogsDecoderProcessor, LogsSchemaProcessor, LogsExcludeAttributeProcessor) + * LogsDecoderProcessor, LogsSchemaProcessor, LogsExcludeAttributeProcessor, + * LogsArrayMapProcessor) */ @Override public Object getActualInstance() { @@ -1542,4 +1598,15 @@ public LogsExcludeAttributeProcessor getLogsExcludeAttributeProcessor() throws ClassCastException { return (LogsExcludeAttributeProcessor) super.getActualInstance(); } + + /** + * Get the actual instance of `LogsArrayMapProcessor`. If the actual instance is not + * `LogsArrayMapProcessor`, the ClassCastException will be thrown. + * + * @return The actual instance of `LogsArrayMapProcessor` + * @throws ClassCastException if the instance is not `LogsArrayMapProcessor` + */ + public LogsArrayMapProcessor getLogsArrayMapProcessor() throws ClassCastException { + return (LogsArrayMapProcessor) super.getActualInstance(); + } } diff --git a/src/main/java/com/datadog/api/client/v2/api/FeatureFlagsApi.java b/src/main/java/com/datadog/api/client/v2/api/FeatureFlagsApi.java index f237f027eac..43cf9f3f704 100644 --- a/src/main/java/com/datadog/api/client/v2/api/FeatureFlagsApi.java +++ b/src/main/java/com/datadog/api/client/v2/api/FeatureFlagsApi.java @@ -9,6 +9,7 @@ import com.datadog.api.client.v2.model.CreateAllocationsRequest; import com.datadog.api.client.v2.model.CreateEnvironmentRequest; import com.datadog.api.client.v2.model.CreateFeatureFlagRequest; +import com.datadog.api.client.v2.model.CreateVariant; import com.datadog.api.client.v2.model.EnvironmentResponse; import com.datadog.api.client.v2.model.FeatureFlagResponse; import com.datadog.api.client.v2.model.ListAllocationsResponse; @@ -17,6 +18,8 @@ import com.datadog.api.client.v2.model.OverwriteAllocationsRequest; import com.datadog.api.client.v2.model.UpdateEnvironmentRequest; import com.datadog.api.client.v2.model.UpdateFeatureFlagRequest; +import com.datadog.api.client.v2.model.UpdateVariantRequest; +import com.datadog.api.client.v2.model.Variant; import jakarta.ws.rs.client.Invocation; import jakarta.ws.rs.core.GenericType; import java.util.ArrayList; @@ -668,6 +671,178 @@ public ApiResponse createFeatureFlagsEnvironmentWithHttpInf new GenericType() {}); } + /** + * Add a variant to a feature flag. + * + *

See {@link #createVariantForFeatureFlagWithHttpInfo}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param body (required) + * @return Variant + * @throws ApiException if fails to make API call + */ + public Variant createVariantForFeatureFlag(UUID featureFlagId, CreateVariant body) + throws ApiException { + return createVariantForFeatureFlagWithHttpInfo(featureFlagId, body).getData(); + } + + /** + * Add a variant to a feature flag. + * + *

See {@link #createVariantForFeatureFlagWithHttpInfoAsync}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param body (required) + * @return CompletableFuture<Variant> + */ + public CompletableFuture createVariantForFeatureFlagAsync( + UUID featureFlagId, CreateVariant body) { + return createVariantForFeatureFlagWithHttpInfoAsync(featureFlagId, body) + .thenApply( + response -> { + return response.getData(); + }); + } + + /** + * 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 featureFlagId The ID of the feature flag. (required) + * @param body (required) + * @return ApiResponse<Variant> + * @throws ApiException if fails to make API call + * @http.response.details + * + * + * + * + * + * + * + * + * + *
Response details
Status Code Description Response Headers
201 Created -
400 Bad Request -
403 Forbidden -
404 Not Found -
409 Conflict - A variant with this key already exists on the flag. -
429 Too many requests -
+ */ + public ApiResponse createVariantForFeatureFlagWithHttpInfo( + UUID featureFlagId, CreateVariant body) throws ApiException { + Object localVarPostBody = body; + + // verify the required parameter 'featureFlagId' is set + if (featureFlagId == null) { + throw new ApiException( + 400, + "Missing the required parameter 'featureFlagId' when calling" + + " createVariantForFeatureFlag"); + } + + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException( + 400, "Missing the required parameter 'body' when calling createVariantForFeatureFlag"); + } + // create path and map variables + String localVarPath = + "/api/v2/feature-flags/{feature_flag_id}/variants" + .replaceAll( + "\\{" + "feature_flag_id" + "\\}", + apiClient.escapeString(featureFlagId.toString())); + + Map localVarHeaderParams = new HashMap(); + + Invocation.Builder builder = + apiClient.createBuilder( + "v2.FeatureFlagsApi.createVariantForFeatureFlag", + localVarPath, + new ArrayList(), + localVarHeaderParams, + new HashMap(), + new String[] {"application/json"}, + new String[] {"apiKeyAuth", "appKeyAuth"}); + return apiClient.invokeAPI( + "POST", + builder, + localVarHeaderParams, + new String[] {"application/json"}, + localVarPostBody, + new HashMap(), + false, + new GenericType() {}); + } + + /** + * Add a variant to a feature flag. + * + *

See {@link #createVariantForFeatureFlagWithHttpInfo}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<Variant>> + */ + public CompletableFuture> createVariantForFeatureFlagWithHttpInfoAsync( + UUID featureFlagId, CreateVariant body) { + Object localVarPostBody = body; + + // verify the required parameter 'featureFlagId' is set + if (featureFlagId == null) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally( + new ApiException( + 400, + "Missing the required parameter 'featureFlagId' when calling" + + " createVariantForFeatureFlag")); + 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 createVariantForFeatureFlag")); + return result; + } + // create path and map variables + String localVarPath = + "/api/v2/feature-flags/{feature_flag_id}/variants" + .replaceAll( + "\\{" + "feature_flag_id" + "\\}", + apiClient.escapeString(featureFlagId.toString())); + + Map localVarHeaderParams = new HashMap(); + + Invocation.Builder builder; + try { + builder = + apiClient.createBuilder( + "v2.FeatureFlagsApi.createVariantForFeatureFlag", + localVarPath, + new ArrayList(), + localVarHeaderParams, + new HashMap(), + new String[] {"application/json"}, + new String[] {"apiKeyAuth", "appKeyAuth"}); + } catch (ApiException ex) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally(ex); + return result; + } + return apiClient.invokeAPIAsync( + "POST", + builder, + localVarHeaderParams, + new String[] {"application/json"}, + localVarPostBody, + new HashMap(), + false, + new GenericType() {}); + } + /** * Delete an environment. * @@ -808,6 +983,178 @@ public CompletableFuture> deleteFeatureFlagsEnvironmentWithHtt null); } + /** + * Delete a variant. + * + *

See {@link #deleteVariantFromFeatureFlagWithHttpInfo}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param variantId The ID of the variant. (required) + * @throws ApiException if fails to make API call + */ + public void deleteVariantFromFeatureFlag(UUID featureFlagId, UUID variantId) throws ApiException { + deleteVariantFromFeatureFlagWithHttpInfo(featureFlagId, variantId); + } + + /** + * Delete a variant. + * + *

See {@link #deleteVariantFromFeatureFlagWithHttpInfoAsync}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param variantId The ID of the variant. (required) + * @return CompletableFuture + */ + public CompletableFuture deleteVariantFromFeatureFlagAsync( + UUID featureFlagId, UUID variantId) { + return deleteVariantFromFeatureFlagWithHttpInfoAsync(featureFlagId, variantId) + .thenApply( + response -> { + return response.getData(); + }); + } + + /** + * 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 featureFlagId The ID of the feature flag. (required) + * @param variantId The ID of the variant. (required) + * @return ApiResponse<Void> + * @throws ApiException if fails to make API call + * @http.response.details + * + * + * + * + * + * + * + * + * + *
Response details
Status Code Description Response Headers
204 No Content -
400 Bad Request -
403 Forbidden -
404 Not Found -
409 Conflict - A pending suggestion already exists for this property. -
429 Too many requests -
+ */ + public ApiResponse deleteVariantFromFeatureFlagWithHttpInfo( + UUID featureFlagId, UUID variantId) throws ApiException { + Object localVarPostBody = null; + + // verify the required parameter 'featureFlagId' is set + if (featureFlagId == null) { + throw new ApiException( + 400, + "Missing the required parameter 'featureFlagId' when calling" + + " deleteVariantFromFeatureFlag"); + } + + // verify the required parameter 'variantId' is set + if (variantId == null) { + throw new ApiException( + 400, + "Missing the required parameter 'variantId' when calling deleteVariantFromFeatureFlag"); + } + // create path and map variables + String localVarPath = + "/api/v2/feature-flags/{feature_flag_id}/variants/{variant_id}" + .replaceAll( + "\\{" + "feature_flag_id" + "\\}", apiClient.escapeString(featureFlagId.toString())) + .replaceAll("\\{" + "variant_id" + "\\}", apiClient.escapeString(variantId.toString())); + + Map localVarHeaderParams = new HashMap(); + + Invocation.Builder builder = + apiClient.createBuilder( + "v2.FeatureFlagsApi.deleteVariantFromFeatureFlag", + localVarPath, + new ArrayList(), + localVarHeaderParams, + new HashMap(), + new String[] {"*/*"}, + new String[] {"apiKeyAuth", "appKeyAuth"}); + return apiClient.invokeAPI( + "DELETE", + builder, + localVarHeaderParams, + new String[] {}, + localVarPostBody, + new HashMap(), + false, + null); + } + + /** + * Delete a variant. + * + *

See {@link #deleteVariantFromFeatureFlagWithHttpInfo}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param variantId The ID of the variant. (required) + * @return CompletableFuture<ApiResponse<Void>> + */ + public CompletableFuture> deleteVariantFromFeatureFlagWithHttpInfoAsync( + UUID featureFlagId, UUID variantId) { + Object localVarPostBody = null; + + // verify the required parameter 'featureFlagId' is set + if (featureFlagId == null) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally( + new ApiException( + 400, + "Missing the required parameter 'featureFlagId' when calling" + + " deleteVariantFromFeatureFlag")); + return result; + } + + // verify the required parameter 'variantId' is set + if (variantId == null) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally( + new ApiException( + 400, + "Missing the required parameter 'variantId' when calling" + + " deleteVariantFromFeatureFlag")); + return result; + } + // create path and map variables + String localVarPath = + "/api/v2/feature-flags/{feature_flag_id}/variants/{variant_id}" + .replaceAll( + "\\{" + "feature_flag_id" + "\\}", apiClient.escapeString(featureFlagId.toString())) + .replaceAll("\\{" + "variant_id" + "\\}", apiClient.escapeString(variantId.toString())); + + Map localVarHeaderParams = new HashMap(); + + Invocation.Builder builder; + try { + builder = + apiClient.createBuilder( + "v2.FeatureFlagsApi.deleteVariantFromFeatureFlag", + localVarPath, + new ArrayList(), + localVarHeaderParams, + new HashMap(), + new String[] {"*/*"}, + new String[] {"apiKeyAuth", "appKeyAuth"}); + } catch (ApiException ex) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally(ex); + return result; + } + return apiClient.invokeAPIAsync( + "DELETE", + builder, + localVarHeaderParams, + new String[] {}, + localVarPostBody, + new HashMap(), + false, + null); + } + /** * Disable a feature flag in an environment. * @@ -3131,4 +3478,199 @@ public ApiResponse updateFeatureFlagsEnvironmentWithHttpInf false, new GenericType() {}); } + + /** + * Update a variant. + * + *

See {@link #updateVariantForFeatureFlagWithHttpInfo}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param variantId The ID of the variant. (required) + * @param body (required) + * @return Variant + * @throws ApiException if fails to make API call + */ + public Variant updateVariantForFeatureFlag( + UUID featureFlagId, UUID variantId, UpdateVariantRequest body) throws ApiException { + return updateVariantForFeatureFlagWithHttpInfo(featureFlagId, variantId, body).getData(); + } + + /** + * Update a variant. + * + *

See {@link #updateVariantForFeatureFlagWithHttpInfoAsync}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param variantId The ID of the variant. (required) + * @param body (required) + * @return CompletableFuture<Variant> + */ + public CompletableFuture updateVariantForFeatureFlagAsync( + UUID featureFlagId, UUID variantId, UpdateVariantRequest body) { + return updateVariantForFeatureFlagWithHttpInfoAsync(featureFlagId, variantId, body) + .thenApply( + response -> { + return response.getData(); + }); + } + + /** + * 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 featureFlagId The ID of the feature flag. (required) + * @param variantId The ID of the variant. (required) + * @param body (required) + * @return ApiResponse<Variant> + * @throws ApiException if fails to make API call + * @http.response.details + * + * + * + * + * + * + * + * + * + *
Response details
Status Code Description Response Headers
200 OK -
400 Bad Request -
403 Forbidden -
404 Not Found -
409 Conflict - A pending suggestion already exists for this property. -
429 Too many requests -
+ */ + public ApiResponse updateVariantForFeatureFlagWithHttpInfo( + UUID featureFlagId, UUID variantId, UpdateVariantRequest body) throws ApiException { + Object localVarPostBody = body; + + // verify the required parameter 'featureFlagId' is set + if (featureFlagId == null) { + throw new ApiException( + 400, + "Missing the required parameter 'featureFlagId' when calling" + + " updateVariantForFeatureFlag"); + } + + // verify the required parameter 'variantId' is set + if (variantId == null) { + throw new ApiException( + 400, + "Missing the required parameter 'variantId' when calling updateVariantForFeatureFlag"); + } + + // verify the required parameter 'body' is set + if (body == null) { + throw new ApiException( + 400, "Missing the required parameter 'body' when calling updateVariantForFeatureFlag"); + } + // create path and map variables + String localVarPath = + "/api/v2/feature-flags/{feature_flag_id}/variants/{variant_id}" + .replaceAll( + "\\{" + "feature_flag_id" + "\\}", apiClient.escapeString(featureFlagId.toString())) + .replaceAll("\\{" + "variant_id" + "\\}", apiClient.escapeString(variantId.toString())); + + Map localVarHeaderParams = new HashMap(); + + Invocation.Builder builder = + apiClient.createBuilder( + "v2.FeatureFlagsApi.updateVariantForFeatureFlag", + localVarPath, + new ArrayList(), + localVarHeaderParams, + new HashMap(), + new String[] {"application/json"}, + new String[] {"apiKeyAuth", "appKeyAuth"}); + return apiClient.invokeAPI( + "PUT", + builder, + localVarHeaderParams, + new String[] {"application/json"}, + localVarPostBody, + new HashMap(), + false, + new GenericType() {}); + } + + /** + * Update a variant. + * + *

See {@link #updateVariantForFeatureFlagWithHttpInfo}. + * + * @param featureFlagId The ID of the feature flag. (required) + * @param variantId The ID of the variant. (required) + * @param body (required) + * @return CompletableFuture<ApiResponse<Variant>> + */ + public CompletableFuture> updateVariantForFeatureFlagWithHttpInfoAsync( + UUID featureFlagId, UUID variantId, UpdateVariantRequest body) { + Object localVarPostBody = body; + + // verify the required parameter 'featureFlagId' is set + if (featureFlagId == null) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally( + new ApiException( + 400, + "Missing the required parameter 'featureFlagId' when calling" + + " updateVariantForFeatureFlag")); + return result; + } + + // verify the required parameter 'variantId' is set + if (variantId == null) { + CompletableFuture> result = new CompletableFuture<>(); + result.completeExceptionally( + new ApiException( + 400, + "Missing the required parameter 'variantId' when calling" + + " updateVariantForFeatureFlag")); + 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 updateVariantForFeatureFlag")); + return result; + } + // create path and map variables + String localVarPath = + "/api/v2/feature-flags/{feature_flag_id}/variants/{variant_id}" + .replaceAll( + "\\{" + "feature_flag_id" + "\\}", apiClient.escapeString(featureFlagId.toString())) + .replaceAll("\\{" + "variant_id" + "\\}", apiClient.escapeString(variantId.toString())); + + Map localVarHeaderParams = new HashMap(); + + Invocation.Builder builder; + try { + builder = + apiClient.createBuilder( + "v2.FeatureFlagsApi.updateVariantForFeatureFlag", + localVarPath, + new ArrayList(), + localVarHeaderParams, + new HashMap(), + new String[] {"application/json"}, + new String[] {"apiKeyAuth", "appKeyAuth"}); + } 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/api/SecurityMonitoringApi.java b/src/main/java/com/datadog/api/client/v2/api/SecurityMonitoringApi.java index 2527dd9702e..8464f5331f5 100644 --- a/src/main/java/com/datadog/api/client/v2/api/SecurityMonitoringApi.java +++ b/src/main/java/com/datadog/api/client/v2/api/SecurityMonitoringApi.java @@ -2046,8 +2046,9 @@ public CompletableFuture bulkExportSecurityMonitoringTerraformResourcesAsy /** * 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 or critical_assets. A maximum of 1000 resources - * can be exported in a single request. + * 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 resourceType The type of security monitoring resource to export. (required) * @param body The resource IDs to export. (required) @@ -2844,7 +2845,8 @@ public SecurityMonitoringTerraformExportResponse convertSecurityMonitoringTerraf /** * 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 or critical_assets. + * one of suppressions, critical_assets, security_filters, + * or rules. * * @param resourceType The type of security monitoring resource to export. (required) * @param body The resource JSON to convert. (required) @@ -8936,7 +8938,8 @@ public SecurityMonitoringTerraformExportResponse exportSecurityMonitoringTerrafo /** * 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 or critical_assets. + * suppressions, critical_assets, security_filters, or + * rules. For rules, partner rules cannot be exported and return a 400 error. * * @param resourceType The type of security monitoring resource to export. (required) * @param resourceId The ID of the security monitoring resource to export. (required) diff --git a/src/main/java/com/datadog/api/client/v2/model/BranchCoverageSummaryRequestAttributes.java b/src/main/java/com/datadog/api/client/v2/model/BranchCoverageSummaryRequestAttributes.java index a590ccea7bd..e676aff3129 100644 --- a/src/main/java/com/datadog/api/client/v2/model/BranchCoverageSummaryRequestAttributes.java +++ b/src/main/java/com/datadog/api/client/v2/model/BranchCoverageSummaryRequestAttributes.java @@ -20,7 +20,8 @@ /** Attributes for requesting code coverage summary for a branch. */ @JsonPropertyOrder({ BranchCoverageSummaryRequestAttributes.JSON_PROPERTY_BRANCH, - BranchCoverageSummaryRequestAttributes.JSON_PROPERTY_REPOSITORY_ID + BranchCoverageSummaryRequestAttributes.JSON_PROPERTY_REPOSITORY_ID, + BranchCoverageSummaryRequestAttributes.JSON_PROPERTY_REPOSITORY_URL }) @jakarta.annotation.Generated( value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") @@ -32,14 +33,15 @@ public class BranchCoverageSummaryRequestAttributes { public static final String JSON_PROPERTY_REPOSITORY_ID = "repository_id"; private String repositoryId; + public static final String JSON_PROPERTY_REPOSITORY_URL = "repository_url"; + private String repositoryUrl; + public BranchCoverageSummaryRequestAttributes() {} @JsonCreator public BranchCoverageSummaryRequestAttributes( - @JsonProperty(required = true, value = JSON_PROPERTY_BRANCH) String branch, - @JsonProperty(required = true, value = JSON_PROPERTY_REPOSITORY_ID) String repositoryId) { + @JsonProperty(required = true, value = JSON_PROPERTY_BRANCH) String branch) { this.branch = branch; - this.repositoryId = repositoryId; } public BranchCoverageSummaryRequestAttributes branch(String branch) { @@ -68,20 +70,46 @@ public BranchCoverageSummaryRequestAttributes repositoryId(String repositoryId) } /** - * The repository identifier. + * Deprecated: use repository_url instead. The repository URL. * * @return repositoryId + * @deprecated */ + @Deprecated + @jakarta.annotation.Nullable @JsonProperty(JSON_PROPERTY_REPOSITORY_ID) - @JsonInclude(value = JsonInclude.Include.ALWAYS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) public String getRepositoryId() { return repositoryId; } + @Deprecated public void setRepositoryId(String repositoryId) { this.repositoryId = repositoryId; } + public BranchCoverageSummaryRequestAttributes repositoryUrl(String repositoryUrl) { + this.repositoryUrl = repositoryUrl; + return this; + } + + /** + * The repository URL. Accepts a full URL with or without a scheme (for example, + * https://github.com/org/repo or github.com/org/repo). + * + * @return repositoryUrl + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_REPOSITORY_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getRepositoryUrl() { + return repositoryUrl; + } + + public void setRepositoryUrl(String repositoryUrl) { + this.repositoryUrl = repositoryUrl; + } + /** * A container for additional, undeclared properties. This is a holder for any undeclared * properties as specified with the 'additionalProperties' keyword in the OAS document. @@ -141,13 +169,14 @@ public boolean equals(Object o) { (BranchCoverageSummaryRequestAttributes) o; return Objects.equals(this.branch, branchCoverageSummaryRequestAttributes.branch) && Objects.equals(this.repositoryId, branchCoverageSummaryRequestAttributes.repositoryId) + && Objects.equals(this.repositoryUrl, branchCoverageSummaryRequestAttributes.repositoryUrl) && Objects.equals( this.additionalProperties, branchCoverageSummaryRequestAttributes.additionalProperties); } @Override public int hashCode() { - return Objects.hash(branch, repositoryId, additionalProperties); + return Objects.hash(branch, repositoryId, repositoryUrl, additionalProperties); } @Override @@ -156,6 +185,7 @@ public String toString() { sb.append("class BranchCoverageSummaryRequestAttributes {\n"); sb.append(" branch: ").append(toIndentedString(branch)).append("\n"); sb.append(" repositoryId: ").append(toIndentedString(repositoryId)).append("\n"); + sb.append(" repositoryUrl: ").append(toIndentedString(repositoryUrl)).append("\n"); sb.append(" additionalProperties: ") .append(toIndentedString(additionalProperties)) .append("\n"); diff --git a/src/main/java/com/datadog/api/client/v2/model/CommitCoverageSummaryRequestAttributes.java b/src/main/java/com/datadog/api/client/v2/model/CommitCoverageSummaryRequestAttributes.java index d91fd81c327..1804b9405a0 100644 --- a/src/main/java/com/datadog/api/client/v2/model/CommitCoverageSummaryRequestAttributes.java +++ b/src/main/java/com/datadog/api/client/v2/model/CommitCoverageSummaryRequestAttributes.java @@ -20,7 +20,8 @@ /** Attributes for requesting code coverage summary for a commit. */ @JsonPropertyOrder({ CommitCoverageSummaryRequestAttributes.JSON_PROPERTY_COMMIT_SHA, - CommitCoverageSummaryRequestAttributes.JSON_PROPERTY_REPOSITORY_ID + CommitCoverageSummaryRequestAttributes.JSON_PROPERTY_REPOSITORY_ID, + CommitCoverageSummaryRequestAttributes.JSON_PROPERTY_REPOSITORY_URL }) @jakarta.annotation.Generated( value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") @@ -32,14 +33,15 @@ public class CommitCoverageSummaryRequestAttributes { public static final String JSON_PROPERTY_REPOSITORY_ID = "repository_id"; private String repositoryId; + public static final String JSON_PROPERTY_REPOSITORY_URL = "repository_url"; + private String repositoryUrl; + public CommitCoverageSummaryRequestAttributes() {} @JsonCreator public CommitCoverageSummaryRequestAttributes( - @JsonProperty(required = true, value = JSON_PROPERTY_COMMIT_SHA) String commitSha, - @JsonProperty(required = true, value = JSON_PROPERTY_REPOSITORY_ID) String repositoryId) { + @JsonProperty(required = true, value = JSON_PROPERTY_COMMIT_SHA) String commitSha) { this.commitSha = commitSha; - this.repositoryId = repositoryId; } public CommitCoverageSummaryRequestAttributes commitSha(String commitSha) { @@ -68,20 +70,46 @@ public CommitCoverageSummaryRequestAttributes repositoryId(String repositoryId) } /** - * The repository identifier. + * Deprecated: use repository_url instead. The repository URL. * * @return repositoryId + * @deprecated */ + @Deprecated + @jakarta.annotation.Nullable @JsonProperty(JSON_PROPERTY_REPOSITORY_ID) - @JsonInclude(value = JsonInclude.Include.ALWAYS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) public String getRepositoryId() { return repositoryId; } + @Deprecated public void setRepositoryId(String repositoryId) { this.repositoryId = repositoryId; } + public CommitCoverageSummaryRequestAttributes repositoryUrl(String repositoryUrl) { + this.repositoryUrl = repositoryUrl; + return this; + } + + /** + * The repository URL. Accepts a full URL with or without a scheme (for example, + * https://github.com/org/repo or github.com/org/repo). + * + * @return repositoryUrl + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_REPOSITORY_URL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getRepositoryUrl() { + return repositoryUrl; + } + + public void setRepositoryUrl(String repositoryUrl) { + this.repositoryUrl = repositoryUrl; + } + /** * A container for additional, undeclared properties. This is a holder for any undeclared * properties as specified with the 'additionalProperties' keyword in the OAS document. @@ -141,13 +169,14 @@ public boolean equals(Object o) { (CommitCoverageSummaryRequestAttributes) o; return Objects.equals(this.commitSha, commitCoverageSummaryRequestAttributes.commitSha) && Objects.equals(this.repositoryId, commitCoverageSummaryRequestAttributes.repositoryId) + && Objects.equals(this.repositoryUrl, commitCoverageSummaryRequestAttributes.repositoryUrl) && Objects.equals( this.additionalProperties, commitCoverageSummaryRequestAttributes.additionalProperties); } @Override public int hashCode() { - return Objects.hash(commitSha, repositoryId, additionalProperties); + return Objects.hash(commitSha, repositoryId, repositoryUrl, additionalProperties); } @Override @@ -156,6 +185,7 @@ public String toString() { sb.append("class CommitCoverageSummaryRequestAttributes {\n"); sb.append(" commitSha: ").append(toIndentedString(commitSha)).append("\n"); sb.append(" repositoryId: ").append(toIndentedString(repositoryId)).append("\n"); + sb.append(" repositoryUrl: ").append(toIndentedString(repositoryUrl)).append("\n"); sb.append(" additionalProperties: ") .append(toIndentedString(additionalProperties)) .append("\n"); diff --git a/src/main/java/com/datadog/api/client/v2/model/LogsArchiveDestinationS3.java b/src/main/java/com/datadog/api/client/v2/model/LogsArchiveDestinationS3.java index 4d9cfaa164d..f4db1d90f4a 100644 --- a/src/main/java/com/datadog/api/client/v2/model/LogsArchiveDestinationS3.java +++ b/src/main/java/com/datadog/api/client/v2/model/LogsArchiveDestinationS3.java @@ -113,7 +113,9 @@ public LogsArchiveDestinationS3 integration(LogsArchiveIntegrationS3 integration } /** - * The S3 Archive's integration destination. + * 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. * * @return integration */ diff --git a/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3.java b/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3.java index 9de62a8ea17..919d3877fc9 100644 --- a/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3.java +++ b/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3.java @@ -6,168 +6,283 @@ 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.datadog.api.client.AbstractOpenApiSchema; +import com.datadog.api.client.JSON; +import com.datadog.api.client.UnparsedObject; 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 com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import jakarta.ws.rs.core.GenericType; +import java.io.IOException; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; -import java.util.Objects; +import java.util.logging.Level; +import java.util.logging.Logger; -/** The S3 Archive's integration destination. */ -@JsonPropertyOrder({ - LogsArchiveIntegrationS3.JSON_PROPERTY_ACCOUNT_ID, - LogsArchiveIntegrationS3.JSON_PROPERTY_ROLE_NAME -}) @jakarta.annotation.Generated( value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") -public class LogsArchiveIntegrationS3 { +@JsonDeserialize(using = LogsArchiveIntegrationS3.LogsArchiveIntegrationS3Deserializer.class) +@JsonSerialize(using = LogsArchiveIntegrationS3.LogsArchiveIntegrationS3Serializer.class) +public class LogsArchiveIntegrationS3 extends AbstractOpenApiSchema { + private static final Logger log = Logger.getLogger(LogsArchiveIntegrationS3.class.getName()); + @JsonIgnore public boolean unparsed = false; - public static final String JSON_PROPERTY_ACCOUNT_ID = "account_id"; - private String accountId; - public static final String JSON_PROPERTY_ROLE_NAME = "role_name"; - private String roleName; + public static class LogsArchiveIntegrationS3Serializer + extends StdSerializer { + public LogsArchiveIntegrationS3Serializer(Class t) { + super(t); + } - public LogsArchiveIntegrationS3() {} + public LogsArchiveIntegrationS3Serializer() { + this(null); + } - @JsonCreator - public LogsArchiveIntegrationS3( - @JsonProperty(required = true, value = JSON_PROPERTY_ACCOUNT_ID) String accountId, - @JsonProperty(required = true, value = JSON_PROPERTY_ROLE_NAME) String roleName) { - this.accountId = accountId; - this.roleName = roleName; + @Override + public void serialize( + LogsArchiveIntegrationS3 value, JsonGenerator jgen, SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } } - public LogsArchiveIntegrationS3 accountId(String accountId) { - this.accountId = accountId; - return this; - } + public static class LogsArchiveIntegrationS3Deserializer + extends StdDeserializer { + public LogsArchiveIntegrationS3Deserializer() { + this(LogsArchiveIntegrationS3.class); + } - /** - * The account ID for the integration. - * - * @return accountId - */ - @JsonProperty(JSON_PROPERTY_ACCOUNT_ID) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public String getAccountId() { - return accountId; + public LogsArchiveIntegrationS3Deserializer(Class vc) { + super(vc); + } + + @Override + public LogsArchiveIntegrationS3 deserialize(JsonParser jp, DeserializationContext ctxt) + throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + Object tmp = null; + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize LogsArchiveIntegrationS3AccessKey + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LogsArchiveIntegrationS3AccessKey.class.equals(Integer.class) + || LogsArchiveIntegrationS3AccessKey.class.equals(Long.class) + || LogsArchiveIntegrationS3AccessKey.class.equals(Float.class) + || LogsArchiveIntegrationS3AccessKey.class.equals(Double.class) + || LogsArchiveIntegrationS3AccessKey.class.equals(Boolean.class) + || LogsArchiveIntegrationS3AccessKey.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LogsArchiveIntegrationS3AccessKey.class.equals(Integer.class) + || LogsArchiveIntegrationS3AccessKey.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LogsArchiveIntegrationS3AccessKey.class.equals(Float.class) + || LogsArchiveIntegrationS3AccessKey.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (LogsArchiveIntegrationS3AccessKey.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LogsArchiveIntegrationS3AccessKey.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = tree.traverse(jp.getCodec()).readValueAs(LogsArchiveIntegrationS3AccessKey.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((LogsArchiveIntegrationS3AccessKey) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'LogsArchiveIntegrationS3AccessKey'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, "Input data does not match schema 'LogsArchiveIntegrationS3AccessKey'", e); + } + + // deserialize LogsArchiveIntegrationS3Role + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (LogsArchiveIntegrationS3Role.class.equals(Integer.class) + || LogsArchiveIntegrationS3Role.class.equals(Long.class) + || LogsArchiveIntegrationS3Role.class.equals(Float.class) + || LogsArchiveIntegrationS3Role.class.equals(Double.class) + || LogsArchiveIntegrationS3Role.class.equals(Boolean.class) + || LogsArchiveIntegrationS3Role.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((LogsArchiveIntegrationS3Role.class.equals(Integer.class) + || LogsArchiveIntegrationS3Role.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((LogsArchiveIntegrationS3Role.class.equals(Float.class) + || LogsArchiveIntegrationS3Role.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (LogsArchiveIntegrationS3Role.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (LogsArchiveIntegrationS3Role.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = tree.traverse(jp.getCodec()).readValueAs(LogsArchiveIntegrationS3Role.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((LogsArchiveIntegrationS3Role) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'LogsArchiveIntegrationS3Role'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log(Level.FINER, "Input data does not match schema 'LogsArchiveIntegrationS3Role'", e); + } + + LogsArchiveIntegrationS3 ret = new LogsArchiveIntegrationS3(); + if (match == 1) { + ret.setActualInstance(deserialized); + } else { + Map res = + new ObjectMapper() + .readValue( + tree.traverse(jp.getCodec()).readValueAsTree().toString(), + new TypeReference>() {}); + ret.setActualInstance(new UnparsedObject(res)); + } + return ret; + } + + /** Handle deserialization of the 'null' value. */ + @Override + public LogsArchiveIntegrationS3 getNullValue(DeserializationContext ctxt) + throws JsonMappingException { + throw new JsonMappingException(ctxt.getParser(), "LogsArchiveIntegrationS3 cannot be null"); + } } - public void setAccountId(String accountId) { - this.accountId = accountId; + // store a list of schema names defined in oneOf + public static final Map schemas = new HashMap(); + + public LogsArchiveIntegrationS3() { + super("oneOf", Boolean.FALSE); } - public LogsArchiveIntegrationS3 roleName(String roleName) { - this.roleName = roleName; - return this; + public LogsArchiveIntegrationS3(LogsArchiveIntegrationS3AccessKey o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); } - /** - * The path of the integration. - * - * @return roleName - */ - @JsonProperty(JSON_PROPERTY_ROLE_NAME) - @JsonInclude(value = JsonInclude.Include.ALWAYS) - public String getRoleName() { - return roleName; + public LogsArchiveIntegrationS3(LogsArchiveIntegrationS3Role o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); } - public void setRoleName(String roleName) { - this.roleName = roleName; + static { + schemas.put( + "LogsArchiveIntegrationS3AccessKey", + new GenericType() {}); + schemas.put("LogsArchiveIntegrationS3Role", new GenericType() {}); + JSON.registerDescendants(LogsArchiveIntegrationS3.class, Collections.unmodifiableMap(schemas)); } - /** - * 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; + @Override + public Map getSchemas() { + return LogsArchiveIntegrationS3.schemas; + } /** - * Set the additional (undeclared) property with the specified name and value. If the property - * does not already exist, create it otherwise replace it. + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: LogsArchiveIntegrationS3AccessKey, + * LogsArchiveIntegrationS3Role * - * @param key The arbitrary key to set - * @param value The associated value - * @return LogsArchiveIntegrationS3 + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). */ - @JsonAnySetter - public LogsArchiveIntegrationS3 putAdditionalProperty(String key, Object value) { - if (this.additionalProperties == null) { - this.additionalProperties = new HashMap(); + @Override + public void setActualInstance(Object instance) { + if (JSON.isInstanceOf( + LogsArchiveIntegrationS3AccessKey.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf(LogsArchiveIntegrationS3Role.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(UnparsedObject.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; } - this.additionalProperties.put(key, value); - return this; + throw new RuntimeException( + "Invalid instance type. Must be LogsArchiveIntegrationS3AccessKey," + + " LogsArchiveIntegrationS3Role"); } /** - * Return the additional (undeclared) property. + * Get the actual instance, which can be the following: LogsArchiveIntegrationS3AccessKey, + * LogsArchiveIntegrationS3Role * - * @return The additional properties + * @return The actual instance (LogsArchiveIntegrationS3AccessKey, LogsArchiveIntegrationS3Role) */ - @JsonAnyGetter - public Map getAdditionalProperties() { - return additionalProperties; + @Override + public Object getActualInstance() { + return super.getActualInstance(); } /** - * Return the additional (undeclared) property with the specified name. + * Get the actual instance of `LogsArchiveIntegrationS3AccessKey`. If the actual instance is not + * `LogsArchiveIntegrationS3AccessKey`, the ClassCastException will be thrown. * - * @param key The arbitrary key to get - * @return The specific additional property for the given key + * @return The actual instance of `LogsArchiveIntegrationS3AccessKey` + * @throws ClassCastException if the instance is not `LogsArchiveIntegrationS3AccessKey` */ - public Object getAdditionalProperty(String key) { - if (this.additionalProperties == null) { - return null; - } - return this.additionalProperties.get(key); - } - - /** Return true if this LogsArchiveIntegrationS3 object is equal to o. */ - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - LogsArchiveIntegrationS3 logsArchiveIntegrationS3 = (LogsArchiveIntegrationS3) o; - return Objects.equals(this.accountId, logsArchiveIntegrationS3.accountId) - && Objects.equals(this.roleName, logsArchiveIntegrationS3.roleName) - && Objects.equals(this.additionalProperties, logsArchiveIntegrationS3.additionalProperties); - } - - @Override - public int hashCode() { - return Objects.hash(accountId, roleName, additionalProperties); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class LogsArchiveIntegrationS3 {\n"); - sb.append(" accountId: ").append(toIndentedString(accountId)).append("\n"); - sb.append(" roleName: ").append(toIndentedString(roleName)).append("\n"); - sb.append(" additionalProperties: ") - .append(toIndentedString(additionalProperties)) - .append("\n"); - sb.append('}'); - return sb.toString(); + public LogsArchiveIntegrationS3AccessKey getLogsArchiveIntegrationS3AccessKey() + throws ClassCastException { + return (LogsArchiveIntegrationS3AccessKey) super.getActualInstance(); } /** - * Convert the given object to string with each line indented by 4 spaces (except the first line). + * Get the actual instance of `LogsArchiveIntegrationS3Role`. If the actual instance is not + * `LogsArchiveIntegrationS3Role`, the ClassCastException will be thrown. + * + * @return The actual instance of `LogsArchiveIntegrationS3Role` + * @throws ClassCastException if the instance is not `LogsArchiveIntegrationS3Role` */ - private String toIndentedString(Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); + public LogsArchiveIntegrationS3Role getLogsArchiveIntegrationS3Role() throws ClassCastException { + return (LogsArchiveIntegrationS3Role) super.getActualInstance(); } } diff --git a/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3AccessKey.java b/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3AccessKey.java new file mode 100644 index 00000000000..da81d59e699 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3AccessKey.java @@ -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. + */ + +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; + +/** The S3 Archive's integration destination using an access key. */ +@JsonPropertyOrder({LogsArchiveIntegrationS3AccessKey.JSON_PROPERTY_ACCESS_KEY_ID}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class LogsArchiveIntegrationS3AccessKey { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_ACCESS_KEY_ID = "access_key_id"; + private String accessKeyId; + + public LogsArchiveIntegrationS3AccessKey() {} + + @JsonCreator + public LogsArchiveIntegrationS3AccessKey( + @JsonProperty(required = true, value = JSON_PROPERTY_ACCESS_KEY_ID) String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + public LogsArchiveIntegrationS3AccessKey accessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + return this; + } + + /** + * The access key ID for the integration. + * + * @return accessKeyId + */ + @JsonProperty(JSON_PROPERTY_ACCESS_KEY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getAccessKeyId() { + return accessKeyId; + } + + public void setAccessKeyId(String accessKeyId) { + this.accessKeyId = accessKeyId; + } + + /** + * 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 LogsArchiveIntegrationS3AccessKey + */ + @JsonAnySetter + public LogsArchiveIntegrationS3AccessKey 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 LogsArchiveIntegrationS3AccessKey object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LogsArchiveIntegrationS3AccessKey logsArchiveIntegrationS3AccessKey = + (LogsArchiveIntegrationS3AccessKey) o; + return Objects.equals(this.accessKeyId, logsArchiveIntegrationS3AccessKey.accessKeyId) + && Objects.equals( + this.additionalProperties, logsArchiveIntegrationS3AccessKey.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(accessKeyId, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LogsArchiveIntegrationS3AccessKey {\n"); + sb.append(" accessKeyId: ").append(toIndentedString(accessKeyId)).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/LogsArchiveIntegrationS3Role.java b/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3Role.java new file mode 100644 index 00000000000..6cf709a2e1b --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/LogsArchiveIntegrationS3Role.java @@ -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. + */ + +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; + +/** The S3 Archive's integration destination using an IAM role. */ +@JsonPropertyOrder({ + LogsArchiveIntegrationS3Role.JSON_PROPERTY_ACCOUNT_ID, + LogsArchiveIntegrationS3Role.JSON_PROPERTY_ROLE_NAME +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class LogsArchiveIntegrationS3Role { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_ACCOUNT_ID = "account_id"; + private String accountId; + + public static final String JSON_PROPERTY_ROLE_NAME = "role_name"; + private String roleName; + + public LogsArchiveIntegrationS3Role() {} + + @JsonCreator + public LogsArchiveIntegrationS3Role( + @JsonProperty(required = true, value = JSON_PROPERTY_ACCOUNT_ID) String accountId, + @JsonProperty(required = true, value = JSON_PROPERTY_ROLE_NAME) String roleName) { + this.accountId = accountId; + this.roleName = roleName; + } + + public LogsArchiveIntegrationS3Role accountId(String accountId) { + this.accountId = accountId; + return this; + } + + /** + * The account ID for the integration. + * + * @return accountId + */ + @JsonProperty(JSON_PROPERTY_ACCOUNT_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getAccountId() { + return accountId; + } + + public void setAccountId(String accountId) { + this.accountId = accountId; + } + + public LogsArchiveIntegrationS3Role roleName(String roleName) { + this.roleName = roleName; + return this; + } + + /** + * The name of the role to assume for the integration. + * + * @return roleName + */ + @JsonProperty(JSON_PROPERTY_ROLE_NAME) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + /** + * 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 LogsArchiveIntegrationS3Role + */ + @JsonAnySetter + public LogsArchiveIntegrationS3Role 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 LogsArchiveIntegrationS3Role object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + LogsArchiveIntegrationS3Role logsArchiveIntegrationS3Role = (LogsArchiveIntegrationS3Role) o; + return Objects.equals(this.accountId, logsArchiveIntegrationS3Role.accountId) + && Objects.equals(this.roleName, logsArchiveIntegrationS3Role.roleName) + && Objects.equals( + this.additionalProperties, logsArchiveIntegrationS3Role.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(accountId, roleName, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class LogsArchiveIntegrationS3Role {\n"); + sb.append(" accountId: ").append(toIndentedString(accountId)).append("\n"); + sb.append(" roleName: ").append(toIndentedString(roleName)).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/ObservabilityPipelineClickhouseDestination.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestination.java new file mode 100644 index 00000000000..8b5be2129ff --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestination.java @@ -0,0 +1,585 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import org.openapitools.jackson.nullable.JsonNullable; + +/** + * The clickhouse destination sends log events to a ClickHouse database table over + * HTTP. + * + *

Supported pipeline types: logs. + */ +@JsonPropertyOrder({ + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_AUTH, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_BATCH, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_BATCH_ENCODING, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_COMPRESSION, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_DATABASE, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_DATE_TIME_BEST_EFFORT, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_ENDPOINT_URL_KEY, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_FORMAT, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_ID, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_INPUTS, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_SKIP_UNKNOWN_FIELDS, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_TABLE, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_TLS, + ObservabilityPipelineClickhouseDestination.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineClickhouseDestination { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_AUTH = "auth"; + private ObservabilityPipelineClickhouseDestinationAuth auth; + + public static final String JSON_PROPERTY_BATCH = "batch"; + private ObservabilityPipelineClickhouseDestinationBatch batch; + + public static final String JSON_PROPERTY_BATCH_ENCODING = "batch_encoding"; + private ObservabilityPipelineClickhouseDestinationBatchEncoding batchEncoding; + + public static final String JSON_PROPERTY_COMPRESSION = "compression"; + private ObservabilityPipelineClickhouseDestinationCompression compression; + + public static final String JSON_PROPERTY_DATABASE = "database"; + private String database; + + public static final String JSON_PROPERTY_DATE_TIME_BEST_EFFORT = "date_time_best_effort"; + private Boolean dateTimeBestEffort; + + public static final String JSON_PROPERTY_ENDPOINT_URL_KEY = "endpoint_url_key"; + private String endpointUrlKey; + + public static final String JSON_PROPERTY_FORMAT = "format"; + private ObservabilityPipelineClickhouseDestinationFormat format; + + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_INPUTS = "inputs"; + private List inputs = new ArrayList<>(); + + public static final String JSON_PROPERTY_SKIP_UNKNOWN_FIELDS = "skip_unknown_fields"; + private JsonNullable skipUnknownFields = JsonNullable.undefined(); + + public static final String JSON_PROPERTY_TABLE = "table"; + private String table; + + public static final String JSON_PROPERTY_TLS = "tls"; + private ObservabilityPipelineTls tls; + + public static final String JSON_PROPERTY_TYPE = "type"; + private ObservabilityPipelineClickhouseDestinationType type = + ObservabilityPipelineClickhouseDestinationType.CLICKHOUSE; + + public ObservabilityPipelineClickhouseDestination() {} + + @JsonCreator + public ObservabilityPipelineClickhouseDestination( + @JsonProperty(required = true, value = JSON_PROPERTY_ID) String id, + @JsonProperty(required = true, value = JSON_PROPERTY_INPUTS) List inputs, + @JsonProperty(required = true, value = JSON_PROPERTY_TABLE) String table, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) + ObservabilityPipelineClickhouseDestinationType type) { + this.id = id; + this.inputs = inputs; + this.table = table; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public ObservabilityPipelineClickhouseDestination auth( + ObservabilityPipelineClickhouseDestinationAuth auth) { + this.auth = auth; + this.unparsed |= auth.unparsed; + return this; + } + + /** + * 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. + * + * @return auth + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_AUTH) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObservabilityPipelineClickhouseDestinationAuth getAuth() { + return auth; + } + + public void setAuth(ObservabilityPipelineClickhouseDestinationAuth auth) { + this.auth = auth; + } + + public ObservabilityPipelineClickhouseDestination batch( + ObservabilityPipelineClickhouseDestinationBatch batch) { + this.batch = batch; + this.unparsed |= batch.unparsed; + return this; + } + + /** + * Batching configuration for ClickHouse inserts. + * + * @return batch + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_BATCH) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObservabilityPipelineClickhouseDestinationBatch getBatch() { + return batch; + } + + public void setBatch(ObservabilityPipelineClickhouseDestinationBatch batch) { + this.batch = batch; + } + + public ObservabilityPipelineClickhouseDestination batchEncoding( + ObservabilityPipelineClickhouseDestinationBatchEncoding batchEncoding) { + this.batchEncoding = batchEncoding; + this.unparsed |= batchEncoding.unparsed; + return this; + } + + /** + * Batch encoding configuration for the ClickHouse destination. Required when format + * is arrow_stream. The codec field must be set to arrow_stream + * . + * + * @return batchEncoding + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_BATCH_ENCODING) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObservabilityPipelineClickhouseDestinationBatchEncoding getBatchEncoding() { + return batchEncoding; + } + + public void setBatchEncoding( + ObservabilityPipelineClickhouseDestinationBatchEncoding batchEncoding) { + this.batchEncoding = batchEncoding; + } + + public ObservabilityPipelineClickhouseDestination compression( + ObservabilityPipelineClickhouseDestinationCompression compression) { + this.compression = compression; + this.unparsed |= compression.unparsed; + return this; + } + + /** + * 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). + * + * @return compression + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_COMPRESSION) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObservabilityPipelineClickhouseDestinationCompression getCompression() { + return compression; + } + + public void setCompression(ObservabilityPipelineClickhouseDestinationCompression compression) { + this.compression = compression; + } + + public ObservabilityPipelineClickhouseDestination database(String database) { + this.database = database; + return this; + } + + /** + * Optional ClickHouse database name. If omitted, the user's default database on the ClickHouse + * server is used. + * + * @return database + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DATABASE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getDatabase() { + return database; + } + + public void setDatabase(String database) { + this.database = database; + } + + public ObservabilityPipelineClickhouseDestination dateTimeBestEffort(Boolean dateTimeBestEffort) { + this.dateTimeBestEffort = dateTimeBestEffort; + return this; + } + + /** + * When true, enables flexible DateTime parsing on the ClickHouse server side. + * + * @return dateTimeBestEffort + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_DATE_TIME_BEST_EFFORT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getDateTimeBestEffort() { + return dateTimeBestEffort; + } + + public void setDateTimeBestEffort(Boolean dateTimeBestEffort) { + this.dateTimeBestEffort = dateTimeBestEffort; + } + + public ObservabilityPipelineClickhouseDestination endpointUrlKey(String endpointUrlKey) { + this.endpointUrlKey = endpointUrlKey; + return this; + } + + /** + * 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). + * + * @return endpointUrlKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ENDPOINT_URL_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getEndpointUrlKey() { + return endpointUrlKey; + } + + public void setEndpointUrlKey(String endpointUrlKey) { + this.endpointUrlKey = endpointUrlKey; + } + + public ObservabilityPipelineClickhouseDestination format( + ObservabilityPipelineClickhouseDestinationFormat format) { + this.format = format; + this.unparsed |= !format.isValid(); + return this; + } + + /** + * 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. + * + * @return format + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_FORMAT) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObservabilityPipelineClickhouseDestinationFormat getFormat() { + return format; + } + + public void setFormat(ObservabilityPipelineClickhouseDestinationFormat format) { + if (!format.isValid()) { + this.unparsed = true; + } + this.format = format; + } + + public ObservabilityPipelineClickhouseDestination id(String id) { + this.id = id; + return this; + } + + /** + * The unique identifier for this component. + * + * @return id + */ + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public ObservabilityPipelineClickhouseDestination inputs(List inputs) { + this.inputs = inputs; + return this; + } + + public ObservabilityPipelineClickhouseDestination addInputsItem(String inputsItem) { + this.inputs.add(inputsItem); + return this; + } + + /** + * A list of component IDs whose output is used as the input for this component. + * + * @return inputs + */ + @JsonProperty(JSON_PROPERTY_INPUTS) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public List getInputs() { + return inputs; + } + + public void setInputs(List inputs) { + this.inputs = inputs; + } + + public ObservabilityPipelineClickhouseDestination skipUnknownFields(Boolean skipUnknownFields) { + this.skipUnknownFields = JsonNullable.of(skipUnknownFields); + return this; + } + + /** + * 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. + * + * @return skipUnknownFields + */ + @jakarta.annotation.Nullable + @JsonIgnore + public Boolean getSkipUnknownFields() { + return skipUnknownFields.orElse(null); + } + + @JsonProperty(JSON_PROPERTY_SKIP_UNKNOWN_FIELDS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public JsonNullable getSkipUnknownFields_JsonNullable() { + return skipUnknownFields; + } + + @JsonProperty(JSON_PROPERTY_SKIP_UNKNOWN_FIELDS) + public void setSkipUnknownFields_JsonNullable(JsonNullable skipUnknownFields) { + this.skipUnknownFields = skipUnknownFields; + } + + public void setSkipUnknownFields(Boolean skipUnknownFields) { + this.skipUnknownFields = JsonNullable.of(skipUnknownFields); + } + + public ObservabilityPipelineClickhouseDestination table(String table) { + this.table = table; + return this; + } + + /** + * Target ClickHouse table name. Events are inserted into this table. + * + * @return table + */ + @JsonProperty(JSON_PROPERTY_TABLE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getTable() { + return table; + } + + public void setTable(String table) { + this.table = table; + } + + public ObservabilityPipelineClickhouseDestination tls(ObservabilityPipelineTls tls) { + this.tls = tls; + this.unparsed |= tls.unparsed; + return this; + } + + /** + * Configuration for enabling TLS encryption between the pipeline component and external services. + * + * @return tls + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TLS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObservabilityPipelineTls getTls() { + return tls; + } + + public void setTls(ObservabilityPipelineTls tls) { + this.tls = tls; + } + + public ObservabilityPipelineClickhouseDestination type( + ObservabilityPipelineClickhouseDestinationType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * The destination type. The value must be clickhouse. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineClickhouseDestinationType getType() { + return type; + } + + public void setType(ObservabilityPipelineClickhouseDestinationType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + /** + * 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 ObservabilityPipelineClickhouseDestination + */ + @JsonAnySetter + public ObservabilityPipelineClickhouseDestination 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 ObservabilityPipelineClickhouseDestination object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineClickhouseDestination observabilityPipelineClickhouseDestination = + (ObservabilityPipelineClickhouseDestination) o; + return Objects.equals(this.auth, observabilityPipelineClickhouseDestination.auth) + && Objects.equals(this.batch, observabilityPipelineClickhouseDestination.batch) + && Objects.equals( + this.batchEncoding, observabilityPipelineClickhouseDestination.batchEncoding) + && Objects.equals(this.compression, observabilityPipelineClickhouseDestination.compression) + && Objects.equals(this.database, observabilityPipelineClickhouseDestination.database) + && Objects.equals( + this.dateTimeBestEffort, observabilityPipelineClickhouseDestination.dateTimeBestEffort) + && Objects.equals( + this.endpointUrlKey, observabilityPipelineClickhouseDestination.endpointUrlKey) + && Objects.equals(this.format, observabilityPipelineClickhouseDestination.format) + && Objects.equals(this.id, observabilityPipelineClickhouseDestination.id) + && Objects.equals(this.inputs, observabilityPipelineClickhouseDestination.inputs) + && Objects.equals( + this.skipUnknownFields, observabilityPipelineClickhouseDestination.skipUnknownFields) + && Objects.equals(this.table, observabilityPipelineClickhouseDestination.table) + && Objects.equals(this.tls, observabilityPipelineClickhouseDestination.tls) + && Objects.equals(this.type, observabilityPipelineClickhouseDestination.type) + && Objects.equals( + this.additionalProperties, + observabilityPipelineClickhouseDestination.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash( + auth, + batch, + batchEncoding, + compression, + database, + dateTimeBestEffort, + endpointUrlKey, + format, + id, + inputs, + skipUnknownFields, + table, + tls, + type, + additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineClickhouseDestination {\n"); + sb.append(" auth: ").append(toIndentedString(auth)).append("\n"); + sb.append(" batch: ").append(toIndentedString(batch)).append("\n"); + sb.append(" batchEncoding: ").append(toIndentedString(batchEncoding)).append("\n"); + sb.append(" compression: ").append(toIndentedString(compression)).append("\n"); + sb.append(" database: ").append(toIndentedString(database)).append("\n"); + sb.append(" dateTimeBestEffort: ").append(toIndentedString(dateTimeBestEffort)).append("\n"); + sb.append(" endpointUrlKey: ").append(toIndentedString(endpointUrlKey)).append("\n"); + sb.append(" format: ").append(toIndentedString(format)).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" inputs: ").append(toIndentedString(inputs)).append("\n"); + sb.append(" skipUnknownFields: ").append(toIndentedString(skipUnknownFields)).append("\n"); + sb.append(" table: ").append(toIndentedString(table)).append("\n"); + sb.append(" tls: ").append(toIndentedString(tls)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).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/ObservabilityPipelineClickhouseDestinationAuth.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationAuth.java new file mode 100644 index 00000000000..83111bc13db --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationAuth.java @@ -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. + */ + +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; + +/** + * 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. + */ +@JsonPropertyOrder({ + ObservabilityPipelineClickhouseDestinationAuth.JSON_PROPERTY_PASSWORD_KEY, + ObservabilityPipelineClickhouseDestinationAuth.JSON_PROPERTY_STRATEGY, + ObservabilityPipelineClickhouseDestinationAuth.JSON_PROPERTY_USERNAME_KEY +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineClickhouseDestinationAuth { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_PASSWORD_KEY = "password_key"; + private String passwordKey; + + public static final String JSON_PROPERTY_STRATEGY = "strategy"; + private ObservabilityPipelineClickhouseDestinationAuthStrategy strategy; + + public static final String JSON_PROPERTY_USERNAME_KEY = "username_key"; + private String usernameKey; + + public ObservabilityPipelineClickhouseDestinationAuth() {} + + @JsonCreator + public ObservabilityPipelineClickhouseDestinationAuth( + @JsonProperty(required = true, value = JSON_PROPERTY_STRATEGY) + ObservabilityPipelineClickhouseDestinationAuthStrategy strategy) { + this.strategy = strategy; + this.unparsed |= !strategy.isValid(); + } + + public ObservabilityPipelineClickhouseDestinationAuth passwordKey(String passwordKey) { + this.passwordKey = passwordKey; + return this; + } + + /** + * Name of the environment variable or secret that contains the ClickHouse password. + * + * @return passwordKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_PASSWORD_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getPasswordKey() { + return passwordKey; + } + + public void setPasswordKey(String passwordKey) { + this.passwordKey = passwordKey; + } + + public ObservabilityPipelineClickhouseDestinationAuth strategy( + ObservabilityPipelineClickhouseDestinationAuthStrategy strategy) { + this.strategy = strategy; + this.unparsed |= !strategy.isValid(); + return this; + } + + /** + * The authentication strategy for ClickHouse HTTP requests. Only basic is supported. + * + * @return strategy + */ + @JsonProperty(JSON_PROPERTY_STRATEGY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineClickhouseDestinationAuthStrategy getStrategy() { + return strategy; + } + + public void setStrategy(ObservabilityPipelineClickhouseDestinationAuthStrategy strategy) { + if (!strategy.isValid()) { + this.unparsed = true; + } + this.strategy = strategy; + } + + public ObservabilityPipelineClickhouseDestinationAuth usernameKey(String usernameKey) { + this.usernameKey = usernameKey; + return this; + } + + /** + * Name of the environment variable or secret that contains the ClickHouse username. + * + * @return usernameKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_USERNAME_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getUsernameKey() { + return usernameKey; + } + + public void setUsernameKey(String usernameKey) { + this.usernameKey = usernameKey; + } + + /** + * 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 ObservabilityPipelineClickhouseDestinationAuth + */ + @JsonAnySetter + public ObservabilityPipelineClickhouseDestinationAuth 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 ObservabilityPipelineClickhouseDestinationAuth object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineClickhouseDestinationAuth observabilityPipelineClickhouseDestinationAuth = + (ObservabilityPipelineClickhouseDestinationAuth) o; + return Objects.equals( + this.passwordKey, observabilityPipelineClickhouseDestinationAuth.passwordKey) + && Objects.equals(this.strategy, observabilityPipelineClickhouseDestinationAuth.strategy) + && Objects.equals( + this.usernameKey, observabilityPipelineClickhouseDestinationAuth.usernameKey) + && Objects.equals( + this.additionalProperties, + observabilityPipelineClickhouseDestinationAuth.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(passwordKey, strategy, usernameKey, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineClickhouseDestinationAuth {\n"); + sb.append(" passwordKey: ").append(toIndentedString(passwordKey)).append("\n"); + sb.append(" strategy: ").append(toIndentedString(strategy)).append("\n"); + sb.append(" usernameKey: ").append(toIndentedString(usernameKey)).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/ObservabilityPipelineClickhouseDestinationAuthStrategy.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationAuthStrategy.java new file mode 100644 index 00000000000..5b527d0b13d --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationAuthStrategy.java @@ -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. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** + * The authentication strategy for ClickHouse HTTP requests. Only basic is supported. + */ +@JsonSerialize( + using = + ObservabilityPipelineClickhouseDestinationAuthStrategy + .ObservabilityPipelineClickhouseDestinationAuthStrategySerializer.class) +public class ObservabilityPipelineClickhouseDestinationAuthStrategy extends ModelEnum { + + private static final Set allowedValues = new HashSet(Arrays.asList("basic")); + + public static final ObservabilityPipelineClickhouseDestinationAuthStrategy BASIC = + new ObservabilityPipelineClickhouseDestinationAuthStrategy("basic"); + + ObservabilityPipelineClickhouseDestinationAuthStrategy(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineClickhouseDestinationAuthStrategySerializer + extends StdSerializer { + public ObservabilityPipelineClickhouseDestinationAuthStrategySerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineClickhouseDestinationAuthStrategySerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineClickhouseDestinationAuthStrategy value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineClickhouseDestinationAuthStrategy fromValue(String value) { + return new ObservabilityPipelineClickhouseDestinationAuthStrategy(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatch.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatch.java new file mode 100644 index 00000000000..c662a2d21da --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatch.java @@ -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. + */ + +package com.datadog.api.client.v2.model; + +import com.fasterxml.jackson.annotation.JsonAnyGetter; +import com.fasterxml.jackson.annotation.JsonAnySetter; +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; + +/** Batching configuration for ClickHouse inserts. */ +@JsonPropertyOrder({ + ObservabilityPipelineClickhouseDestinationBatch.JSON_PROPERTY_MAX_EVENTS, + ObservabilityPipelineClickhouseDestinationBatch.JSON_PROPERTY_TIMEOUT_SECS +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineClickhouseDestinationBatch { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_MAX_EVENTS = "max_events"; + private Long maxEvents; + + public static final String JSON_PROPERTY_TIMEOUT_SECS = "timeout_secs"; + private Long timeoutSecs; + + public ObservabilityPipelineClickhouseDestinationBatch maxEvents(Long maxEvents) { + this.maxEvents = maxEvents; + return this; + } + + /** + * Maximum number of events per batch before it is flushed. minimum: 1 + * + * @return maxEvents + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_MAX_EVENTS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getMaxEvents() { + return maxEvents; + } + + public void setMaxEvents(Long maxEvents) { + this.maxEvents = maxEvents; + } + + public ObservabilityPipelineClickhouseDestinationBatch timeoutSecs(Long timeoutSecs) { + this.timeoutSecs = timeoutSecs; + return this; + } + + /** + * Maximum number of seconds to wait before flushing a partial batch. minimum: 1 maximum: 65535 + * + * @return timeoutSecs + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TIMEOUT_SECS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getTimeoutSecs() { + return timeoutSecs; + } + + public void setTimeoutSecs(Long timeoutSecs) { + this.timeoutSecs = timeoutSecs; + } + + /** + * 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 ObservabilityPipelineClickhouseDestinationBatch + */ + @JsonAnySetter + public ObservabilityPipelineClickhouseDestinationBatch 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 ObservabilityPipelineClickhouseDestinationBatch object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineClickhouseDestinationBatch + observabilityPipelineClickhouseDestinationBatch = + (ObservabilityPipelineClickhouseDestinationBatch) o; + return Objects.equals(this.maxEvents, observabilityPipelineClickhouseDestinationBatch.maxEvents) + && Objects.equals( + this.timeoutSecs, observabilityPipelineClickhouseDestinationBatch.timeoutSecs) + && Objects.equals( + this.additionalProperties, + observabilityPipelineClickhouseDestinationBatch.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(maxEvents, timeoutSecs, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineClickhouseDestinationBatch {\n"); + sb.append(" maxEvents: ").append(toIndentedString(maxEvents)).append("\n"); + sb.append(" timeoutSecs: ").append(toIndentedString(timeoutSecs)).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/ObservabilityPipelineClickhouseDestinationBatchEncoding.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatchEncoding.java new file mode 100644 index 00000000000..27fe5f207d2 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatchEncoding.java @@ -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. + */ + +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; + +/** + * Batch encoding configuration for the ClickHouse destination. Required when format is + * arrow_stream. The codec field must be set to arrow_stream. + */ +@JsonPropertyOrder({ + ObservabilityPipelineClickhouseDestinationBatchEncoding.JSON_PROPERTY_ALLOW_NULLABLE_FIELDS, + ObservabilityPipelineClickhouseDestinationBatchEncoding.JSON_PROPERTY_CODEC +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineClickhouseDestinationBatchEncoding { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_ALLOW_NULLABLE_FIELDS = "allow_nullable_fields"; + private Boolean allowNullableFields; + + public static final String JSON_PROPERTY_CODEC = "codec"; + private ObservabilityPipelineClickhouseDestinationBatchEncodingCodec codec; + + public ObservabilityPipelineClickhouseDestinationBatchEncoding() {} + + @JsonCreator + public ObservabilityPipelineClickhouseDestinationBatchEncoding( + @JsonProperty(required = true, value = JSON_PROPERTY_CODEC) + ObservabilityPipelineClickhouseDestinationBatchEncodingCodec codec) { + this.codec = codec; + this.unparsed |= !codec.isValid(); + } + + public ObservabilityPipelineClickhouseDestinationBatchEncoding allowNullableFields( + Boolean allowNullableFields) { + this.allowNullableFields = allowNullableFields; + return this; + } + + /** + * 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. + * + * @return allowNullableFields + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_ALLOW_NULLABLE_FIELDS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Boolean getAllowNullableFields() { + return allowNullableFields; + } + + public void setAllowNullableFields(Boolean allowNullableFields) { + this.allowNullableFields = allowNullableFields; + } + + public ObservabilityPipelineClickhouseDestinationBatchEncoding codec( + ObservabilityPipelineClickhouseDestinationBatchEncodingCodec codec) { + this.codec = codec; + this.unparsed |= !codec.isValid(); + return this; + } + + /** + * The codec used for batch encoding. Only arrow_stream is supported. + * + * @return codec + */ + @JsonProperty(JSON_PROPERTY_CODEC) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineClickhouseDestinationBatchEncodingCodec getCodec() { + return codec; + } + + public void setCodec(ObservabilityPipelineClickhouseDestinationBatchEncodingCodec codec) { + if (!codec.isValid()) { + this.unparsed = true; + } + this.codec = codec; + } + + /** + * 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 ObservabilityPipelineClickhouseDestinationBatchEncoding + */ + @JsonAnySetter + public ObservabilityPipelineClickhouseDestinationBatchEncoding 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 ObservabilityPipelineClickhouseDestinationBatchEncoding object is equal to + * o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineClickhouseDestinationBatchEncoding + observabilityPipelineClickhouseDestinationBatchEncoding = + (ObservabilityPipelineClickhouseDestinationBatchEncoding) o; + return Objects.equals( + this.allowNullableFields, + observabilityPipelineClickhouseDestinationBatchEncoding.allowNullableFields) + && Objects.equals(this.codec, observabilityPipelineClickhouseDestinationBatchEncoding.codec) + && Objects.equals( + this.additionalProperties, + observabilityPipelineClickhouseDestinationBatchEncoding.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(allowNullableFields, codec, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineClickhouseDestinationBatchEncoding {\n"); + sb.append(" allowNullableFields: ") + .append(toIndentedString(allowNullableFields)) + .append("\n"); + sb.append(" codec: ").append(toIndentedString(codec)).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/ObservabilityPipelineClickhouseDestinationBatchEncodingCodec.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatchEncodingCodec.java new file mode 100644 index 00000000000..4e36a7ad379 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationBatchEncodingCodec.java @@ -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. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** The codec used for batch encoding. Only arrow_stream is supported. */ +@JsonSerialize( + using = + ObservabilityPipelineClickhouseDestinationBatchEncodingCodec + .ObservabilityPipelineClickhouseDestinationBatchEncodingCodecSerializer.class) +public class ObservabilityPipelineClickhouseDestinationBatchEncodingCodec + extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("arrow_stream")); + + public static final ObservabilityPipelineClickhouseDestinationBatchEncodingCodec ARROW_STREAM = + new ObservabilityPipelineClickhouseDestinationBatchEncodingCodec("arrow_stream"); + + ObservabilityPipelineClickhouseDestinationBatchEncodingCodec(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineClickhouseDestinationBatchEncodingCodecSerializer + extends StdSerializer { + public ObservabilityPipelineClickhouseDestinationBatchEncodingCodecSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineClickhouseDestinationBatchEncodingCodecSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineClickhouseDestinationBatchEncodingCodec value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineClickhouseDestinationBatchEncodingCodec fromValue( + String value) { + return new ObservabilityPipelineClickhouseDestinationBatchEncodingCodec(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompression.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompression.java new file mode 100644 index 00000000000..9182d6c4c28 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompression.java @@ -0,0 +1,360 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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.datadog.api.client.AbstractOpenApiSchema; +import com.datadog.api.client.JSON; +import com.datadog.api.client.UnparsedObject; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import jakarta.ws.rs.core.GenericType; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +@JsonDeserialize( + using = + ObservabilityPipelineClickhouseDestinationCompression + .ObservabilityPipelineClickhouseDestinationCompressionDeserializer.class) +@JsonSerialize( + using = + ObservabilityPipelineClickhouseDestinationCompression + .ObservabilityPipelineClickhouseDestinationCompressionSerializer.class) +public class ObservabilityPipelineClickhouseDestinationCompression extends AbstractOpenApiSchema { + private static final Logger log = + Logger.getLogger(ObservabilityPipelineClickhouseDestinationCompression.class.getName()); + + @JsonIgnore public boolean unparsed = false; + + public static class ObservabilityPipelineClickhouseDestinationCompressionSerializer + extends StdSerializer { + public ObservabilityPipelineClickhouseDestinationCompressionSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineClickhouseDestinationCompressionSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineClickhouseDestinationCompression value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static class ObservabilityPipelineClickhouseDestinationCompressionDeserializer + extends StdDeserializer { + public ObservabilityPipelineClickhouseDestinationCompressionDeserializer() { + this(ObservabilityPipelineClickhouseDestinationCompression.class); + } + + public ObservabilityPipelineClickhouseDestinationCompressionDeserializer(Class vc) { + super(vc); + } + + @Override + public ObservabilityPipelineClickhouseDestinationCompression deserialize( + JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + Object tmp = null; + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + Integer.class) + || ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + Long.class) + || ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + Float.class) + || ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + Double.class) + || ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + Boolean.class) + || ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + Integer.class) + || ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class + .equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + Float.class) + || ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class + .equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class.equals( + String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs( + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + deserialized = tmp; + match++; + + log.log( + Level.FINER, + "Input data matches schema" + + " 'ObservabilityPipelineClickhouseDestinationCompressionAlgorithm'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema" + + " 'ObservabilityPipelineClickhouseDestinationCompressionAlgorithm'", + e); + } + + // deserialize ObservabilityPipelineClickhouseDestinationCompressionObject + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals(Integer.class) + || ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals(Long.class) + || ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals(Float.class) + || ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + Double.class) + || ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + Boolean.class) + || ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + Integer.class) + || ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + Float.class) + || ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (ObservabilityPipelineClickhouseDestinationCompressionObject.class.equals( + String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs(ObservabilityPipelineClickhouseDestinationCompressionObject.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((ObservabilityPipelineClickhouseDestinationCompressionObject) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log( + Level.FINER, + "Input data matches schema" + + " 'ObservabilityPipelineClickhouseDestinationCompressionObject'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema" + + " 'ObservabilityPipelineClickhouseDestinationCompressionObject'", + e); + } + + ObservabilityPipelineClickhouseDestinationCompression ret = + new ObservabilityPipelineClickhouseDestinationCompression(); + if (match == 1) { + ret.setActualInstance(deserialized); + } else { + Map res = + new ObjectMapper() + .readValue( + tree.traverse(jp.getCodec()).readValueAsTree().toString(), + new TypeReference>() {}); + ret.setActualInstance(new UnparsedObject(res)); + } + return ret; + } + + /** Handle deserialization of the 'null' value. */ + @Override + public ObservabilityPipelineClickhouseDestinationCompression getNullValue( + DeserializationContext ctxt) throws JsonMappingException { + throw new JsonMappingException( + ctxt.getParser(), "ObservabilityPipelineClickhouseDestinationCompression cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map schemas = new HashMap(); + + public ObservabilityPipelineClickhouseDestinationCompression() { + super("oneOf", Boolean.FALSE); + } + + public ObservabilityPipelineClickhouseDestinationCompression( + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public ObservabilityPipelineClickhouseDestinationCompression( + ObservabilityPipelineClickhouseDestinationCompressionObject o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put( + "ObservabilityPipelineClickhouseDestinationCompressionAlgorithm", + new GenericType() {}); + schemas.put( + "ObservabilityPipelineClickhouseDestinationCompressionObject", + new GenericType() {}); + JSON.registerDescendants( + ObservabilityPipelineClickhouseDestinationCompression.class, + Collections.unmodifiableMap(schemas)); + } + + @Override + public Map getSchemas() { + return ObservabilityPipelineClickhouseDestinationCompression.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: + * ObservabilityPipelineClickhouseDestinationCompressionAlgorithm, + * ObservabilityPipelineClickhouseDestinationCompressionObject + * + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSON.isInstanceOf( + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.class, + instance, + new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf( + ObservabilityPipelineClickhouseDestinationCompressionObject.class, + instance, + new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(UnparsedObject.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + throw new RuntimeException( + "Invalid instance type. Must be" + + " ObservabilityPipelineClickhouseDestinationCompressionAlgorithm," + + " ObservabilityPipelineClickhouseDestinationCompressionObject"); + } + + /** + * Get the actual instance, which can be the following: + * ObservabilityPipelineClickhouseDestinationCompressionAlgorithm, + * ObservabilityPipelineClickhouseDestinationCompressionObject + * + * @return The actual instance (ObservabilityPipelineClickhouseDestinationCompressionAlgorithm, + * ObservabilityPipelineClickhouseDestinationCompressionObject) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `ObservabilityPipelineClickhouseDestinationCompressionAlgorithm`. If + * the actual instance is not `ObservabilityPipelineClickhouseDestinationCompressionAlgorithm`, + * the ClassCastException will be thrown. + * + * @return The actual instance of `ObservabilityPipelineClickhouseDestinationCompressionAlgorithm` + * @throws ClassCastException if the instance is not + * `ObservabilityPipelineClickhouseDestinationCompressionAlgorithm` + */ + public ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + getObservabilityPipelineClickhouseDestinationCompressionAlgorithm() + throws ClassCastException { + return (ObservabilityPipelineClickhouseDestinationCompressionAlgorithm) + super.getActualInstance(); + } + + /** + * Get the actual instance of `ObservabilityPipelineClickhouseDestinationCompressionObject`. If + * the actual instance is not `ObservabilityPipelineClickhouseDestinationCompressionObject`, the + * ClassCastException will be thrown. + * + * @return The actual instance of `ObservabilityPipelineClickhouseDestinationCompressionObject` + * @throws ClassCastException if the instance is not + * `ObservabilityPipelineClickhouseDestinationCompressionObject` + */ + public ObservabilityPipelineClickhouseDestinationCompressionObject + getObservabilityPipelineClickhouseDestinationCompressionObject() throws ClassCastException { + return (ObservabilityPipelineClickhouseDestinationCompressionObject) super.getActualInstance(); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.java new file mode 100644 index 00000000000..e8721793a27 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompressionAlgorithm.java @@ -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. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** The compression algorithm applied to outbound HTTP requests. */ +@JsonSerialize( + using = + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + .ObservabilityPipelineClickhouseDestinationCompressionAlgorithmSerializer.class) +public class ObservabilityPipelineClickhouseDestinationCompressionAlgorithm + extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("gzip", "none")); + + public static final ObservabilityPipelineClickhouseDestinationCompressionAlgorithm GZIP = + new ObservabilityPipelineClickhouseDestinationCompressionAlgorithm("gzip"); + public static final ObservabilityPipelineClickhouseDestinationCompressionAlgorithm NONE = + new ObservabilityPipelineClickhouseDestinationCompressionAlgorithm("none"); + + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineClickhouseDestinationCompressionAlgorithmSerializer + extends StdSerializer { + public ObservabilityPipelineClickhouseDestinationCompressionAlgorithmSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineClickhouseDestinationCompressionAlgorithmSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineClickhouseDestinationCompressionAlgorithm fromValue( + String value) { + return new ObservabilityPipelineClickhouseDestinationCompressionAlgorithm(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompressionObject.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompressionObject.java new file mode 100644 index 00000000000..65d165c46a7 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationCompressionObject.java @@ -0,0 +1,195 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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; + +/** + * Structured compression configuration for the ClickHouse destination. Use algorithm + * to specify the compression type and level (optional, gzip only) to control + * compression strength. + */ +@JsonPropertyOrder({ + ObservabilityPipelineClickhouseDestinationCompressionObject.JSON_PROPERTY_ALGORITHM, + ObservabilityPipelineClickhouseDestinationCompressionObject.JSON_PROPERTY_LEVEL +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineClickhouseDestinationCompressionObject { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_ALGORITHM = "algorithm"; + private ObservabilityPipelineClickhouseDestinationCompressionAlgorithm algorithm; + + public static final String JSON_PROPERTY_LEVEL = "level"; + private Long level; + + public ObservabilityPipelineClickhouseDestinationCompressionObject() {} + + @JsonCreator + public ObservabilityPipelineClickhouseDestinationCompressionObject( + @JsonProperty(required = true, value = JSON_PROPERTY_ALGORITHM) + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm algorithm) { + this.algorithm = algorithm; + this.unparsed |= !algorithm.isValid(); + } + + public ObservabilityPipelineClickhouseDestinationCompressionObject algorithm( + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm algorithm) { + this.algorithm = algorithm; + this.unparsed |= !algorithm.isValid(); + return this; + } + + /** + * The compression algorithm applied to outbound HTTP requests. + * + * @return algorithm + */ + @JsonProperty(JSON_PROPERTY_ALGORITHM) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineClickhouseDestinationCompressionAlgorithm getAlgorithm() { + return algorithm; + } + + public void setAlgorithm( + ObservabilityPipelineClickhouseDestinationCompressionAlgorithm algorithm) { + if (!algorithm.isValid()) { + this.unparsed = true; + } + this.algorithm = algorithm; + } + + public ObservabilityPipelineClickhouseDestinationCompressionObject level(Long level) { + this.level = level; + return this; + } + + /** + * Compression level (1–9). Only applicable when algorithm is gzip. + * minimum: 1 maximum: 9 + * + * @return level + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_LEVEL) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public Long getLevel() { + return level; + } + + public void setLevel(Long level) { + this.level = level; + } + + /** + * 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 ObservabilityPipelineClickhouseDestinationCompressionObject + */ + @JsonAnySetter + public ObservabilityPipelineClickhouseDestinationCompressionObject 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 ObservabilityPipelineClickhouseDestinationCompressionObject object is equal + * to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineClickhouseDestinationCompressionObject + observabilityPipelineClickhouseDestinationCompressionObject = + (ObservabilityPipelineClickhouseDestinationCompressionObject) o; + return Objects.equals( + this.algorithm, observabilityPipelineClickhouseDestinationCompressionObject.algorithm) + && Objects.equals( + this.level, observabilityPipelineClickhouseDestinationCompressionObject.level) + && Objects.equals( + this.additionalProperties, + observabilityPipelineClickhouseDestinationCompressionObject.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(algorithm, level, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineClickhouseDestinationCompressionObject {\n"); + sb.append(" algorithm: ").append(toIndentedString(algorithm)).append("\n"); + sb.append(" level: ").append(toIndentedString(level)).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/ObservabilityPipelineClickhouseDestinationFormat.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationFormat.java new file mode 100644 index 00000000000..3e3705a50c5 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationFormat.java @@ -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. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** + * 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. + */ +@JsonSerialize( + using = + ObservabilityPipelineClickhouseDestinationFormat + .ObservabilityPipelineClickhouseDestinationFormatSerializer.class) +public class ObservabilityPipelineClickhouseDestinationFormat extends ModelEnum { + + private static final Set allowedValues = + new HashSet( + Arrays.asList("json_each_row", "json_as_object", "json_as_string", "arrow_stream")); + + public static final ObservabilityPipelineClickhouseDestinationFormat JSON_EACH_ROW = + new ObservabilityPipelineClickhouseDestinationFormat("json_each_row"); + public static final ObservabilityPipelineClickhouseDestinationFormat JSON_AS_OBJECT = + new ObservabilityPipelineClickhouseDestinationFormat("json_as_object"); + public static final ObservabilityPipelineClickhouseDestinationFormat JSON_AS_STRING = + new ObservabilityPipelineClickhouseDestinationFormat("json_as_string"); + public static final ObservabilityPipelineClickhouseDestinationFormat ARROW_STREAM = + new ObservabilityPipelineClickhouseDestinationFormat("arrow_stream"); + + ObservabilityPipelineClickhouseDestinationFormat(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineClickhouseDestinationFormatSerializer + extends StdSerializer { + public ObservabilityPipelineClickhouseDestinationFormatSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineClickhouseDestinationFormatSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineClickhouseDestinationFormat value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineClickhouseDestinationFormat fromValue(String value) { + return new ObservabilityPipelineClickhouseDestinationFormat(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationType.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationType.java new file mode 100644 index 00000000000..226023e452b --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineClickhouseDestinationType.java @@ -0,0 +1,62 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** The destination type. The value must be clickhouse. */ +@JsonSerialize( + using = + ObservabilityPipelineClickhouseDestinationType + .ObservabilityPipelineClickhouseDestinationTypeSerializer.class) +public class ObservabilityPipelineClickhouseDestinationType extends ModelEnum { + + private static final Set allowedValues = new HashSet(Arrays.asList("clickhouse")); + + public static final ObservabilityPipelineClickhouseDestinationType CLICKHOUSE = + new ObservabilityPipelineClickhouseDestinationType("clickhouse"); + + ObservabilityPipelineClickhouseDestinationType(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineClickhouseDestinationTypeSerializer + extends StdSerializer { + public ObservabilityPipelineClickhouseDestinationTypeSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineClickhouseDestinationTypeSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineClickhouseDestinationType value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineClickhouseDestinationType fromValue(String value) { + return new ObservabilityPipelineClickhouseDestinationType(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineConfigDestinationItem.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineConfigDestinationItem.java index 5193145c7e6..fb68db07218 100644 --- a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineConfigDestinationItem.java +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineConfigDestinationItem.java @@ -451,6 +451,58 @@ public ObservabilityPipelineConfigDestinationItem deserialize( log.log(Level.FINER, "Input data does not match schema 'AzureStorageDestination'", e); } + // deserialize ObservabilityPipelineClickhouseDestination + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ObservabilityPipelineClickhouseDestination.class.equals(Integer.class) + || ObservabilityPipelineClickhouseDestination.class.equals(Long.class) + || ObservabilityPipelineClickhouseDestination.class.equals(Float.class) + || ObservabilityPipelineClickhouseDestination.class.equals(Double.class) + || ObservabilityPipelineClickhouseDestination.class.equals(Boolean.class) + || ObservabilityPipelineClickhouseDestination.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((ObservabilityPipelineClickhouseDestination.class.equals(Integer.class) + || ObservabilityPipelineClickhouseDestination.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((ObservabilityPipelineClickhouseDestination.class.equals(Float.class) + || ObservabilityPipelineClickhouseDestination.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (ObservabilityPipelineClickhouseDestination.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (ObservabilityPipelineClickhouseDestination.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs(ObservabilityPipelineClickhouseDestination.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((ObservabilityPipelineClickhouseDestination) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log( + Level.FINER, + "Input data matches schema 'ObservabilityPipelineClickhouseDestination'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'ObservabilityPipelineClickhouseDestination'", + e); + } + // deserialize ObservabilityPipelineCloudPremDestination try { boolean attemptParsing = true; @@ -1503,6 +1555,11 @@ public ObservabilityPipelineConfigDestinationItem(AzureStorageDestination o) { setActualInstance(o); } + public ObservabilityPipelineConfigDestinationItem(ObservabilityPipelineClickhouseDestination o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public ObservabilityPipelineConfigDestinationItem(ObservabilityPipelineCloudPremDestination o) { super("oneOf", Boolean.FALSE); setActualInstance(o); @@ -1625,6 +1682,9 @@ public ObservabilityPipelineConfigDestinationItem( "ObservabilityPipelineAmazonSecurityLakeDestination", new GenericType() {}); schemas.put("AzureStorageDestination", new GenericType() {}); + schemas.put( + "ObservabilityPipelineClickhouseDestination", + new GenericType() {}); schemas.put( "ObservabilityPipelineCloudPremDestination", new GenericType() {}); @@ -1695,7 +1755,7 @@ public Map getSchemas() { * ObservabilityPipelineHttpClientDestination, ObservabilityPipelineAmazonOpenSearchDestination, * ObservabilityPipelineAmazonS3Destination, ObservabilityPipelineAmazonS3GenericDestination, * ObservabilityPipelineAmazonSecurityLakeDestination, AzureStorageDestination, - * ObservabilityPipelineCloudPremDestination, + * ObservabilityPipelineClickhouseDestination, ObservabilityPipelineCloudPremDestination, * ObservabilityPipelineCrowdStrikeNextGenSiemDestination, * ObservabilityPipelineDatadogLogsDestination, ObservabilityPipelineGoogleChronicleDestination, * ObservabilityPipelineGoogleCloudStorageDestination, @@ -1751,6 +1811,11 @@ public void setActualInstance(Object instance) { super.setActualInstance(instance); return; } + if (JSON.isInstanceOf( + ObservabilityPipelineClickhouseDestination.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } if (JSON.isInstanceOf( ObservabilityPipelineCloudPremDestination.class, instance, new HashSet>())) { super.setActualInstance(instance); @@ -1865,6 +1930,7 @@ public void setActualInstance(Object instance) { + " ObservabilityPipelineAmazonS3Destination," + " ObservabilityPipelineAmazonS3GenericDestination," + " ObservabilityPipelineAmazonSecurityLakeDestination, AzureStorageDestination," + + " ObservabilityPipelineClickhouseDestination," + " ObservabilityPipelineCloudPremDestination," + " ObservabilityPipelineCrowdStrikeNextGenSiemDestination," + " ObservabilityPipelineDatadogLogsDestination," @@ -1890,7 +1956,7 @@ public void setActualInstance(Object instance) { * ObservabilityPipelineAmazonOpenSearchDestination, ObservabilityPipelineAmazonS3Destination, * ObservabilityPipelineAmazonS3GenericDestination, * ObservabilityPipelineAmazonSecurityLakeDestination, AzureStorageDestination, - * ObservabilityPipelineCloudPremDestination, + * ObservabilityPipelineClickhouseDestination, ObservabilityPipelineCloudPremDestination, * ObservabilityPipelineCrowdStrikeNextGenSiemDestination, * ObservabilityPipelineDatadogLogsDestination, ObservabilityPipelineGoogleChronicleDestination, * ObservabilityPipelineGoogleCloudStorageDestination, @@ -1908,7 +1974,7 @@ public void setActualInstance(Object instance) { * ObservabilityPipelineAmazonOpenSearchDestination, ObservabilityPipelineAmazonS3Destination, * ObservabilityPipelineAmazonS3GenericDestination, * ObservabilityPipelineAmazonSecurityLakeDestination, AzureStorageDestination, - * ObservabilityPipelineCloudPremDestination, + * ObservabilityPipelineClickhouseDestination, ObservabilityPipelineCloudPremDestination, * ObservabilityPipelineCrowdStrikeNextGenSiemDestination, * ObservabilityPipelineDatadogLogsDestination, * ObservabilityPipelineGoogleChronicleDestination, @@ -2019,6 +2085,18 @@ public AzureStorageDestination getAzureStorageDestination() throws ClassCastExce return (AzureStorageDestination) super.getActualInstance(); } + /** + * Get the actual instance of `ObservabilityPipelineClickhouseDestination`. If the actual instance + * is not `ObservabilityPipelineClickhouseDestination`, the ClassCastException will be thrown. + * + * @return The actual instance of `ObservabilityPipelineClickhouseDestination` + * @throws ClassCastException if the instance is not `ObservabilityPipelineClickhouseDestination` + */ + public ObservabilityPipelineClickhouseDestination getObservabilityPipelineClickhouseDestination() + throws ClassCastException { + return (ObservabilityPipelineClickhouseDestination) super.getActualInstance(); + } + /** * Get the actual instance of `ObservabilityPipelineCloudPremDestination`. If the actual instance * is not `ObservabilityPipelineCloudPremDestination`, the ClassCastException will be thrown. diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineConfigSourceItem.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineConfigSourceItem.java index 15957348145..6f9c5c2ac18 100644 --- a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineConfigSourceItem.java +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineConfigSourceItem.java @@ -869,6 +869,55 @@ public ObservabilityPipelineConfigSourceItem deserialize( e); } + // deserialize ObservabilityPipelineWebsocketSource + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ObservabilityPipelineWebsocketSource.class.equals(Integer.class) + || ObservabilityPipelineWebsocketSource.class.equals(Long.class) + || ObservabilityPipelineWebsocketSource.class.equals(Float.class) + || ObservabilityPipelineWebsocketSource.class.equals(Double.class) + || ObservabilityPipelineWebsocketSource.class.equals(Boolean.class) + || ObservabilityPipelineWebsocketSource.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((ObservabilityPipelineWebsocketSource.class.equals(Integer.class) + || ObservabilityPipelineWebsocketSource.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((ObservabilityPipelineWebsocketSource.class.equals(Float.class) + || ObservabilityPipelineWebsocketSource.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (ObservabilityPipelineWebsocketSource.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (ObservabilityPipelineWebsocketSource.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()).readValueAs(ObservabilityPipelineWebsocketSource.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((ObservabilityPipelineWebsocketSource) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log(Level.FINER, "Input data matches schema 'ObservabilityPipelineWebsocketSource'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'ObservabilityPipelineWebsocketSource'", + e); + } + // deserialize ObservabilityPipelineOpentelemetrySource try { boolean attemptParsing = true; @@ -1030,6 +1079,11 @@ public ObservabilityPipelineConfigSourceItem(ObservabilityPipelineSyslogNgSource setActualInstance(o); } + public ObservabilityPipelineConfigSourceItem(ObservabilityPipelineWebsocketSource o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + public ObservabilityPipelineConfigSourceItem(ObservabilityPipelineOpentelemetrySource o) { super("oneOf", Boolean.FALSE); setActualInstance(o); @@ -1083,6 +1137,9 @@ public ObservabilityPipelineConfigSourceItem(ObservabilityPipelineOpentelemetryS schemas.put( "ObservabilityPipelineSyslogNgSource", new GenericType() {}); + schemas.put( + "ObservabilityPipelineWebsocketSource", + new GenericType() {}); schemas.put( "ObservabilityPipelineOpentelemetrySource", new GenericType() {}); @@ -1105,7 +1162,8 @@ public Map getSchemas() { * ObservabilityPipelineLogstashSource, ObservabilityPipelineRsyslogSource, * ObservabilityPipelineSocketSource, ObservabilityPipelineSplunkHecSource, * ObservabilityPipelineSplunkTcpSource, ObservabilityPipelineSumoLogicSource, - * ObservabilityPipelineSyslogNgSource, ObservabilityPipelineOpentelemetrySource + * ObservabilityPipelineSyslogNgSource, ObservabilityPipelineWebsocketSource, + * ObservabilityPipelineOpentelemetrySource * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a * composed schema (allOf, anyOf, oneOf). @@ -1192,6 +1250,11 @@ public void setActualInstance(Object instance) { super.setActualInstance(instance); return; } + if (JSON.isInstanceOf( + ObservabilityPipelineWebsocketSource.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } if (JSON.isInstanceOf( ObservabilityPipelineOpentelemetrySource.class, instance, new HashSet>())) { super.setActualInstance(instance); @@ -1211,7 +1274,8 @@ public void setActualInstance(Object instance) { + " ObservabilityPipelineLogstashSource, ObservabilityPipelineRsyslogSource," + " ObservabilityPipelineSocketSource, ObservabilityPipelineSplunkHecSource," + " ObservabilityPipelineSplunkTcpSource, ObservabilityPipelineSumoLogicSource," - + " ObservabilityPipelineSyslogNgSource, ObservabilityPipelineOpentelemetrySource"); + + " ObservabilityPipelineSyslogNgSource, ObservabilityPipelineWebsocketSource," + + " ObservabilityPipelineOpentelemetrySource"); } /** @@ -1223,7 +1287,8 @@ public void setActualInstance(Object instance) { * ObservabilityPipelineLogstashSource, ObservabilityPipelineRsyslogSource, * ObservabilityPipelineSocketSource, ObservabilityPipelineSplunkHecSource, * ObservabilityPipelineSplunkTcpSource, ObservabilityPipelineSumoLogicSource, - * ObservabilityPipelineSyslogNgSource, ObservabilityPipelineOpentelemetrySource + * ObservabilityPipelineSyslogNgSource, ObservabilityPipelineWebsocketSource, + * ObservabilityPipelineOpentelemetrySource * * @return The actual instance (ObservabilityPipelineDatadogAgentSource, * ObservabilityPipelineAmazonDataFirehoseSource, ObservabilityPipelineAmazonS3Source, @@ -1233,7 +1298,8 @@ public void setActualInstance(Object instance) { * ObservabilityPipelineLogstashSource, ObservabilityPipelineRsyslogSource, * ObservabilityPipelineSocketSource, ObservabilityPipelineSplunkHecSource, * ObservabilityPipelineSplunkTcpSource, ObservabilityPipelineSumoLogicSource, - * ObservabilityPipelineSyslogNgSource, ObservabilityPipelineOpentelemetrySource) + * ObservabilityPipelineSyslogNgSource, ObservabilityPipelineWebsocketSource, + * ObservabilityPipelineOpentelemetrySource) */ @Override public Object getActualInstance() { @@ -1434,6 +1500,18 @@ public ObservabilityPipelineSyslogNgSource getObservabilityPipelineSyslogNgSourc return (ObservabilityPipelineSyslogNgSource) super.getActualInstance(); } + /** + * Get the actual instance of `ObservabilityPipelineWebsocketSource`. If the actual instance is + * not `ObservabilityPipelineWebsocketSource`, the ClassCastException will be thrown. + * + * @return The actual instance of `ObservabilityPipelineWebsocketSource` + * @throws ClassCastException if the instance is not `ObservabilityPipelineWebsocketSource` + */ + public ObservabilityPipelineWebsocketSource getObservabilityPipelineWebsocketSource() + throws ClassCastException { + return (ObservabilityPipelineWebsocketSource) super.getActualInstance(); + } + /** * Get the actual instance of `ObservabilityPipelineOpentelemetrySource`. If the actual instance * is not `ObservabilityPipelineOpentelemetrySource`, the ClassCastException will be thrown. diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSource.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSource.java new file mode 100644 index 00000000000..57bc8ee4b09 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSource.java @@ -0,0 +1,437 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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; + +/** + * The websocket source ingests logs from a WebSocket server using the ws:// + * or wss:// protocol. + * + *

Supported pipeline types: logs. + */ +@JsonPropertyOrder({ + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_AUTH_STRATEGY, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_CUSTOM_KEY, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_DECODING, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_ID, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_PASSWORD_KEY, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_TLS, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_TOKEN_KEY, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_TYPE, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_URI_KEY, + ObservabilityPipelineWebsocketSource.JSON_PROPERTY_USERNAME_KEY +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineWebsocketSource { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_AUTH_STRATEGY = "auth_strategy"; + private ObservabilityPipelineWebsocketSourceAuthStrategy authStrategy; + + public static final String JSON_PROPERTY_CUSTOM_KEY = "custom_key"; + private String customKey; + + public static final String JSON_PROPERTY_DECODING = "decoding"; + private ObservabilityPipelineDecoding decoding; + + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_PASSWORD_KEY = "password_key"; + private String passwordKey; + + public static final String JSON_PROPERTY_TLS = "tls"; + private ObservabilityPipelineWebsocketSourceTls tls; + + public static final String JSON_PROPERTY_TOKEN_KEY = "token_key"; + private String tokenKey; + + public static final String JSON_PROPERTY_TYPE = "type"; + private ObservabilityPipelineWebsocketSourceType type = + ObservabilityPipelineWebsocketSourceType.WEBSOCKET; + + public static final String JSON_PROPERTY_URI_KEY = "uri_key"; + private String uriKey; + + public static final String JSON_PROPERTY_USERNAME_KEY = "username_key"; + private String usernameKey; + + public ObservabilityPipelineWebsocketSource() {} + + @JsonCreator + public ObservabilityPipelineWebsocketSource( + @JsonProperty(required = true, value = JSON_PROPERTY_AUTH_STRATEGY) + ObservabilityPipelineWebsocketSourceAuthStrategy authStrategy, + @JsonProperty(required = true, value = JSON_PROPERTY_DECODING) + ObservabilityPipelineDecoding decoding, + @JsonProperty(required = true, value = JSON_PROPERTY_ID) String id, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) + ObservabilityPipelineWebsocketSourceType type) { + this.authStrategy = authStrategy; + this.unparsed |= !authStrategy.isValid(); + this.decoding = decoding; + this.unparsed |= !decoding.isValid(); + this.id = id; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public ObservabilityPipelineWebsocketSource authStrategy( + ObservabilityPipelineWebsocketSourceAuthStrategy authStrategy) { + this.authStrategy = authStrategy; + this.unparsed |= !authStrategy.isValid(); + return this; + } + + /** + * Authentication strategy for the WebSocket source connection. + * + * @return authStrategy + */ + @JsonProperty(JSON_PROPERTY_AUTH_STRATEGY) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineWebsocketSourceAuthStrategy getAuthStrategy() { + return authStrategy; + } + + public void setAuthStrategy(ObservabilityPipelineWebsocketSourceAuthStrategy authStrategy) { + if (!authStrategy.isValid()) { + this.unparsed = true; + } + this.authStrategy = authStrategy; + } + + public ObservabilityPipelineWebsocketSource customKey(String customKey) { + this.customKey = customKey; + return this; + } + + /** + * Name of the environment variable or secret that holds the custom authorization header value. + * Used when auth_strategy is custom. + * + * @return customKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CUSTOM_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getCustomKey() { + return customKey; + } + + public void setCustomKey(String customKey) { + this.customKey = customKey; + } + + public ObservabilityPipelineWebsocketSource decoding(ObservabilityPipelineDecoding decoding) { + this.decoding = decoding; + this.unparsed |= !decoding.isValid(); + return this; + } + + /** + * The decoding format used to interpret incoming logs. + * + * @return decoding + */ + @JsonProperty(JSON_PROPERTY_DECODING) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineDecoding getDecoding() { + return decoding; + } + + public void setDecoding(ObservabilityPipelineDecoding decoding) { + if (!decoding.isValid()) { + this.unparsed = true; + } + this.decoding = decoding; + } + + public ObservabilityPipelineWebsocketSource id(String id) { + this.id = id; + return this; + } + + /** + * The unique identifier for this component. + * + * @return id + */ + @JsonProperty(JSON_PROPERTY_ID) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public ObservabilityPipelineWebsocketSource passwordKey(String passwordKey) { + this.passwordKey = passwordKey; + return this; + } + + /** + * Name of the environment variable or secret that holds the password. Used when + * auth_strategy is basic. + * + * @return passwordKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_PASSWORD_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getPasswordKey() { + return passwordKey; + } + + public void setPasswordKey(String passwordKey) { + this.passwordKey = passwordKey; + } + + public ObservabilityPipelineWebsocketSource tls(ObservabilityPipelineWebsocketSourceTls tls) { + this.tls = tls; + this.unparsed |= tls.unparsed; + return this; + } + + /** + * TLS configuration for the WebSocket source. Use enabled for standard wss:// + * connections, or with_client_cert to present a client certificate for + * mutual TLS. + * + * @return tls + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TLS) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public ObservabilityPipelineWebsocketSourceTls getTls() { + return tls; + } + + public void setTls(ObservabilityPipelineWebsocketSourceTls tls) { + this.tls = tls; + } + + public ObservabilityPipelineWebsocketSource tokenKey(String tokenKey) { + this.tokenKey = tokenKey; + return this; + } + + /** + * Name of the environment variable or secret that holds the bearer token. Used when + * auth_strategy is bearer. + * + * @return tokenKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_TOKEN_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getTokenKey() { + return tokenKey; + } + + public void setTokenKey(String tokenKey) { + this.tokenKey = tokenKey; + } + + public ObservabilityPipelineWebsocketSource type(ObservabilityPipelineWebsocketSourceType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * The source type. The value should always be websocket. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineWebsocketSourceType getType() { + return type; + } + + public void setType(ObservabilityPipelineWebsocketSourceType type) { + if (!type.isValid()) { + this.unparsed = true; + } + this.type = type; + } + + public ObservabilityPipelineWebsocketSource uriKey(String uriKey) { + this.uriKey = uriKey; + return this; + } + + /** + * Name of the environment variable or secret that holds the WebSocket server URI (ws:// + * or wss://). + * + * @return uriKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_URI_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getUriKey() { + return uriKey; + } + + public void setUriKey(String uriKey) { + this.uriKey = uriKey; + } + + public ObservabilityPipelineWebsocketSource usernameKey(String usernameKey) { + this.usernameKey = usernameKey; + return this; + } + + /** + * Name of the environment variable or secret that holds the username. Used when + * auth_strategy is basic. + * + * @return usernameKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_USERNAME_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getUsernameKey() { + return usernameKey; + } + + public void setUsernameKey(String usernameKey) { + this.usernameKey = usernameKey; + } + + /** + * 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 ObservabilityPipelineWebsocketSource + */ + @JsonAnySetter + public ObservabilityPipelineWebsocketSource 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 ObservabilityPipelineWebsocketSource object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineWebsocketSource observabilityPipelineWebsocketSource = + (ObservabilityPipelineWebsocketSource) o; + return Objects.equals(this.authStrategy, observabilityPipelineWebsocketSource.authStrategy) + && Objects.equals(this.customKey, observabilityPipelineWebsocketSource.customKey) + && Objects.equals(this.decoding, observabilityPipelineWebsocketSource.decoding) + && Objects.equals(this.id, observabilityPipelineWebsocketSource.id) + && Objects.equals(this.passwordKey, observabilityPipelineWebsocketSource.passwordKey) + && Objects.equals(this.tls, observabilityPipelineWebsocketSource.tls) + && Objects.equals(this.tokenKey, observabilityPipelineWebsocketSource.tokenKey) + && Objects.equals(this.type, observabilityPipelineWebsocketSource.type) + && Objects.equals(this.uriKey, observabilityPipelineWebsocketSource.uriKey) + && Objects.equals(this.usernameKey, observabilityPipelineWebsocketSource.usernameKey) + && Objects.equals( + this.additionalProperties, observabilityPipelineWebsocketSource.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash( + authStrategy, + customKey, + decoding, + id, + passwordKey, + tls, + tokenKey, + type, + uriKey, + usernameKey, + additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineWebsocketSource {\n"); + sb.append(" authStrategy: ").append(toIndentedString(authStrategy)).append("\n"); + sb.append(" customKey: ").append(toIndentedString(customKey)).append("\n"); + sb.append(" decoding: ").append(toIndentedString(decoding)).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).append("\n"); + sb.append(" passwordKey: ").append(toIndentedString(passwordKey)).append("\n"); + sb.append(" tls: ").append(toIndentedString(tls)).append("\n"); + sb.append(" tokenKey: ").append(toIndentedString(tokenKey)).append("\n"); + sb.append(" type: ").append(toIndentedString(type)).append("\n"); + sb.append(" uriKey: ").append(toIndentedString(uriKey)).append("\n"); + sb.append(" usernameKey: ").append(toIndentedString(usernameKey)).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/ObservabilityPipelineWebsocketSourceAuthStrategy.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceAuthStrategy.java new file mode 100644 index 00000000000..021e2522754 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceAuthStrategy.java @@ -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. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** Authentication strategy for the WebSocket source connection. */ +@JsonSerialize( + using = + ObservabilityPipelineWebsocketSourceAuthStrategy + .ObservabilityPipelineWebsocketSourceAuthStrategySerializer.class) +public class ObservabilityPipelineWebsocketSourceAuthStrategy extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("none", "basic", "bearer", "custom")); + + public static final ObservabilityPipelineWebsocketSourceAuthStrategy NONE = + new ObservabilityPipelineWebsocketSourceAuthStrategy("none"); + public static final ObservabilityPipelineWebsocketSourceAuthStrategy BASIC = + new ObservabilityPipelineWebsocketSourceAuthStrategy("basic"); + public static final ObservabilityPipelineWebsocketSourceAuthStrategy BEARER = + new ObservabilityPipelineWebsocketSourceAuthStrategy("bearer"); + public static final ObservabilityPipelineWebsocketSourceAuthStrategy CUSTOM = + new ObservabilityPipelineWebsocketSourceAuthStrategy("custom"); + + ObservabilityPipelineWebsocketSourceAuthStrategy(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineWebsocketSourceAuthStrategySerializer + extends StdSerializer { + public ObservabilityPipelineWebsocketSourceAuthStrategySerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineWebsocketSourceAuthStrategySerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineWebsocketSourceAuthStrategy value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineWebsocketSourceAuthStrategy fromValue(String value) { + return new ObservabilityPipelineWebsocketSourceAuthStrategy(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTls.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTls.java new file mode 100644 index 00000000000..62a66081bcd --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTls.java @@ -0,0 +1,330 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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.datadog.api.client.AbstractOpenApiSchema; +import com.datadog.api.client.JSON; +import com.datadog.api.client.UnparsedObject; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.JsonToken; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.MapperFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import jakarta.ws.rs.core.GenericType; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +@JsonDeserialize( + using = + ObservabilityPipelineWebsocketSourceTls.ObservabilityPipelineWebsocketSourceTlsDeserializer + .class) +@JsonSerialize( + using = + ObservabilityPipelineWebsocketSourceTls.ObservabilityPipelineWebsocketSourceTlsSerializer + .class) +public class ObservabilityPipelineWebsocketSourceTls extends AbstractOpenApiSchema { + private static final Logger log = + Logger.getLogger(ObservabilityPipelineWebsocketSourceTls.class.getName()); + + @JsonIgnore public boolean unparsed = false; + + public static class ObservabilityPipelineWebsocketSourceTlsSerializer + extends StdSerializer { + public ObservabilityPipelineWebsocketSourceTlsSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineWebsocketSourceTlsSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineWebsocketSourceTls value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.getActualInstance()); + } + } + + public static class ObservabilityPipelineWebsocketSourceTlsDeserializer + extends StdDeserializer { + public ObservabilityPipelineWebsocketSourceTlsDeserializer() { + this(ObservabilityPipelineWebsocketSourceTls.class); + } + + public ObservabilityPipelineWebsocketSourceTlsDeserializer(Class vc) { + super(vc); + } + + @Override + public ObservabilityPipelineWebsocketSourceTls deserialize( + JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { + JsonNode tree = jp.readValueAsTree(); + Object deserialized = null; + Object tmp = null; + boolean typeCoercion = ctxt.isEnabled(MapperFeature.ALLOW_COERCION_OF_SCALARS); + int match = 0; + JsonToken token = tree.traverse(jp.getCodec()).nextToken(); + // deserialize ObservabilityPipelineWebsocketSourceTlsEnabled + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Integer.class) + || ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Long.class) + || ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Float.class) + || ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Double.class) + || ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Boolean.class) + || ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Integer.class) + || ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Float.class) + || ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals( + Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (ObservabilityPipelineWebsocketSourceTlsEnabled.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs(ObservabilityPipelineWebsocketSourceTlsEnabled.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((ObservabilityPipelineWebsocketSourceTlsEnabled) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log( + Level.FINER, + "Input data matches schema 'ObservabilityPipelineWebsocketSourceTlsEnabled'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'ObservabilityPipelineWebsocketSourceTlsEnabled'", + e); + } + + // deserialize ObservabilityPipelineWebsocketSourceTlsWithClientCert + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(Integer.class) + || ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(Long.class) + || ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(Float.class) + || ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(Double.class) + || ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(Boolean.class) + || ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(Integer.class) + || ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals( + Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(Float.class) + || ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals( + Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (ObservabilityPipelineWebsocketSourceTlsWithClientCert.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs(ObservabilityPipelineWebsocketSourceTlsWithClientCert.class); + // TODO: there is no validation against JSON schema constraints + // (min, max, enum, pattern...), this does not perform a strict JSON + // validation, which means the 'match' count may be higher than it should be. + if (!((ObservabilityPipelineWebsocketSourceTlsWithClientCert) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log( + Level.FINER, + "Input data matches schema 'ObservabilityPipelineWebsocketSourceTlsWithClientCert'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema" + + " 'ObservabilityPipelineWebsocketSourceTlsWithClientCert'", + e); + } + + ObservabilityPipelineWebsocketSourceTls ret = new ObservabilityPipelineWebsocketSourceTls(); + if (match == 1) { + ret.setActualInstance(deserialized); + } else { + Map res = + new ObjectMapper() + .readValue( + tree.traverse(jp.getCodec()).readValueAsTree().toString(), + new TypeReference>() {}); + ret.setActualInstance(new UnparsedObject(res)); + } + return ret; + } + + /** Handle deserialization of the 'null' value. */ + @Override + public ObservabilityPipelineWebsocketSourceTls getNullValue(DeserializationContext ctxt) + throws JsonMappingException { + throw new JsonMappingException( + ctxt.getParser(), "ObservabilityPipelineWebsocketSourceTls cannot be null"); + } + } + + // store a list of schema names defined in oneOf + public static final Map schemas = new HashMap(); + + public ObservabilityPipelineWebsocketSourceTls() { + super("oneOf", Boolean.FALSE); + } + + public ObservabilityPipelineWebsocketSourceTls(ObservabilityPipelineWebsocketSourceTlsEnabled o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + public ObservabilityPipelineWebsocketSourceTls( + ObservabilityPipelineWebsocketSourceTlsWithClientCert o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + + static { + schemas.put( + "ObservabilityPipelineWebsocketSourceTlsEnabled", + new GenericType() {}); + schemas.put( + "ObservabilityPipelineWebsocketSourceTlsWithClientCert", + new GenericType() {}); + JSON.registerDescendants( + ObservabilityPipelineWebsocketSourceTls.class, Collections.unmodifiableMap(schemas)); + } + + @Override + public Map getSchemas() { + return ObservabilityPipelineWebsocketSourceTls.schemas; + } + + /** + * Set the instance that matches the oneOf child schema, check the instance parameter is valid + * against the oneOf child schemas: ObservabilityPipelineWebsocketSourceTlsEnabled, + * ObservabilityPipelineWebsocketSourceTlsWithClientCert + * + *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a + * composed schema (allOf, anyOf, oneOf). + */ + @Override + public void setActualInstance(Object instance) { + if (JSON.isInstanceOf( + ObservabilityPipelineWebsocketSourceTlsEnabled.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + if (JSON.isInstanceOf( + ObservabilityPipelineWebsocketSourceTlsWithClientCert.class, + instance, + new HashSet>())) { + super.setActualInstance(instance); + return; + } + + if (JSON.isInstanceOf(UnparsedObject.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } + throw new RuntimeException( + "Invalid instance type. Must be ObservabilityPipelineWebsocketSourceTlsEnabled," + + " ObservabilityPipelineWebsocketSourceTlsWithClientCert"); + } + + /** + * Get the actual instance, which can be the following: + * ObservabilityPipelineWebsocketSourceTlsEnabled, + * ObservabilityPipelineWebsocketSourceTlsWithClientCert + * + * @return The actual instance (ObservabilityPipelineWebsocketSourceTlsEnabled, + * ObservabilityPipelineWebsocketSourceTlsWithClientCert) + */ + @Override + public Object getActualInstance() { + return super.getActualInstance(); + } + + /** + * Get the actual instance of `ObservabilityPipelineWebsocketSourceTlsEnabled`. If the actual + * instance is not `ObservabilityPipelineWebsocketSourceTlsEnabled`, the ClassCastException will + * be thrown. + * + * @return The actual instance of `ObservabilityPipelineWebsocketSourceTlsEnabled` + * @throws ClassCastException if the instance is not + * `ObservabilityPipelineWebsocketSourceTlsEnabled` + */ + public ObservabilityPipelineWebsocketSourceTlsEnabled + getObservabilityPipelineWebsocketSourceTlsEnabled() throws ClassCastException { + return (ObservabilityPipelineWebsocketSourceTlsEnabled) super.getActualInstance(); + } + + /** + * Get the actual instance of `ObservabilityPipelineWebsocketSourceTlsWithClientCert`. If the + * actual instance is not `ObservabilityPipelineWebsocketSourceTlsWithClientCert`, the + * ClassCastException will be thrown. + * + * @return The actual instance of `ObservabilityPipelineWebsocketSourceTlsWithClientCert` + * @throws ClassCastException if the instance is not + * `ObservabilityPipelineWebsocketSourceTlsWithClientCert` + */ + public ObservabilityPipelineWebsocketSourceTlsWithClientCert + getObservabilityPipelineWebsocketSourceTlsWithClientCert() throws ClassCastException { + return (ObservabilityPipelineWebsocketSourceTlsWithClientCert) super.getActualInstance(); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsEnabled.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsEnabled.java new file mode 100644 index 00000000000..2b0c09d1d74 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsEnabled.java @@ -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. + */ + +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; + +/** + * TLS configuration that enables encryption without a client certificate. Use this for standard + * wss:// connections that do not require mutual TLS. + */ +@JsonPropertyOrder({ObservabilityPipelineWebsocketSourceTlsEnabled.JSON_PROPERTY_MODE}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineWebsocketSourceTlsEnabled { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_MODE = "mode"; + private ObservabilityPipelineWebsocketSourceTlsEnabledMode mode; + + public ObservabilityPipelineWebsocketSourceTlsEnabled() {} + + @JsonCreator + public ObservabilityPipelineWebsocketSourceTlsEnabled( + @JsonProperty(required = true, value = JSON_PROPERTY_MODE) + ObservabilityPipelineWebsocketSourceTlsEnabledMode mode) { + this.mode = mode; + this.unparsed |= !mode.isValid(); + } + + public ObservabilityPipelineWebsocketSourceTlsEnabled mode( + ObservabilityPipelineWebsocketSourceTlsEnabledMode mode) { + this.mode = mode; + this.unparsed |= !mode.isValid(); + return this; + } + + /** + * TLS mode. Must be enabled. + * + * @return mode + */ + @JsonProperty(JSON_PROPERTY_MODE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineWebsocketSourceTlsEnabledMode getMode() { + return mode; + } + + public void setMode(ObservabilityPipelineWebsocketSourceTlsEnabledMode mode) { + if (!mode.isValid()) { + this.unparsed = true; + } + this.mode = mode; + } + + /** + * 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 ObservabilityPipelineWebsocketSourceTlsEnabled + */ + @JsonAnySetter + public ObservabilityPipelineWebsocketSourceTlsEnabled 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 ObservabilityPipelineWebsocketSourceTlsEnabled object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineWebsocketSourceTlsEnabled observabilityPipelineWebsocketSourceTlsEnabled = + (ObservabilityPipelineWebsocketSourceTlsEnabled) o; + return Objects.equals(this.mode, observabilityPipelineWebsocketSourceTlsEnabled.mode) + && Objects.equals( + this.additionalProperties, + observabilityPipelineWebsocketSourceTlsEnabled.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(mode, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineWebsocketSourceTlsEnabled {\n"); + sb.append(" mode: ").append(toIndentedString(mode)).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/ObservabilityPipelineWebsocketSourceTlsEnabledMode.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsEnabledMode.java new file mode 100644 index 00000000000..3e3e2bad2b6 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsEnabledMode.java @@ -0,0 +1,62 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** TLS mode. Must be enabled. */ +@JsonSerialize( + using = + ObservabilityPipelineWebsocketSourceTlsEnabledMode + .ObservabilityPipelineWebsocketSourceTlsEnabledModeSerializer.class) +public class ObservabilityPipelineWebsocketSourceTlsEnabledMode extends ModelEnum { + + private static final Set allowedValues = new HashSet(Arrays.asList("enabled")); + + public static final ObservabilityPipelineWebsocketSourceTlsEnabledMode ENABLED = + new ObservabilityPipelineWebsocketSourceTlsEnabledMode("enabled"); + + ObservabilityPipelineWebsocketSourceTlsEnabledMode(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineWebsocketSourceTlsEnabledModeSerializer + extends StdSerializer { + public ObservabilityPipelineWebsocketSourceTlsEnabledModeSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineWebsocketSourceTlsEnabledModeSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineWebsocketSourceTlsEnabledMode value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineWebsocketSourceTlsEnabledMode fromValue(String value) { + return new ObservabilityPipelineWebsocketSourceTlsEnabledMode(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsWithClientCert.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsWithClientCert.java new file mode 100644 index 00000000000..b683eb4f74c --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsWithClientCert.java @@ -0,0 +1,275 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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; + +/** + * TLS configuration that enables encryption and presents a client certificate for mutual TLS + * authentication. + */ +@JsonPropertyOrder({ + ObservabilityPipelineWebsocketSourceTlsWithClientCert.JSON_PROPERTY_CA_FILE, + ObservabilityPipelineWebsocketSourceTlsWithClientCert.JSON_PROPERTY_CRT_FILE, + ObservabilityPipelineWebsocketSourceTlsWithClientCert.JSON_PROPERTY_KEY_FILE, + ObservabilityPipelineWebsocketSourceTlsWithClientCert.JSON_PROPERTY_KEY_PASS_KEY, + ObservabilityPipelineWebsocketSourceTlsWithClientCert.JSON_PROPERTY_MODE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineWebsocketSourceTlsWithClientCert { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_CA_FILE = "ca_file"; + private String caFile; + + public static final String JSON_PROPERTY_CRT_FILE = "crt_file"; + private String crtFile; + + public static final String JSON_PROPERTY_KEY_FILE = "key_file"; + private String keyFile; + + public static final String JSON_PROPERTY_KEY_PASS_KEY = "key_pass_key"; + private String keyPassKey; + + public static final String JSON_PROPERTY_MODE = "mode"; + private ObservabilityPipelineWebsocketSourceTlsWithClientCertMode mode; + + public ObservabilityPipelineWebsocketSourceTlsWithClientCert() {} + + @JsonCreator + public ObservabilityPipelineWebsocketSourceTlsWithClientCert( + @JsonProperty(required = true, value = JSON_PROPERTY_CRT_FILE) String crtFile, + @JsonProperty(required = true, value = JSON_PROPERTY_MODE) + ObservabilityPipelineWebsocketSourceTlsWithClientCertMode mode) { + this.crtFile = crtFile; + this.mode = mode; + this.unparsed |= !mode.isValid(); + } + + public ObservabilityPipelineWebsocketSourceTlsWithClientCert caFile(String caFile) { + this.caFile = caFile; + return this; + } + + /** + * Path to the Certificate Authority (CA) file used to validate the remote server's TLS + * certificate. + * + * @return caFile + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_CA_FILE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getCaFile() { + return caFile; + } + + public void setCaFile(String caFile) { + this.caFile = caFile; + } + + public ObservabilityPipelineWebsocketSourceTlsWithClientCert crtFile(String crtFile) { + this.crtFile = crtFile; + return this; + } + + /** + * Path to the TLS client certificate file used to identify this source to the remote server. + * + * @return crtFile + */ + @JsonProperty(JSON_PROPERTY_CRT_FILE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public String getCrtFile() { + return crtFile; + } + + public void setCrtFile(String crtFile) { + this.crtFile = crtFile; + } + + public ObservabilityPipelineWebsocketSourceTlsWithClientCert keyFile(String keyFile) { + this.keyFile = keyFile; + return this; + } + + /** + * Path to the private key file associated with the client certificate. + * + * @return keyFile + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_KEY_FILE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getKeyFile() { + return keyFile; + } + + public void setKeyFile(String keyFile) { + this.keyFile = keyFile; + } + + public ObservabilityPipelineWebsocketSourceTlsWithClientCert keyPassKey(String keyPassKey) { + this.keyPassKey = keyPassKey; + return this; + } + + /** + * Name of the environment variable or secret that holds the passphrase for the private key file. + * + * @return keyPassKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_KEY_PASS_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getKeyPassKey() { + return keyPassKey; + } + + public void setKeyPassKey(String keyPassKey) { + this.keyPassKey = keyPassKey; + } + + public ObservabilityPipelineWebsocketSourceTlsWithClientCert mode( + ObservabilityPipelineWebsocketSourceTlsWithClientCertMode mode) { + this.mode = mode; + this.unparsed |= !mode.isValid(); + return this; + } + + /** + * TLS mode. Must be with_client_cert. + * + * @return mode + */ + @JsonProperty(JSON_PROPERTY_MODE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineWebsocketSourceTlsWithClientCertMode getMode() { + return mode; + } + + public void setMode(ObservabilityPipelineWebsocketSourceTlsWithClientCertMode mode) { + if (!mode.isValid()) { + this.unparsed = true; + } + this.mode = mode; + } + + /** + * 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 ObservabilityPipelineWebsocketSourceTlsWithClientCert + */ + @JsonAnySetter + public ObservabilityPipelineWebsocketSourceTlsWithClientCert 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 ObservabilityPipelineWebsocketSourceTlsWithClientCert object is equal to o. + */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineWebsocketSourceTlsWithClientCert + observabilityPipelineWebsocketSourceTlsWithClientCert = + (ObservabilityPipelineWebsocketSourceTlsWithClientCert) o; + return Objects.equals(this.caFile, observabilityPipelineWebsocketSourceTlsWithClientCert.caFile) + && Objects.equals( + this.crtFile, observabilityPipelineWebsocketSourceTlsWithClientCert.crtFile) + && Objects.equals( + this.keyFile, observabilityPipelineWebsocketSourceTlsWithClientCert.keyFile) + && Objects.equals( + this.keyPassKey, observabilityPipelineWebsocketSourceTlsWithClientCert.keyPassKey) + && Objects.equals(this.mode, observabilityPipelineWebsocketSourceTlsWithClientCert.mode) + && Objects.equals( + this.additionalProperties, + observabilityPipelineWebsocketSourceTlsWithClientCert.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(caFile, crtFile, keyFile, keyPassKey, mode, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineWebsocketSourceTlsWithClientCert {\n"); + sb.append(" caFile: ").append(toIndentedString(caFile)).append("\n"); + sb.append(" crtFile: ").append(toIndentedString(crtFile)).append("\n"); + sb.append(" keyFile: ").append(toIndentedString(keyFile)).append("\n"); + sb.append(" keyPassKey: ").append(toIndentedString(keyPassKey)).append("\n"); + sb.append(" mode: ").append(toIndentedString(mode)).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/ObservabilityPipelineWebsocketSourceTlsWithClientCertMode.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsWithClientCertMode.java new file mode 100644 index 00000000000..144e4e8fedb --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceTlsWithClientCertMode.java @@ -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. + */ + +package com.datadog.api.client.v2.model; + +import com.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** TLS mode. Must be with_client_cert. */ +@JsonSerialize( + using = + ObservabilityPipelineWebsocketSourceTlsWithClientCertMode + .ObservabilityPipelineWebsocketSourceTlsWithClientCertModeSerializer.class) +public class ObservabilityPipelineWebsocketSourceTlsWithClientCertMode extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("with_client_cert")); + + public static final ObservabilityPipelineWebsocketSourceTlsWithClientCertMode WITH_CLIENT_CERT = + new ObservabilityPipelineWebsocketSourceTlsWithClientCertMode("with_client_cert"); + + ObservabilityPipelineWebsocketSourceTlsWithClientCertMode(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineWebsocketSourceTlsWithClientCertModeSerializer + extends StdSerializer { + public ObservabilityPipelineWebsocketSourceTlsWithClientCertModeSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineWebsocketSourceTlsWithClientCertModeSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineWebsocketSourceTlsWithClientCertMode value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineWebsocketSourceTlsWithClientCertMode fromValue(String value) { + return new ObservabilityPipelineWebsocketSourceTlsWithClientCertMode(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceType.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceType.java new file mode 100644 index 00000000000..8cc42aed296 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineWebsocketSourceType.java @@ -0,0 +1,62 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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.datadog.api.client.ModelEnum; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +/** The source type. The value should always be websocket. */ +@JsonSerialize( + using = + ObservabilityPipelineWebsocketSourceType.ObservabilityPipelineWebsocketSourceTypeSerializer + .class) +public class ObservabilityPipelineWebsocketSourceType extends ModelEnum { + + private static final Set allowedValues = new HashSet(Arrays.asList("websocket")); + + public static final ObservabilityPipelineWebsocketSourceType WEBSOCKET = + new ObservabilityPipelineWebsocketSourceType("websocket"); + + ObservabilityPipelineWebsocketSourceType(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineWebsocketSourceTypeSerializer + extends StdSerializer { + public ObservabilityPipelineWebsocketSourceTypeSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineWebsocketSourceTypeSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineWebsocketSourceType value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineWebsocketSourceType fromValue(String value) { + return new ObservabilityPipelineWebsocketSourceType(value); + } +} diff --git a/src/main/java/com/datadog/api/client/v2/model/SecurityMonitoringTerraformResourceType.java b/src/main/java/com/datadog/api/client/v2/model/SecurityMonitoringTerraformResourceType.java index 24bbb202351..587e2821465 100644 --- a/src/main/java/com/datadog/api/client/v2/model/SecurityMonitoringTerraformResourceType.java +++ b/src/main/java/com/datadog/api/client/v2/model/SecurityMonitoringTerraformResourceType.java @@ -26,12 +26,17 @@ public class SecurityMonitoringTerraformResourceType extends ModelEnum { private static final Set allowedValues = - new HashSet(Arrays.asList("suppressions", "critical_assets")); + new HashSet( + Arrays.asList("suppressions", "critical_assets", "security_filters", "rules")); public static final SecurityMonitoringTerraformResourceType SUPPRESSIONS = new SecurityMonitoringTerraformResourceType("suppressions"); public static final SecurityMonitoringTerraformResourceType CRITICAL_ASSETS = new SecurityMonitoringTerraformResourceType("critical_assets"); + public static final SecurityMonitoringTerraformResourceType SECURITY_FILTERS = + new SecurityMonitoringTerraformResourceType("security_filters"); + public static final SecurityMonitoringTerraformResourceType RULES = + new SecurityMonitoringTerraformResourceType("rules"); SecurityMonitoringTerraformResourceType(String value) { super(value, allowedValues); diff --git a/src/main/java/com/datadog/api/client/v2/model/UpdateVariantRequest.java b/src/main/java/com/datadog/api/client/v2/model/UpdateVariantRequest.java new file mode 100644 index 00000000000..f1550e0a3b8 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/UpdateVariantRequest.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.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; + +/** Request to update an existing variant's name and value. */ +@JsonPropertyOrder({ + UpdateVariantRequest.JSON_PROPERTY_NAME, + UpdateVariantRequest.JSON_PROPERTY_VALUE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class UpdateVariantRequest { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_NAME = "name"; + private String name; + + public static final String JSON_PROPERTY_VALUE = "value"; + private String value; + + public UpdateVariantRequest name(String name) { + this.name = name; + return this; + } + + /** + * The display name of the variant. + * + * @return name + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_NAME) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public UpdateVariantRequest value(String value) { + this.value = value; + return this; + } + + /** + * The value of the variant as a string. + * + * @return value + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_VALUE) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + /** + * 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 UpdateVariantRequest + */ + @JsonAnySetter + public UpdateVariantRequest 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 UpdateVariantRequest object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + UpdateVariantRequest updateVariantRequest = (UpdateVariantRequest) o; + return Objects.equals(this.name, updateVariantRequest.name) + && Objects.equals(this.value, updateVariantRequest.value) + && Objects.equals(this.additionalProperties, updateVariantRequest.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(name, value, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class UpdateVariantRequest {\n"); + sb.append(" name: ").append(toIndentedString(name)).append("\n"); + sb.append(" value: ").append(toIndentedString(value)).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/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_returns_OK_response.freeze b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_returns_OK_response.freeze new file mode 100644 index 00000000000..6324009397d --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-06-23T13:26:57.908Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_returns_OK_response.json b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_returns_OK_response.json new file mode 100644 index 00000000000..55fbe63cd31 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_returns_OK_response.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"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\":[]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"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" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "4ca93b61-45a0-4b6d-de4c-1f4e0cac5b66" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/9R-fEK0LRyWg0HzDbM-gOg", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{}\n", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "277bef9b-d6ae-d234-3d1d-fb42619dab8e" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_arithmetic_sub_processor_returns_OK_response.freeze b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_arithmetic_sub_processor_returns_OK_response.freeze new file mode 100644 index 00000000000..56e4aef1acf --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_arithmetic_sub_processor_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-06-23T13:27:34.721Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_arithmetic_sub_processor_returns_OK_response.json b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_arithmetic_sub_processor_returns_OK_response.json new file mode 100644 index 00000000000..30ce490b32f --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_arithmetic_sub_processor_returns_OK_response.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"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\":[]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"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" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "5b92624f-b8ed-c712-d3f5-ec45a299c051" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/PxfujWHYRaGCWVqVCVrBAg", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{}\n", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "c7ee4261-be30-23c9-67d7-d0e49b1fb528" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_category_sub_processor_returns_OK_response.freeze b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_category_sub_processor_returns_OK_response.freeze new file mode 100644 index 00000000000..bc38a40a89e --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_category_sub_processor_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-06-23T13:27:55.552Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_category_sub_processor_returns_OK_response.json b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_category_sub_processor_returns_OK_response.json new file mode 100644 index 00000000000..1b4f587c37f --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_using_category_sub_processor_returns_OK_response.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"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\":[]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"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" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "f1b388c4-7ff7-a675-4b4a-245be0bc7b8f" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/NW1Ws0rnRwWbxKdNUlBFOQ", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{}\n", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "d5d7f427-b3a7-ffae-448f-f9b69c0ab595" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_with_preserve_source_false_returns_OK_response.freeze b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_with_preserve_source_false_returns_OK_response.freeze new file mode 100644 index 00000000000..4f838f02df2 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_with_preserve_source_false_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-06-23T13:28:15.444Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_with_preserve_source_false_returns_OK_response.json b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_with_preserve_source_false_returns_OK_response.json new file mode 100644 index 00000000000..02050bfa186 --- /dev/null +++ b/src/test/resources/cassettes/features/v1/Create_a_pipeline_with_Array_Map_Processor_with_preserve_source_false_returns_OK_response.json @@ -0,0 +1,58 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"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\":[]}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v1/logs/config/pipelines", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"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" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "b72fdb61-bb65-53f9-3cdb-9a48060cae20" + }, + { + "httpRequest": { + "headers": {}, + "method": "DELETE", + "path": "/api/v1/logs/config/pipelines/hJXlpnp0RD68QPplvOMAcQ", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{}\n", + "headers": { + "Content-Type": [ + "application/json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "2d091204-157e-50b8-9e58-4f3a40754800" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_arrow_stream_format_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_arrow_stream_format_returns_OK_response.freeze new file mode 100644 index 00000000000..663907587bf --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_arrow_stream_format_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-06-22T20:44:30.778Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_arrow_stream_format_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_arrow_stream_format_returns_OK_response.json new file mode 100644 index 00000000000..9ad20cf1cc6 --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_arrow_stream_format_returns_OK_response.json @@ -0,0 +1,32 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"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\"}}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"errors\":[]}\n", + "headers": { + "Content-Type": [ + "application/vnd.api+json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "25c696a6-8c82-1ece-cdcc-006c2bc4c03c" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_returns_OK_response.freeze new file mode 100644 index 00000000000..9b0a4331860 --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-06-22T20:44:32.514Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_returns_OK_response.json new file mode 100644 index 00000000000..f031484eacc --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_ClickHouse_destination_returns_OK_response.json @@ -0,0 +1,32 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"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\"}}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"errors\":[]}\n", + "headers": { + "Content-Type": [ + "application/vnd.api+json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "63e4c22a-5925-ee0d-753b-871b68e22ab3" + } +] \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_websocket_source_bearer_auth_returns_OK_response.freeze b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_websocket_source_bearer_auth_returns_OK_response.freeze new file mode 100644 index 00000000000..e092c16a233 --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_websocket_source_bearer_auth_returns_OK_response.freeze @@ -0,0 +1 @@ +2026-06-22T19:51:31.598Z \ No newline at end of file diff --git a/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_websocket_source_bearer_auth_returns_OK_response.json b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_websocket_source_bearer_auth_returns_OK_response.json new file mode 100644 index 00000000000..d9d01eabd19 --- /dev/null +++ b/src/test/resources/cassettes/features/v2/Validate_an_observability_pipeline_with_websocket_source_bearer_auth_returns_OK_response.json @@ -0,0 +1,32 @@ +[ + { + "httpRequest": { + "body": { + "type": "JSON", + "json": "{\"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\"}}" + }, + "headers": {}, + "method": "POST", + "path": "/api/v2/obs-pipelines/pipelines/validate", + "keepAlive": false, + "secure": true + }, + "httpResponse": { + "body": "{\"errors\":[]}\n", + "headers": { + "Content-Type": [ + "application/vnd.api+json" + ] + }, + "statusCode": 200, + "reasonPhrase": "OK" + }, + "times": { + "remainingTimes": 1 + }, + "timeToLive": { + "unlimited": true + }, + "id": "ebf97aef-d675-61ee-80c3-75cc43281c80" + } +] \ No newline at end of file diff --git a/src/test/resources/com/datadog/api/client/v1/api/logs_pipelines.feature b/src/test/resources/com/datadog/api/client/v1/api/logs_pipelines.feature index 1ab4401b0fd..ac28f052615 100644 --- a/src/test/resources/com/datadog/api/client/v1/api/logs_pipelines.feature +++ b/src/test/resources/com/datadog/api/client/v1/api/logs_pipelines.feature @@ -35,6 +35,34 @@ Feature: Logs Pipelines 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 diff --git a/src/test/resources/com/datadog/api/client/v2/api/code_coverage.feature b/src/test/resources/com/datadog/api/client/v2/api/code_coverage.feature index 657ee0375c9..a103acd210a 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/code_coverage.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/code_coverage.feature @@ -13,7 +13,7 @@ Feature: Code Coverage Scenario: Get code coverage summary for a branch returns "Bad Request" response Given operation "GetCodeCoverageBranchSummary" enabled And new "GetCodeCoverageBranchSummary" request - And body with value {"data": {"attributes": {"branch": "prod", "repository_id": "github.com/datadog/shopist"}, "type": "ci_app_coverage_branch_summary_request"}} + And body with value {"data": {"attributes": {"branch": "prod", "repository_id": "github.com/datadog/shopist", "repository_url": "https://github.com/datadog/shopist"}, "type": "ci_app_coverage_branch_summary_request"}} When the request is sent Then the response status is 400 Bad Request @@ -21,7 +21,7 @@ Feature: Code Coverage Scenario: Get code coverage summary for a branch returns "Not Found" response Given operation "GetCodeCoverageBranchSummary" enabled And new "GetCodeCoverageBranchSummary" request - And body with value {"data": {"attributes": {"branch": "prod", "repository_id": "github.com/datadog/shopist"}, "type": "ci_app_coverage_branch_summary_request"}} + And body with value {"data": {"attributes": {"branch": "prod", "repository_id": "github.com/datadog/shopist", "repository_url": "https://github.com/datadog/shopist"}, "type": "ci_app_coverage_branch_summary_request"}} When the request is sent Then the response status is 404 Not Found @@ -29,7 +29,7 @@ Feature: Code Coverage Scenario: Get code coverage summary for a branch returns "OK" response Given operation "GetCodeCoverageBranchSummary" enabled And new "GetCodeCoverageBranchSummary" request - And body with value {"data": {"attributes": {"branch": "prod", "repository_id": "github.com/datadog/shopist"}, "type": "ci_app_coverage_branch_summary_request"}} + And body with value {"data": {"attributes": {"branch": "prod", "repository_id": "github.com/datadog/shopist", "repository_url": "https://github.com/datadog/shopist"}, "type": "ci_app_coverage_branch_summary_request"}} When the request is sent Then the response status is 200 OK @@ -61,7 +61,7 @@ Feature: Code Coverage Scenario: Get code coverage summary for a commit returns "Bad Request" response Given operation "GetCodeCoverageCommitSummary" enabled And new "GetCodeCoverageCommitSummary" request - And body with value {"data": {"attributes": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_id": "github.com/datadog/shopist"}, "type": "ci_app_coverage_commit_summary_request"}} + And body with value {"data": {"attributes": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_id": "github.com/datadog/shopist", "repository_url": "https://github.com/datadog/shopist"}, "type": "ci_app_coverage_commit_summary_request"}} When the request is sent Then the response status is 400 Bad Request @@ -69,7 +69,7 @@ Feature: Code Coverage Scenario: Get code coverage summary for a commit returns "Not Found" response Given operation "GetCodeCoverageCommitSummary" enabled And new "GetCodeCoverageCommitSummary" request - And body with value {"data": {"attributes": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_id": "github.com/datadog/shopist"}, "type": "ci_app_coverage_commit_summary_request"}} + And body with value {"data": {"attributes": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_id": "github.com/datadog/shopist", "repository_url": "https://github.com/datadog/shopist"}, "type": "ci_app_coverage_commit_summary_request"}} When the request is sent Then the response status is 404 Not Found @@ -77,7 +77,7 @@ Feature: Code Coverage Scenario: Get code coverage summary for a commit returns "OK" response Given operation "GetCodeCoverageCommitSummary" enabled And new "GetCodeCoverageCommitSummary" request - And body with value {"data": {"attributes": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_id": "github.com/datadog/shopist"}, "type": "ci_app_coverage_commit_summary_request"}} + And body with value {"data": {"attributes": {"commit_sha": "66adc9350f2cc9b250b69abddab733dd55e1a588", "repository_id": "github.com/datadog/shopist", "repository_url": "https://github.com/datadog/shopist"}, "type": "ci_app_coverage_commit_summary_request"}} When the request is sent Then the response status is 200 OK diff --git a/src/test/resources/com/datadog/api/client/v2/api/feature_flags.feature b/src/test/resources/com/datadog/api/client/v2/api/feature_flags.feature index df31d246a42..c98cd04f77c 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/feature_flags.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/feature_flags.feature @@ -7,6 +7,38 @@ Feature: Feature Flags 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 @@ -130,6 +162,38 @@ Feature: Feature Flags 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 @@ -408,6 +472,42 @@ Feature: Feature Flags 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 diff --git a/src/test/resources/com/datadog/api/client/v2/api/observability_pipelines.feature b/src/test/resources/com/datadog/api/client/v2/api/observability_pipelines.feature index 487d6971f82..e5ee4d0545d 100644 --- a/src/test/resources/com/datadog/api/client/v2/api/observability_pipelines.feature +++ b/src/test/resources/com/datadog/api/client/v2/api/observability_pipelines.feature @@ -176,6 +176,22 @@ Feature: Observability Pipelines 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 HTTP server source valid_tokens returns "OK" response Given new "ValidatePipeline" request @@ -278,3 +294,11 @@ Feature: Observability 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/src/test/resources/com/datadog/api/client/v2/api/undo.json b/src/test/resources/com/datadog/api/client/v2/api/undo.json index a5c43f6c0f2..b0dab3582ba 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 @@ -2675,6 +2675,24 @@ "type": "unsafe" } }, + "CreateVariantForFeatureFlag": { + "tag": "Feature Flags", + "undo": { + "type": "unsafe" + } + }, + "DeleteVariantFromFeatureFlag": { + "tag": "Feature Flags", + "undo": { + "type": "unsafe" + } + }, + "UpdateVariantForFeatureFlag": { + "tag": "Feature Flags", + "undo": { + "type": "idempotent" + } + }, "ListForms": { "tag": "Forms", "undo": {