diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index e83df8269e..06b0264c01 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -43029,6 +43029,7 @@ components: ObservabilityPipelineConfigDestinationItem: description: "A destination for the pipeline." oneOf: + - $ref: "#/components/schemas/ObservabilityPipelineElasticsearchDestination" - $ref: "#/components/schemas/ObservabilityPipelineHttpClientDestination" - $ref: "#/components/schemas/ObservabilityPipelineAmazonOpenSearchDestination" - $ref: "#/components/schemas/ObservabilityPipelineAmazonS3Destination" @@ -43038,7 +43039,6 @@ components: - $ref: "#/components/schemas/ObservabilityPipelineCloudPremDestination" - $ref: "#/components/schemas/ObservabilityPipelineCrowdStrikeNextGenSiemDestination" - $ref: "#/components/schemas/ObservabilityPipelineDatadogLogsDestination" - - $ref: "#/components/schemas/ObservabilityPipelineElasticsearchDestination" - $ref: "#/components/schemas/ObservabilityPipelineGoogleChronicleDestination" - $ref: "#/components/schemas/ObservabilityPipelineGoogleCloudStorageDestination" - $ref: "#/components/schemas/ObservabilityPipelineGooglePubSubDestination" @@ -43640,9 +43640,9 @@ components: type: object ObservabilityPipelineElasticsearchDestination: description: |- - The `elasticsearch` destination writes logs to an Elasticsearch cluster. + The `elasticsearch` destination writes logs or metrics to an Elasticsearch cluster. - **Supported pipeline types:** logs + **Supported pipeline types:** logs, metrics properties: api_version: $ref: "#/components/schemas/ObservabilityPipelineElasticsearchDestinationApiVersion" @@ -43651,9 +43651,11 @@ components: buffer: $ref: "#/components/schemas/ObservabilityPipelineBufferOptions" bulk_index: - description: The index to write logs to in Elasticsearch. + description: The name of the index to write events to in Elasticsearch. example: logs-index type: string + compression: + $ref: "#/components/schemas/ObservabilityPipelineElasticsearchDestinationCompression" data_stream: $ref: "#/components/schemas/ObservabilityPipelineElasticsearchDestinationDataStream" endpoint_url_key: @@ -43664,6 +43666,10 @@ components: description: The unique identifier for this component. example: "elasticsearch-destination" type: string + id_key: + description: The name of the field used as the document ID in Elasticsearch. + example: id + type: string inputs: description: A list of component IDs whose output is used as the `input` for this component. example: ["filter-processor"] @@ -43671,6 +43677,15 @@ components: description: The ID of a component whose output is used as input for this destination. type: string type: array + pipeline: + description: The name of an Elasticsearch ingest pipeline to apply to events before indexing. + example: my-pipeline + type: string + request_retry_partial: + description: When `true`, retries failed partial bulk requests when some events in a batch fail while others succeed. + type: boolean + tls: + $ref: "#/components/schemas/ObservabilityPipelineTls" type: $ref: "#/components/schemas/ObservabilityPipelineElasticsearchDestinationType" required: @@ -43678,7 +43693,7 @@ components: - type - inputs type: object - x-pipeline-types: [logs] + x-pipeline-types: [logs, metrics] ObservabilityPipelineElasticsearchDestinationApiVersion: description: The Elasticsearch API version to use. Set to `auto` to auto-detect. enum: [auto, v6, v7, v8] @@ -43707,18 +43722,48 @@ components: required: - strategy type: object + ObservabilityPipelineElasticsearchDestinationCompression: + description: Compression configuration for the Elasticsearch destination. + properties: + algorithm: + $ref: "#/components/schemas/ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm" + level: + description: The compression level. Only applicable for `gzip`, `zlib`, and `zstd` algorithms. + example: 6 + format: int64 + type: integer + required: + - algorithm + type: object + ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm: + description: The compression algorithm applied when sending data to Elasticsearch. + enum: [none, gzip, zlib, zstd, snappy] + example: gzip + type: string + x-enum-varnames: + - NONE + - GZIP + - ZLIB + - ZSTD + - SNAPPY ObservabilityPipelineElasticsearchDestinationDataStream: description: Configuration options for writing to Elasticsearch Data Streams instead of a fixed index. properties: + auto_routing: + description: When `true`, automatically routes events to the appropriate data stream based on the event content. + type: boolean dataset: - description: The data stream dataset for your logs. This groups logs by their source or application. + description: The data stream dataset. This groups events by their source or application. type: string dtype: - description: The data stream type for your logs. This determines how logs are categorized within the data stream. + description: The data stream type. This determines how events are categorized within the data stream. type: string namespace: - description: The data stream namespace for your logs. This separates logs into different environments or domains. + description: The data stream namespace. This separates events into different environments or domains. type: string + sync_fields: + description: When `true`, synchronizes data stream fields with the Elasticsearch index mapping. + type: boolean type: object ObservabilityPipelineElasticsearchDestinationType: default: elasticsearch diff --git a/src/datadogV2/model/mod.rs b/src/datadogV2/model/mod.rs index 56e58eb84a..6e79fe65d9 100644 --- a/src/datadogV2/model/mod.rs +++ b/src/datadogV2/model/mod.rs @@ -4982,24 +4982,12 @@ pub mod model_observability_pipeline_data_attributes; pub use self::model_observability_pipeline_data_attributes::ObservabilityPipelineDataAttributes; pub mod model_observability_pipeline_config; pub use self::model_observability_pipeline_config::ObservabilityPipelineConfig; -pub mod model_observability_pipeline_http_client_destination; -pub use self::model_observability_pipeline_http_client_destination::ObservabilityPipelineHttpClientDestination; -pub mod model_observability_pipeline_http_client_destination_auth_strategy; -pub use self::model_observability_pipeline_http_client_destination_auth_strategy::ObservabilityPipelineHttpClientDestinationAuthStrategy; -pub mod model_observability_pipeline_http_client_destination_compression; -pub use self::model_observability_pipeline_http_client_destination_compression::ObservabilityPipelineHttpClientDestinationCompression; -pub mod model_observability_pipeline_http_client_destination_compression_algorithm; -pub use self::model_observability_pipeline_http_client_destination_compression_algorithm::ObservabilityPipelineHttpClientDestinationCompressionAlgorithm; -pub mod model_observability_pipeline_http_client_destination_encoding; -pub use self::model_observability_pipeline_http_client_destination_encoding::ObservabilityPipelineHttpClientDestinationEncoding; -pub mod model_observability_pipeline_tls; -pub use self::model_observability_pipeline_tls::ObservabilityPipelineTls; -pub mod model_observability_pipeline_http_client_destination_type; -pub use self::model_observability_pipeline_http_client_destination_type::ObservabilityPipelineHttpClientDestinationType; -pub mod model_observability_pipeline_amazon_open_search_destination; -pub use self::model_observability_pipeline_amazon_open_search_destination::ObservabilityPipelineAmazonOpenSearchDestination; -pub mod model_observability_pipeline_amazon_open_search_destination_auth; -pub use self::model_observability_pipeline_amazon_open_search_destination_auth::ObservabilityPipelineAmazonOpenSearchDestinationAuth; +pub mod model_observability_pipeline_elasticsearch_destination; +pub use self::model_observability_pipeline_elasticsearch_destination::ObservabilityPipelineElasticsearchDestination; +pub mod model_observability_pipeline_elasticsearch_destination_api_version; +pub use self::model_observability_pipeline_elasticsearch_destination_api_version::ObservabilityPipelineElasticsearchDestinationApiVersion; +pub mod model_observability_pipeline_elasticsearch_destination_auth; +pub use self::model_observability_pipeline_elasticsearch_destination_auth::ObservabilityPipelineElasticsearchDestinationAuth; pub mod model_observability_pipeline_amazon_open_search_destination_auth_strategy; pub use self::model_observability_pipeline_amazon_open_search_destination_auth_strategy::ObservabilityPipelineAmazonOpenSearchDestinationAuthStrategy; pub mod model_observability_pipeline_disk_buffer_options; @@ -5016,6 +5004,32 @@ pub mod model_observability_pipeline_memory_buffer_size_options; pub use self::model_observability_pipeline_memory_buffer_size_options::ObservabilityPipelineMemoryBufferSizeOptions; pub mod model_observability_pipeline_buffer_options; pub use self::model_observability_pipeline_buffer_options::ObservabilityPipelineBufferOptions; +pub mod model_observability_pipeline_elasticsearch_destination_compression; +pub use self::model_observability_pipeline_elasticsearch_destination_compression::ObservabilityPipelineElasticsearchDestinationCompression; +pub mod model_observability_pipeline_elasticsearch_destination_compression_algorithm; +pub use self::model_observability_pipeline_elasticsearch_destination_compression_algorithm::ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm; +pub mod model_observability_pipeline_elasticsearch_destination_data_stream; +pub use self::model_observability_pipeline_elasticsearch_destination_data_stream::ObservabilityPipelineElasticsearchDestinationDataStream; +pub mod model_observability_pipeline_tls; +pub use self::model_observability_pipeline_tls::ObservabilityPipelineTls; +pub mod model_observability_pipeline_elasticsearch_destination_type; +pub use self::model_observability_pipeline_elasticsearch_destination_type::ObservabilityPipelineElasticsearchDestinationType; +pub mod model_observability_pipeline_http_client_destination; +pub use self::model_observability_pipeline_http_client_destination::ObservabilityPipelineHttpClientDestination; +pub mod model_observability_pipeline_http_client_destination_auth_strategy; +pub use self::model_observability_pipeline_http_client_destination_auth_strategy::ObservabilityPipelineHttpClientDestinationAuthStrategy; +pub mod model_observability_pipeline_http_client_destination_compression; +pub use self::model_observability_pipeline_http_client_destination_compression::ObservabilityPipelineHttpClientDestinationCompression; +pub mod model_observability_pipeline_http_client_destination_compression_algorithm; +pub use self::model_observability_pipeline_http_client_destination_compression_algorithm::ObservabilityPipelineHttpClientDestinationCompressionAlgorithm; +pub mod model_observability_pipeline_http_client_destination_encoding; +pub use self::model_observability_pipeline_http_client_destination_encoding::ObservabilityPipelineHttpClientDestinationEncoding; +pub mod model_observability_pipeline_http_client_destination_type; +pub use self::model_observability_pipeline_http_client_destination_type::ObservabilityPipelineHttpClientDestinationType; +pub mod model_observability_pipeline_amazon_open_search_destination; +pub use self::model_observability_pipeline_amazon_open_search_destination::ObservabilityPipelineAmazonOpenSearchDestination; +pub mod model_observability_pipeline_amazon_open_search_destination_auth; +pub use self::model_observability_pipeline_amazon_open_search_destination_auth::ObservabilityPipelineAmazonOpenSearchDestinationAuth; pub mod model_observability_pipeline_amazon_open_search_destination_type; pub use self::model_observability_pipeline_amazon_open_search_destination_type::ObservabilityPipelineAmazonOpenSearchDestinationType; pub mod model_observability_pipeline_amazon_s3_destination; @@ -5084,16 +5098,6 @@ pub mod model_observability_pipeline_datadog_logs_destination_route; pub use self::model_observability_pipeline_datadog_logs_destination_route::ObservabilityPipelineDatadogLogsDestinationRoute; pub mod model_observability_pipeline_datadog_logs_destination_type; pub use self::model_observability_pipeline_datadog_logs_destination_type::ObservabilityPipelineDatadogLogsDestinationType; -pub mod model_observability_pipeline_elasticsearch_destination; -pub use self::model_observability_pipeline_elasticsearch_destination::ObservabilityPipelineElasticsearchDestination; -pub mod model_observability_pipeline_elasticsearch_destination_api_version; -pub use self::model_observability_pipeline_elasticsearch_destination_api_version::ObservabilityPipelineElasticsearchDestinationApiVersion; -pub mod model_observability_pipeline_elasticsearch_destination_auth; -pub use self::model_observability_pipeline_elasticsearch_destination_auth::ObservabilityPipelineElasticsearchDestinationAuth; -pub mod model_observability_pipeline_elasticsearch_destination_data_stream; -pub use self::model_observability_pipeline_elasticsearch_destination_data_stream::ObservabilityPipelineElasticsearchDestinationDataStream; -pub mod model_observability_pipeline_elasticsearch_destination_type; -pub use self::model_observability_pipeline_elasticsearch_destination_type::ObservabilityPipelineElasticsearchDestinationType; pub mod model_observability_pipeline_google_chronicle_destination; pub use self::model_observability_pipeline_google_chronicle_destination::ObservabilityPipelineGoogleChronicleDestination; pub mod model_observability_pipeline_gcp_auth; diff --git a/src/datadogV2/model/model_observability_pipeline_config_destination_item.rs b/src/datadogV2/model/model_observability_pipeline_config_destination_item.rs index 90ba86b918..ac85f80bec 100644 --- a/src/datadogV2/model/model_observability_pipeline_config_destination_item.rs +++ b/src/datadogV2/model/model_observability_pipeline_config_destination_item.rs @@ -8,6 +8,9 @@ use serde::{Deserialize, Deserializer, Serialize}; #[derive(Clone, Debug, PartialEq, Serialize)] #[serde(untagged)] pub enum ObservabilityPipelineConfigDestinationItem { + ObservabilityPipelineElasticsearchDestination( + Box, + ), ObservabilityPipelineHttpClientDestination( Box, ), @@ -33,9 +36,6 @@ pub enum ObservabilityPipelineConfigDestinationItem { ObservabilityPipelineDatadogLogsDestination( Box, ), - ObservabilityPipelineElasticsearchDestination( - Box, - ), ObservabilityPipelineGoogleChronicleDestination( Box, ), @@ -85,6 +85,14 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineConfigDestinationItem { D: Deserializer<'de>, { let value: serde_json::Value = Deserialize::deserialize(deserializer)?; + if let Ok(_v) = serde_json::from_value::< + Box, + >(value.clone()) + { + if !_v._unparsed { + return Ok(ObservabilityPipelineConfigDestinationItem::ObservabilityPipelineElasticsearchDestination(_v)); + } + } if let Ok(_v) = serde_json::from_value::< Box, >(value.clone()) @@ -157,14 +165,6 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineConfigDestinationItem { return Ok(ObservabilityPipelineConfigDestinationItem::ObservabilityPipelineDatadogLogsDestination(_v)); } } - if let Ok(_v) = serde_json::from_value::< - Box, - >(value.clone()) - { - if !_v._unparsed { - return Ok(ObservabilityPipelineConfigDestinationItem::ObservabilityPipelineElasticsearchDestination(_v)); - } - } if let Ok(_v) = serde_json::from_value::< Box, >(value.clone()) diff --git a/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination.rs b/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination.rs index 2df8f499d1..545f94534f 100644 --- a/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination.rs +++ b/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination.rs @@ -6,9 +6,9 @@ use serde::{Deserialize, Deserializer, Serialize}; use serde_with::skip_serializing_none; use std::fmt::{self, Formatter}; -/// The `elasticsearch` destination writes logs to an Elasticsearch cluster. +/// The `elasticsearch` destination writes logs or metrics to an Elasticsearch cluster. /// -/// **Supported pipeline types:** logs +/// **Supported pipeline types:** logs, metrics #[non_exhaustive] #[skip_serializing_none] #[derive(Clone, Debug, PartialEq, Serialize)] @@ -24,9 +24,13 @@ pub struct ObservabilityPipelineElasticsearchDestination { /// Configuration for buffer settings on destination components. #[serde(rename = "buffer")] pub buffer: Option, - /// The index to write logs to in Elasticsearch. + /// The name of the index to write events to in Elasticsearch. #[serde(rename = "bulk_index")] pub bulk_index: Option, + /// Compression configuration for the Elasticsearch destination. + #[serde(rename = "compression")] + pub compression: + Option, /// Configuration options for writing to Elasticsearch Data Streams instead of a fixed index. #[serde(rename = "data_stream")] pub data_stream: @@ -37,9 +41,21 @@ pub struct ObservabilityPipelineElasticsearchDestination { /// The unique identifier for this component. #[serde(rename = "id")] pub id: String, + /// The name of the field used as the document ID in Elasticsearch. + #[serde(rename = "id_key")] + pub id_key: Option, /// A list of component IDs whose output is used as the `input` for this component. #[serde(rename = "inputs")] pub inputs: Vec, + /// The name of an Elasticsearch ingest pipeline to apply to events before indexing. + #[serde(rename = "pipeline")] + pub pipeline: Option, + /// When `true`, retries failed partial bulk requests when some events in a batch fail while others succeed. + #[serde(rename = "request_retry_partial")] + pub request_retry_partial: Option, + /// Configuration for enabling TLS encryption between the pipeline component and external services. + #[serde(rename = "tls")] + pub tls: Option, /// The destination type. The value should always be `elasticsearch`. #[serde(rename = "type")] pub type_: crate::datadogV2::model::ObservabilityPipelineElasticsearchDestinationType, @@ -61,10 +77,15 @@ impl ObservabilityPipelineElasticsearchDestination { auth: None, buffer: None, bulk_index: None, + compression: None, data_stream: None, endpoint_url_key: None, id, + id_key: None, inputs, + pipeline: None, + request_retry_partial: None, + tls: None, type_, additional_properties: std::collections::BTreeMap::new(), _unparsed: false, @@ -100,6 +121,14 @@ impl ObservabilityPipelineElasticsearchDestination { self } + pub fn compression( + mut self, + value: crate::datadogV2::model::ObservabilityPipelineElasticsearchDestinationCompression, + ) -> Self { + self.compression = Some(value); + self + } + pub fn data_stream( mut self, value: crate::datadogV2::model::ObservabilityPipelineElasticsearchDestinationDataStream, @@ -113,6 +142,26 @@ impl ObservabilityPipelineElasticsearchDestination { self } + pub fn id_key(mut self, value: String) -> Self { + self.id_key = Some(value); + self + } + + pub fn pipeline(mut self, value: String) -> Self { + self.pipeline = Some(value); + self + } + + pub fn request_retry_partial(mut self, value: bool) -> Self { + self.request_retry_partial = Some(value); + self + } + + pub fn tls(mut self, value: crate::datadogV2::model::ObservabilityPipelineTls) -> Self { + self.tls = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -147,10 +196,15 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestination { crate::datadogV2::model::ObservabilityPipelineBufferOptions, > = None; let mut bulk_index: Option = None; + let mut compression: Option = None; let mut data_stream: Option = None; let mut endpoint_url_key: Option = None; let mut id: Option = None; + let mut id_key: Option = None; let mut inputs: Option> = None; + let mut pipeline: Option = None; + let mut request_retry_partial: Option = None; + let mut tls: Option = None; let mut type_: Option< crate::datadogV2::model::ObservabilityPipelineElasticsearchDestinationType, > = None; @@ -203,6 +257,13 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestination { } bulk_index = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "compression" => { + if v.is_null() { + continue; + } + compression = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "data_stream" => { if v.is_null() { continue; @@ -220,9 +281,34 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestination { "id" => { id = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "id_key" => { + if v.is_null() { + continue; + } + id_key = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "inputs" => { inputs = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "pipeline" => { + if v.is_null() { + continue; + } + pipeline = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "request_retry_partial" => { + if v.is_null() { + continue; + } + request_retry_partial = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + "tls" => { + if v.is_null() { + continue; + } + tls = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "type" => { type_ = Some(serde_json::from_value(v).map_err(M::Error::custom)?); if let Some(ref _type_) = type_ { @@ -250,10 +336,15 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestination { auth, buffer, bulk_index, + compression, data_stream, endpoint_url_key, id, + id_key, inputs, + pipeline, + request_retry_partial, + tls, type_, additional_properties, _unparsed, diff --git a/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_compression.rs b/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_compression.rs new file mode 100644 index 0000000000..174112e505 --- /dev/null +++ b/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_compression.rs @@ -0,0 +1,121 @@ +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2019-Present Datadog, Inc. +use serde::de::{Error, MapAccess, Visitor}; +use serde::{Deserialize, Deserializer, Serialize}; +use serde_with::skip_serializing_none; +use std::fmt::{self, Formatter}; + +/// Compression configuration for the Elasticsearch destination. +#[non_exhaustive] +#[skip_serializing_none] +#[derive(Clone, Debug, PartialEq, Serialize)] +pub struct ObservabilityPipelineElasticsearchDestinationCompression { + /// The compression algorithm applied when sending data to Elasticsearch. + #[serde(rename = "algorithm")] + pub algorithm: + crate::datadogV2::model::ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm, + /// The compression level. Only applicable for `gzip`, `zlib`, and `zstd` algorithms. + #[serde(rename = "level")] + pub level: Option, + #[serde(flatten)] + pub additional_properties: std::collections::BTreeMap, + #[serde(skip)] + #[serde(default)] + pub(crate) _unparsed: bool, +} + +impl ObservabilityPipelineElasticsearchDestinationCompression { + pub fn new( + algorithm: crate::datadogV2::model::ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm, + ) -> ObservabilityPipelineElasticsearchDestinationCompression { + ObservabilityPipelineElasticsearchDestinationCompression { + algorithm, + level: None, + additional_properties: std::collections::BTreeMap::new(), + _unparsed: false, + } + } + + pub fn level(mut self, value: i64) -> Self { + self.level = Some(value); + self + } + + pub fn additional_properties( + mut self, + value: std::collections::BTreeMap, + ) -> Self { + self.additional_properties = value; + self + } +} + +impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestinationCompression { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + struct ObservabilityPipelineElasticsearchDestinationCompressionVisitor; + impl<'a> Visitor<'a> for ObservabilityPipelineElasticsearchDestinationCompressionVisitor { + type Value = ObservabilityPipelineElasticsearchDestinationCompression; + + fn expecting(&self, f: &mut Formatter<'_>) -> fmt::Result { + f.write_str("a mapping") + } + + fn visit_map(self, mut map: M) -> Result + where + M: MapAccess<'a>, + { + let mut algorithm: Option = None; + let mut level: Option = None; + let mut additional_properties: std::collections::BTreeMap< + String, + serde_json::Value, + > = std::collections::BTreeMap::new(); + let mut _unparsed = false; + + while let Some((k, v)) = map.next_entry::()? { + match k.as_str() { + "algorithm" => { + algorithm = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + if let Some(ref _algorithm) = algorithm { + match _algorithm { + crate::datadogV2::model::ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm::UnparsedObject(_algorithm) => { + _unparsed = true; + }, + _ => {} + } + } + } + "level" => { + if v.is_null() { + continue; + } + level = Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } + &_ => { + if let Ok(value) = serde_json::from_value(v.clone()) { + additional_properties.insert(k, value); + } + } + } + } + let algorithm = algorithm.ok_or_else(|| M::Error::missing_field("algorithm"))?; + + let content = ObservabilityPipelineElasticsearchDestinationCompression { + algorithm, + level, + additional_properties, + _unparsed, + }; + + Ok(content) + } + } + + deserializer + .deserialize_any(ObservabilityPipelineElasticsearchDestinationCompressionVisitor) + } +} diff --git a/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_compression_algorithm.rs b/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_compression_algorithm.rs new file mode 100644 index 0000000000..931fc705a9 --- /dev/null +++ b/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_compression_algorithm.rs @@ -0,0 +1,60 @@ +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache-2.0 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). +// Copyright 2019-Present Datadog, Inc. + +use serde::{Deserialize, Deserializer, Serialize, Serializer}; + +#[non_exhaustive] +#[derive(Clone, Debug, Eq, PartialEq)] +pub enum ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm { + NONE, + GZIP, + ZLIB, + ZSTD, + SNAPPY, + UnparsedObject(crate::datadog::UnparsedObject), +} + +impl ToString for ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm { + fn to_string(&self) -> String { + match self { + Self::NONE => String::from("none"), + Self::GZIP => String::from("gzip"), + Self::ZLIB => String::from("zlib"), + Self::ZSTD => String::from("zstd"), + Self::SNAPPY => String::from("snappy"), + Self::UnparsedObject(v) => v.value.to_string(), + } + } +} + +impl Serialize for ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + match self { + Self::UnparsedObject(v) => v.serialize(serializer), + _ => serializer.serialize_str(self.to_string().as_str()), + } + } +} + +impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestinationCompressionAlgorithm { + fn deserialize(deserializer: D) -> Result + where + D: Deserializer<'de>, + { + let s: String = String::deserialize(deserializer)?; + Ok(match s.as_str() { + "none" => Self::NONE, + "gzip" => Self::GZIP, + "zlib" => Self::ZLIB, + "zstd" => Self::ZSTD, + "snappy" => Self::SNAPPY, + _ => Self::UnparsedObject(crate::datadog::UnparsedObject { + value: serde_json::Value::String(s.into()), + }), + }) + } +} diff --git a/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_data_stream.rs b/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_data_stream.rs index 70f8db46c4..d4c3d02031 100644 --- a/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_data_stream.rs +++ b/src/datadogV2/model/model_observability_pipeline_elasticsearch_destination_data_stream.rs @@ -11,15 +11,21 @@ use std::fmt::{self, Formatter}; #[skip_serializing_none] #[derive(Clone, Debug, PartialEq, Serialize)] pub struct ObservabilityPipelineElasticsearchDestinationDataStream { - /// The data stream dataset for your logs. This groups logs by their source or application. + /// When `true`, automatically routes events to the appropriate data stream based on the event content. + #[serde(rename = "auto_routing")] + pub auto_routing: Option, + /// The data stream dataset. This groups events by their source or application. #[serde(rename = "dataset")] pub dataset: Option, - /// The data stream type for your logs. This determines how logs are categorized within the data stream. + /// The data stream type. This determines how events are categorized within the data stream. #[serde(rename = "dtype")] pub dtype: Option, - /// The data stream namespace for your logs. This separates logs into different environments or domains. + /// The data stream namespace. This separates events into different environments or domains. #[serde(rename = "namespace")] pub namespace: Option, + /// When `true`, synchronizes data stream fields with the Elasticsearch index mapping. + #[serde(rename = "sync_fields")] + pub sync_fields: Option, #[serde(flatten)] pub additional_properties: std::collections::BTreeMap, #[serde(skip)] @@ -30,14 +36,21 @@ pub struct ObservabilityPipelineElasticsearchDestinationDataStream { impl ObservabilityPipelineElasticsearchDestinationDataStream { pub fn new() -> ObservabilityPipelineElasticsearchDestinationDataStream { ObservabilityPipelineElasticsearchDestinationDataStream { + auto_routing: None, dataset: None, dtype: None, namespace: None, + sync_fields: None, additional_properties: std::collections::BTreeMap::new(), _unparsed: false, } } + pub fn auto_routing(mut self, value: bool) -> Self { + self.auto_routing = Some(value); + self + } + pub fn dataset(mut self, value: String) -> Self { self.dataset = Some(value); self @@ -53,6 +66,11 @@ impl ObservabilityPipelineElasticsearchDestinationDataStream { self } + pub fn sync_fields(mut self, value: bool) -> Self { + self.sync_fields = Some(value); + self + } + pub fn additional_properties( mut self, value: std::collections::BTreeMap, @@ -85,9 +103,11 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestinationData where M: MapAccess<'a>, { + let mut auto_routing: Option = None; let mut dataset: Option = None; let mut dtype: Option = None; let mut namespace: Option = None; + let mut sync_fields: Option = None; let mut additional_properties: std::collections::BTreeMap< String, serde_json::Value, @@ -96,6 +116,13 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestinationData while let Some((k, v)) = map.next_entry::()? { match k.as_str() { + "auto_routing" => { + if v.is_null() { + continue; + } + auto_routing = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } "dataset" => { if v.is_null() { continue; @@ -114,6 +141,13 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestinationData } namespace = Some(serde_json::from_value(v).map_err(M::Error::custom)?); } + "sync_fields" => { + if v.is_null() { + continue; + } + sync_fields = + Some(serde_json::from_value(v).map_err(M::Error::custom)?); + } &_ => { if let Ok(value) = serde_json::from_value(v.clone()) { additional_properties.insert(k, value); @@ -123,9 +157,11 @@ impl<'de> Deserialize<'de> for ObservabilityPipelineElasticsearchDestinationData } let content = ObservabilityPipelineElasticsearchDestinationDataStream { + auto_routing, dataset, dtype, namespace, + sync_fields, additional_properties, _unparsed, };