diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index cfbcb7286ac..d39604a121c 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -35701,6 +35701,7 @@ components: - $ref: '#/components/schemas/ObservabilityPipelineHttpClientSource' - $ref: '#/components/schemas/ObservabilityPipelineLogstashSource' - $ref: '#/components/schemas/ObservabilityPipelineSocketSource' + - $ref: '#/components/schemas/ObservabilityPipelineOpentelemetrySource' ObservabilityPipelineCrowdStrikeNextGenSiemDestination: description: The `crowdstrike_next_gen_siem` destination forwards logs to CrowdStrike Next Gen SIEM. @@ -37180,6 +37181,45 @@ components: type: string x-enum-varnames: - OPENSEARCH + ObservabilityPipelineOpentelemetrySource: + description: The `opentelemetry` source receives telemetry data using the OpenTelemetry + Protocol (OTLP) over gRPC and HTTP. + properties: + grpc_address_key: + description: Environment variable name containing the gRPC server address + for receiving OTLP data. Must be a valid environment variable name (alphanumeric + characters and underscores only). + example: OTEL_GRPC_ADDRESS + type: string + http_address_key: + description: Environment variable name containing the HTTP server address + for receiving OTLP data. Must be a valid environment variable name (alphanumeric + characters and underscores only). + example: OTEL_HTTP_ADDRESS + type: string + id: + description: The unique identifier for this component. Used to reference + this component in other parts of the pipeline (e.g., as input to downstream + components). + example: opentelemetry-source + type: string + tls: + $ref: '#/components/schemas/ObservabilityPipelineTls' + type: + $ref: '#/components/schemas/ObservabilityPipelineOpentelemetrySourceType' + required: + - id + - type + type: object + ObservabilityPipelineOpentelemetrySourceType: + default: opentelemetry + description: The source type. The value should always be `opentelemetry`. + enum: + - opentelemetry + example: opentelemetry + type: string + x-enum-varnames: + - OPENTELEMETRY ObservabilityPipelineParseGrokProcessor: description: The `parse_grok` processor extracts structured fields from unstructured log messages using Grok patterns. 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 58c17babac0..a0c74af90c5 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,57 @@ public ObservabilityPipelineConfigSourceItem deserialize( Level.FINER, "Input data does not match schema 'ObservabilityPipelineSocketSource'", e); } + // deserialize ObservabilityPipelineOpentelemetrySource + try { + boolean attemptParsing = true; + // ensure that we respect type coercion as set on the client ObjectMapper + if (ObservabilityPipelineOpentelemetrySource.class.equals(Integer.class) + || ObservabilityPipelineOpentelemetrySource.class.equals(Long.class) + || ObservabilityPipelineOpentelemetrySource.class.equals(Float.class) + || ObservabilityPipelineOpentelemetrySource.class.equals(Double.class) + || ObservabilityPipelineOpentelemetrySource.class.equals(Boolean.class) + || ObservabilityPipelineOpentelemetrySource.class.equals(String.class)) { + attemptParsing = typeCoercion; + if (!attemptParsing) { + attemptParsing |= + ((ObservabilityPipelineOpentelemetrySource.class.equals(Integer.class) + || ObservabilityPipelineOpentelemetrySource.class.equals(Long.class)) + && token == JsonToken.VALUE_NUMBER_INT); + attemptParsing |= + ((ObservabilityPipelineOpentelemetrySource.class.equals(Float.class) + || ObservabilityPipelineOpentelemetrySource.class.equals(Double.class)) + && (token == JsonToken.VALUE_NUMBER_FLOAT + || token == JsonToken.VALUE_NUMBER_INT)); + attemptParsing |= + (ObservabilityPipelineOpentelemetrySource.class.equals(Boolean.class) + && (token == JsonToken.VALUE_FALSE || token == JsonToken.VALUE_TRUE)); + attemptParsing |= + (ObservabilityPipelineOpentelemetrySource.class.equals(String.class) + && token == JsonToken.VALUE_STRING); + } + } + if (attemptParsing) { + tmp = + tree.traverse(jp.getCodec()) + .readValueAs(ObservabilityPipelineOpentelemetrySource.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 (!((ObservabilityPipelineOpentelemetrySource) tmp).unparsed) { + deserialized = tmp; + match++; + } + log.log( + Level.FINER, "Input data matches schema 'ObservabilityPipelineOpentelemetrySource'"); + } + } catch (Exception e) { + // deserialization failed, continue + log.log( + Level.FINER, + "Input data does not match schema 'ObservabilityPipelineOpentelemetrySource'", + e); + } + ObservabilityPipelineConfigSourceItem ret = new ObservabilityPipelineConfigSourceItem(); if (match == 1) { ret.setActualInstance(deserialized); @@ -979,6 +1030,11 @@ public ObservabilityPipelineConfigSourceItem(ObservabilityPipelineSocketSource o setActualInstance(o); } + public ObservabilityPipelineConfigSourceItem(ObservabilityPipelineOpentelemetrySource o) { + super("oneOf", Boolean.FALSE); + setActualInstance(o); + } + static { schemas.put( "ObservabilityPipelineKafkaSource", new GenericType() {}); @@ -1027,6 +1083,9 @@ public ObservabilityPipelineConfigSourceItem(ObservabilityPipelineSocketSource o schemas.put( "ObservabilityPipelineSocketSource", new GenericType() {}); + schemas.put( + "ObservabilityPipelineOpentelemetrySource", + new GenericType() {}); JSON.registerDescendants( ObservabilityPipelineConfigSourceItem.class, Collections.unmodifiableMap(schemas)); } @@ -1046,7 +1105,7 @@ public Map getSchemas() { * ObservabilityPipelineRsyslogSource, ObservabilityPipelineSyslogNgSource, * ObservabilityPipelineAmazonDataFirehoseSource, ObservabilityPipelineGooglePubSubSource, * ObservabilityPipelineHttpClientSource, ObservabilityPipelineLogstashSource, - * ObservabilityPipelineSocketSource + * ObservabilityPipelineSocketSource, ObservabilityPipelineOpentelemetrySource * *

It could be an instance of the 'oneOf' schemas. The oneOf child schemas may themselves be a * composed schema (allOf, anyOf, oneOf). @@ -1133,6 +1192,11 @@ public void setActualInstance(Object instance) { super.setActualInstance(instance); return; } + if (JSON.isInstanceOf( + ObservabilityPipelineOpentelemetrySource.class, instance, new HashSet>())) { + super.setActualInstance(instance); + return; + } if (JSON.isInstanceOf(UnparsedObject.class, instance, new HashSet>())) { super.setActualInstance(instance); @@ -1147,7 +1211,8 @@ public void setActualInstance(Object instance) { + " ObservabilityPipelineRsyslogSource, ObservabilityPipelineSyslogNgSource," + " ObservabilityPipelineAmazonDataFirehoseSource," + " ObservabilityPipelineGooglePubSubSource, ObservabilityPipelineHttpClientSource," - + " ObservabilityPipelineLogstashSource, ObservabilityPipelineSocketSource"); + + " ObservabilityPipelineLogstashSource, ObservabilityPipelineSocketSource," + + " ObservabilityPipelineOpentelemetrySource"); } /** @@ -1159,7 +1224,7 @@ public void setActualInstance(Object instance) { * ObservabilityPipelineRsyslogSource, ObservabilityPipelineSyslogNgSource, * ObservabilityPipelineAmazonDataFirehoseSource, ObservabilityPipelineGooglePubSubSource, * ObservabilityPipelineHttpClientSource, ObservabilityPipelineLogstashSource, - * ObservabilityPipelineSocketSource + * ObservabilityPipelineSocketSource, ObservabilityPipelineOpentelemetrySource * * @return The actual instance (ObservabilityPipelineKafkaSource, * ObservabilityPipelineDatadogAgentSource, ObservabilityPipelineSplunkTcpSource, @@ -1169,7 +1234,7 @@ public void setActualInstance(Object instance) { * ObservabilityPipelineRsyslogSource, ObservabilityPipelineSyslogNgSource, * ObservabilityPipelineAmazonDataFirehoseSource, ObservabilityPipelineGooglePubSubSource, * ObservabilityPipelineHttpClientSource, ObservabilityPipelineLogstashSource, - * ObservabilityPipelineSocketSource) + * ObservabilityPipelineSocketSource, ObservabilityPipelineOpentelemetrySource) */ @Override public Object getActualInstance() { @@ -1369,4 +1434,16 @@ public ObservabilityPipelineSocketSource getObservabilityPipelineSocketSource() throws ClassCastException { return (ObservabilityPipelineSocketSource) super.getActualInstance(); } + + /** + * Get the actual instance of `ObservabilityPipelineOpentelemetrySource`. If the actual instance + * is not `ObservabilityPipelineOpentelemetrySource`, the ClassCastException will be thrown. + * + * @return The actual instance of `ObservabilityPipelineOpentelemetrySource` + * @throws ClassCastException if the instance is not `ObservabilityPipelineOpentelemetrySource` + */ + public ObservabilityPipelineOpentelemetrySource getObservabilityPipelineOpentelemetrySource() + throws ClassCastException { + return (ObservabilityPipelineOpentelemetrySource) super.getActualInstance(); + } } diff --git a/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineOpentelemetrySource.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineOpentelemetrySource.java new file mode 100644 index 00000000000..9c0f57d11f8 --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineOpentelemetrySource.java @@ -0,0 +1,274 @@ +/* + * Unless explicitly stated otherwise all files in this repository 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 opentelemetry source receives telemetry data using the OpenTelemetry Protocol + * (OTLP) over gRPC and HTTP. + */ +@JsonPropertyOrder({ + ObservabilityPipelineOpentelemetrySource.JSON_PROPERTY_GRPC_ADDRESS_KEY, + ObservabilityPipelineOpentelemetrySource.JSON_PROPERTY_HTTP_ADDRESS_KEY, + ObservabilityPipelineOpentelemetrySource.JSON_PROPERTY_ID, + ObservabilityPipelineOpentelemetrySource.JSON_PROPERTY_TLS, + ObservabilityPipelineOpentelemetrySource.JSON_PROPERTY_TYPE +}) +@jakarta.annotation.Generated( + value = "https://github.com/DataDog/datadog-api-client-java/blob/master/.generator") +public class ObservabilityPipelineOpentelemetrySource { + @JsonIgnore public boolean unparsed = false; + public static final String JSON_PROPERTY_GRPC_ADDRESS_KEY = "grpc_address_key"; + private String grpcAddressKey; + + public static final String JSON_PROPERTY_HTTP_ADDRESS_KEY = "http_address_key"; + private String httpAddressKey; + + public static final String JSON_PROPERTY_ID = "id"; + private String id; + + public static final String JSON_PROPERTY_TLS = "tls"; + private ObservabilityPipelineTls tls; + + public static final String JSON_PROPERTY_TYPE = "type"; + private ObservabilityPipelineOpentelemetrySourceType type = + ObservabilityPipelineOpentelemetrySourceType.OPENTELEMETRY; + + public ObservabilityPipelineOpentelemetrySource() {} + + @JsonCreator + public ObservabilityPipelineOpentelemetrySource( + @JsonProperty(required = true, value = JSON_PROPERTY_ID) String id, + @JsonProperty(required = true, value = JSON_PROPERTY_TYPE) + ObservabilityPipelineOpentelemetrySourceType type) { + this.id = id; + this.type = type; + this.unparsed |= !type.isValid(); + } + + public ObservabilityPipelineOpentelemetrySource grpcAddressKey(String grpcAddressKey) { + this.grpcAddressKey = grpcAddressKey; + return this; + } + + /** + * Environment variable name containing the gRPC server address for receiving OTLP data. Must be a + * valid environment variable name (alphanumeric characters and underscores only). + * + * @return grpcAddressKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_GRPC_ADDRESS_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getGrpcAddressKey() { + return grpcAddressKey; + } + + public void setGrpcAddressKey(String grpcAddressKey) { + this.grpcAddressKey = grpcAddressKey; + } + + public ObservabilityPipelineOpentelemetrySource httpAddressKey(String httpAddressKey) { + this.httpAddressKey = httpAddressKey; + return this; + } + + /** + * Environment variable name containing the HTTP server address for receiving OTLP data. Must be a + * valid environment variable name (alphanumeric characters and underscores only). + * + * @return httpAddressKey + */ + @jakarta.annotation.Nullable + @JsonProperty(JSON_PROPERTY_HTTP_ADDRESS_KEY) + @JsonInclude(value = JsonInclude.Include.USE_DEFAULTS) + public String getHttpAddressKey() { + return httpAddressKey; + } + + public void setHttpAddressKey(String httpAddressKey) { + this.httpAddressKey = httpAddressKey; + } + + public ObservabilityPipelineOpentelemetrySource id(String id) { + this.id = id; + return this; + } + + /** + * The unique identifier for this component. Used to reference this component in other parts of + * the pipeline (e.g., as input to downstream components). + * + * @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 ObservabilityPipelineOpentelemetrySource 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 ObservabilityPipelineOpentelemetrySource type( + ObservabilityPipelineOpentelemetrySourceType type) { + this.type = type; + this.unparsed |= !type.isValid(); + return this; + } + + /** + * The source type. The value should always be opentelemetry. + * + * @return type + */ + @JsonProperty(JSON_PROPERTY_TYPE) + @JsonInclude(value = JsonInclude.Include.ALWAYS) + public ObservabilityPipelineOpentelemetrySourceType getType() { + return type; + } + + public void setType(ObservabilityPipelineOpentelemetrySourceType 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 ObservabilityPipelineOpentelemetrySource + */ + @JsonAnySetter + public ObservabilityPipelineOpentelemetrySource 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 ObservabilityPipelineOpentelemetrySource object is equal to o. */ + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ObservabilityPipelineOpentelemetrySource observabilityPipelineOpentelemetrySource = + (ObservabilityPipelineOpentelemetrySource) o; + return Objects.equals( + this.grpcAddressKey, observabilityPipelineOpentelemetrySource.grpcAddressKey) + && Objects.equals( + this.httpAddressKey, observabilityPipelineOpentelemetrySource.httpAddressKey) + && Objects.equals(this.id, observabilityPipelineOpentelemetrySource.id) + && Objects.equals(this.tls, observabilityPipelineOpentelemetrySource.tls) + && Objects.equals(this.type, observabilityPipelineOpentelemetrySource.type) + && Objects.equals( + this.additionalProperties, + observabilityPipelineOpentelemetrySource.additionalProperties); + } + + @Override + public int hashCode() { + return Objects.hash(grpcAddressKey, httpAddressKey, id, tls, type, additionalProperties); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class ObservabilityPipelineOpentelemetrySource {\n"); + sb.append(" grpcAddressKey: ").append(toIndentedString(grpcAddressKey)).append("\n"); + sb.append(" httpAddressKey: ").append(toIndentedString(httpAddressKey)).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).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/ObservabilityPipelineOpentelemetrySourceType.java b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineOpentelemetrySourceType.java new file mode 100644 index 00000000000..ffeef30f86e --- /dev/null +++ b/src/main/java/com/datadog/api/client/v2/model/ObservabilityPipelineOpentelemetrySourceType.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; + +/** The source type. The value should always be opentelemetry. */ +@JsonSerialize( + using = + ObservabilityPipelineOpentelemetrySourceType + .ObservabilityPipelineOpentelemetrySourceTypeSerializer.class) +public class ObservabilityPipelineOpentelemetrySourceType extends ModelEnum { + + private static final Set allowedValues = + new HashSet(Arrays.asList("opentelemetry")); + + public static final ObservabilityPipelineOpentelemetrySourceType OPENTELEMETRY = + new ObservabilityPipelineOpentelemetrySourceType("opentelemetry"); + + ObservabilityPipelineOpentelemetrySourceType(String value) { + super(value, allowedValues); + } + + public static class ObservabilityPipelineOpentelemetrySourceTypeSerializer + extends StdSerializer { + public ObservabilityPipelineOpentelemetrySourceTypeSerializer( + Class t) { + super(t); + } + + public ObservabilityPipelineOpentelemetrySourceTypeSerializer() { + this(null); + } + + @Override + public void serialize( + ObservabilityPipelineOpentelemetrySourceType value, + JsonGenerator jgen, + SerializerProvider provider) + throws IOException, JsonProcessingException { + jgen.writeObject(value.value); + } + } + + @JsonCreator + public static ObservabilityPipelineOpentelemetrySourceType fromValue(String value) { + return new ObservabilityPipelineOpentelemetrySourceType(value); + } +}