FaaS Typed Spans (#856)
This commit is contained in:
parent
c89b9b2a26
commit
2e89206a75
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
|
||||||
|
public interface FaasDatasourceSemanticConvention {
|
||||||
|
void end();
|
||||||
|
|
||||||
|
Span getSpan();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.trigger
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
FaasDatasourceSemanticConvention setFaasTrigger(String faasTrigger);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.execution
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
FaasDatasourceSemanticConvention setFaasExecution(String faasExecution);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.document.collection
|
||||||
|
*
|
||||||
|
* @param faasDocumentCollection The name of the source on which the triggering operation was
|
||||||
|
* performed.
|
||||||
|
* <p>For example, in Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to
|
||||||
|
* the database name.
|
||||||
|
*/
|
||||||
|
FaasDatasourceSemanticConvention setFaasDocumentCollection(String faasDocumentCollection);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.document.operation
|
||||||
|
*
|
||||||
|
* @param faasDocumentOperation Describes the type of the operation that was performed on the
|
||||||
|
* data.
|
||||||
|
*/
|
||||||
|
FaasDatasourceSemanticConvention setFaasDocumentOperation(String faasDocumentOperation);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.document.time
|
||||||
|
*
|
||||||
|
* @param faasDocumentTime A string containing the time when the data was accessed in the [ISO
|
||||||
|
* 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in
|
||||||
|
* [UTC](https://www.w3.org/TR/NOTE-datetime).
|
||||||
|
*/
|
||||||
|
FaasDatasourceSemanticConvention setFaasDocumentTime(String faasDocumentTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.document.name
|
||||||
|
*
|
||||||
|
* @param faasDocumentName The document name/table subjected to the operation.
|
||||||
|
* <p>For example, in Cloud Storage or S3 is the name of the file, and in Cosmos DB the table
|
||||||
|
* name.
|
||||||
|
*/
|
||||||
|
FaasDatasourceSemanticConvention setFaasDocumentName(String faasDocumentName);
|
||||||
|
}
|
|
@ -0,0 +1,247 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
import io.opentelemetry.trace.SpanContext;
|
||||||
|
import io.opentelemetry.trace.Tracer;
|
||||||
|
|
||||||
|
public class FaasDatasourceSpan extends DelegatingSpan implements FaasDatasourceSemanticConvention {
|
||||||
|
|
||||||
|
protected FaasDatasourceSpan(Span span) {
|
||||||
|
super(span);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry point to generate a {@link FaasDatasourceSpan}.
|
||||||
|
*
|
||||||
|
* @param tracer Tracer to use
|
||||||
|
* @param spanName Name for the {@link Span}
|
||||||
|
* @return a {@link FaasDatasourceSpan} object.
|
||||||
|
*/
|
||||||
|
public static FaasDatasourceSpanBuilder createFaasDatasourceSpan(Tracer tracer, String spanName) {
|
||||||
|
return new FaasDatasourceSpanBuilder(tracer, spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FaasDatasourceSpan} from a {@link FaasSpanSpan}.
|
||||||
|
*
|
||||||
|
* @param builder {@link FaasSpanSpan.FaasSpanSpanBuilder} to use.
|
||||||
|
* @return a {@link FaasDatasourceSpan} object built from a {@link FaasSpanSpan}.
|
||||||
|
*/
|
||||||
|
public static FaasDatasourceSpanBuilder createFaasDatasourceSpan(
|
||||||
|
FaasSpanSpan.FaasSpanSpanBuilder builder) {
|
||||||
|
// we accept a builder from FaasSpan since FaasDatasource "extends" FaasSpan
|
||||||
|
return new FaasDatasourceSpanBuilder(builder.getSpanBuilder());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return the Span used internally */
|
||||||
|
@Override
|
||||||
|
public Span getSpan() {
|
||||||
|
return this.delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Terminates the Span. Here there is the checking for required attributes. */
|
||||||
|
@Override
|
||||||
|
public void end() {
|
||||||
|
delegate.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasDatasourceSemanticConvention setFaasTrigger(String faasTrigger) {
|
||||||
|
delegate.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasDatasourceSemanticConvention setFaasExecution(String faasExecution) {
|
||||||
|
delegate.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.document.collection.
|
||||||
|
*
|
||||||
|
* @param faasDocumentCollection The name of the source on which the triggering operation was
|
||||||
|
* performed.
|
||||||
|
* <p>For example, in Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB to
|
||||||
|
* the database name.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasDatasourceSemanticConvention setFaasDocumentCollection(String faasDocumentCollection) {
|
||||||
|
delegate.setAttribute("faas.document.collection", faasDocumentCollection);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.document.operation.
|
||||||
|
*
|
||||||
|
* @param faasDocumentOperation Describes the type of the operation that was performed on the
|
||||||
|
* data.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasDatasourceSemanticConvention setFaasDocumentOperation(String faasDocumentOperation) {
|
||||||
|
delegate.setAttribute("faas.document.operation", faasDocumentOperation);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.document.time.
|
||||||
|
*
|
||||||
|
* @param faasDocumentTime A string containing the time when the data was accessed in the [ISO
|
||||||
|
* 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in
|
||||||
|
* [UTC](https://www.w3.org/TR/NOTE-datetime).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasDatasourceSemanticConvention setFaasDocumentTime(String faasDocumentTime) {
|
||||||
|
delegate.setAttribute("faas.document.time", faasDocumentTime);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.document.name.
|
||||||
|
*
|
||||||
|
* @param faasDocumentName The document name/table subjected to the operation.
|
||||||
|
* <p>For example, in Cloud Storage or S3 is the name of the file, and in Cosmos DB the table
|
||||||
|
* name.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasDatasourceSemanticConvention setFaasDocumentName(String faasDocumentName) {
|
||||||
|
delegate.setAttribute("faas.document.name", faasDocumentName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builder class for {@link FaasDatasourceSpan}. */
|
||||||
|
public static class FaasDatasourceSpanBuilder {
|
||||||
|
// Protected because maybe we want to extend manually these classes
|
||||||
|
protected Span.Builder internalBuilder;
|
||||||
|
|
||||||
|
protected FaasDatasourceSpanBuilder(Tracer tracer, String spanName) {
|
||||||
|
internalBuilder = tracer.spanBuilder(spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FaasDatasourceSpanBuilder(Span.Builder spanBuilder) {
|
||||||
|
this.internalBuilder = spanBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Span.Builder getSpanBuilder() {
|
||||||
|
return this.internalBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasDatasourceSpanBuilder setParent(Span parent) {
|
||||||
|
this.internalBuilder.setParent(parent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasDatasourceSpanBuilder setParent(SpanContext remoteParent) {
|
||||||
|
this.internalBuilder.setParent(remoteParent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** this method sets the type of the {@link Span} is only available in the builder. */
|
||||||
|
public FaasDatasourceSpanBuilder setKind(Span.Kind kind) {
|
||||||
|
internalBuilder.setSpanKind(kind);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** starts the span */
|
||||||
|
public FaasDatasourceSpan start() {
|
||||||
|
// check for sampling relevant field here, but there are none.
|
||||||
|
return new FaasDatasourceSpan(this.internalBuilder.startSpan());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
public FaasDatasourceSpanBuilder setFaasTrigger(String faasTrigger) {
|
||||||
|
internalBuilder.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
public FaasDatasourceSpanBuilder setFaasExecution(String faasExecution) {
|
||||||
|
internalBuilder.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.document.collection.
|
||||||
|
*
|
||||||
|
* @param faasDocumentCollection The name of the source on which the triggering operation was
|
||||||
|
* performed.
|
||||||
|
* <p>For example, in Cloud Storage or S3 corresponds to the bucket name, and in Cosmos DB
|
||||||
|
* to the database name.
|
||||||
|
*/
|
||||||
|
public FaasDatasourceSpanBuilder setFaasDocumentCollection(String faasDocumentCollection) {
|
||||||
|
internalBuilder.setAttribute("faas.document.collection", faasDocumentCollection);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.document.operation.
|
||||||
|
*
|
||||||
|
* @param faasDocumentOperation Describes the type of the operation that was performed on the
|
||||||
|
* data.
|
||||||
|
*/
|
||||||
|
public FaasDatasourceSpanBuilder setFaasDocumentOperation(String faasDocumentOperation) {
|
||||||
|
internalBuilder.setAttribute("faas.document.operation", faasDocumentOperation);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.document.time.
|
||||||
|
*
|
||||||
|
* @param faasDocumentTime A string containing the time when the data was accessed in the [ISO
|
||||||
|
* 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in
|
||||||
|
* [UTC](https://www.w3.org/TR/NOTE-datetime).
|
||||||
|
*/
|
||||||
|
public FaasDatasourceSpanBuilder setFaasDocumentTime(String faasDocumentTime) {
|
||||||
|
internalBuilder.setAttribute("faas.document.time", faasDocumentTime);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.document.name.
|
||||||
|
*
|
||||||
|
* @param faasDocumentName The document name/table subjected to the operation.
|
||||||
|
* <p>For example, in Cloud Storage or S3 is the name of the file, and in Cosmos DB the
|
||||||
|
* table name.
|
||||||
|
*/
|
||||||
|
public FaasDatasourceSpanBuilder setFaasDocumentName(String faasDocumentName) {
|
||||||
|
internalBuilder.setAttribute("faas.document.name", faasDocumentName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,229 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
|
||||||
|
public interface FaasHttpSemanticConvention {
|
||||||
|
void end();
|
||||||
|
|
||||||
|
Span getSpan();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.trigger
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setFaasTrigger(String faasTrigger);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.execution
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setFaasExecution(String faasExecution);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.method
|
||||||
|
*
|
||||||
|
* @param httpMethod HTTP request method.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpMethod(String httpMethod);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.url
|
||||||
|
*
|
||||||
|
* @param httpUrl Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`.
|
||||||
|
* Usually the fragment is not transmitted over HTTP, but if it is known, it should be
|
||||||
|
* included nevertheless.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpUrl(String httpUrl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.target
|
||||||
|
*
|
||||||
|
* @param httpTarget The full request target as passed in a HTTP request line or equivalent.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpTarget(String httpTarget);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.host
|
||||||
|
*
|
||||||
|
* @param httpHost The value of the [HTTP host
|
||||||
|
* header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not
|
||||||
|
* present, this attribute should be the same.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpHost(String httpHost);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.scheme
|
||||||
|
*
|
||||||
|
* @param httpScheme The URI scheme identifying the used protocol.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpScheme(String httpScheme);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.status_code
|
||||||
|
*
|
||||||
|
* @param httpStatusCode [HTTP response status
|
||||||
|
* code](https://tools.ietf.org/html/rfc7231#section-6).
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpStatusCode(long httpStatusCode);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.status_text
|
||||||
|
*
|
||||||
|
* @param httpStatusText [HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpStatusText(String httpStatusText);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.flavor
|
||||||
|
*
|
||||||
|
* @param httpFlavor Kind of HTTP protocol used.
|
||||||
|
* <p>If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if
|
||||||
|
* `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpFlavor(String httpFlavor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.user_agent
|
||||||
|
*
|
||||||
|
* @param httpUserAgent Value of the [HTTP
|
||||||
|
* User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpUserAgent(String httpUserAgent);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.request_content_length
|
||||||
|
*
|
||||||
|
* @param httpRequestContentLength The size of the request payload body in bytes. This is the
|
||||||
|
* number of bytes transferred excluding headers and is often, but not always, present as the
|
||||||
|
* [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For requests
|
||||||
|
* using transport encoding, this should be the compressed size.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpRequestContentLength(long httpRequestContentLength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.request_content_length_uncompressed
|
||||||
|
*
|
||||||
|
* @param httpRequestContentLengthUncompressed The size of the uncompressed request payload body
|
||||||
|
* after transport decoding. Not set if transport encoding not used.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpRequestContentLengthUncompressed(
|
||||||
|
long httpRequestContentLengthUncompressed);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.response_content_length
|
||||||
|
*
|
||||||
|
* @param httpResponseContentLength The size of the response payload body in bytes. This is the
|
||||||
|
* number of bytes transferred excluding headers and is often, but not always, present as the
|
||||||
|
* [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For requests
|
||||||
|
* using transport encoding, this should be the compressed size.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpResponseContentLength(long httpResponseContentLength);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.response_content_length_uncompressed
|
||||||
|
*
|
||||||
|
* @param httpResponseContentLengthUncompressed The size of the uncompressed response payload body
|
||||||
|
* after transport decoding. Not set if transport encoding not used.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpResponseContentLengthUncompressed(
|
||||||
|
long httpResponseContentLengthUncompressed);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.server_name
|
||||||
|
*
|
||||||
|
* @param httpServerName The primary server name of the matched virtual host. This should be
|
||||||
|
* obtained via configuration. If no such configuration can be obtained, this attribute MUST
|
||||||
|
* NOT be set ( `net.host.name` should be used instead).
|
||||||
|
* <p>http.url is usually not readily available on the server side but would have to be
|
||||||
|
* assembled in a cumbersome and sometimes lossy process from other information (see e.g.
|
||||||
|
* open-telemetry/opentelemetry-python/pull/148). It is thus preferred to supply the raw data
|
||||||
|
* that is available.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpServerName(String httpServerName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.route
|
||||||
|
*
|
||||||
|
* @param httpRoute The matched route (path template).
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpRoute(String httpRoute);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for http.client_ip
|
||||||
|
*
|
||||||
|
* @param httpClientIp The IP address of the original client behind all proxies, if known (e.g.
|
||||||
|
* from
|
||||||
|
* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)).
|
||||||
|
* <p>This is not necessarily the same as `net.peer.ip`, which would identify the
|
||||||
|
* network-level peer, which may be a proxy.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setHttpClientIp(String httpClientIp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.transport
|
||||||
|
*
|
||||||
|
* @param netTransport Transport protocol used. See note below.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setNetTransport(String netTransport);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.peer.ip
|
||||||
|
*
|
||||||
|
* @param netPeerIp Remote address of the peer (dotted decimal for IPv4 or
|
||||||
|
* [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6).
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setNetPeerIp(String netPeerIp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.peer.port
|
||||||
|
*
|
||||||
|
* @param netPeerPort Remote port number.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setNetPeerPort(long netPeerPort);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.peer.name
|
||||||
|
*
|
||||||
|
* @param netPeerName Remote hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setNetPeerName(String netPeerName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.host.ip
|
||||||
|
*
|
||||||
|
* @param netHostIp Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setNetHostIp(String netHostIp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.host.port
|
||||||
|
*
|
||||||
|
* @param netHostPort Like `net.peer.port` but for the host port.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setNetHostPort(long netHostPort);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.host.name
|
||||||
|
*
|
||||||
|
* @param netHostName Local hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
FaasHttpSemanticConvention setNetHostName(String netHostName);
|
||||||
|
}
|
|
@ -0,0 +1,692 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
import io.opentelemetry.trace.SpanContext;
|
||||||
|
import io.opentelemetry.trace.Tracer;
|
||||||
|
|
||||||
|
public class FaasHttpSpan extends DelegatingSpan implements FaasHttpSemanticConvention {
|
||||||
|
|
||||||
|
protected FaasHttpSpan(Span span) {
|
||||||
|
super(span);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry point to generate a {@link FaasHttpSpan}.
|
||||||
|
*
|
||||||
|
* @param tracer Tracer to use
|
||||||
|
* @param spanName Name for the {@link Span}
|
||||||
|
* @return a {@link FaasHttpSpan} object.
|
||||||
|
*/
|
||||||
|
public static FaasHttpSpanBuilder createFaasHttpSpan(Tracer tracer, String spanName) {
|
||||||
|
return new FaasHttpSpanBuilder(tracer, spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FaasHttpSpan} from a {@link FaasSpanSpan}.
|
||||||
|
*
|
||||||
|
* @param builder {@link FaasSpanSpan.FaasSpanSpanBuilder} to use.
|
||||||
|
* @return a {@link FaasHttpSpan} object built from a {@link FaasSpanSpan}.
|
||||||
|
*/
|
||||||
|
public static FaasHttpSpanBuilder createFaasHttpSpan(FaasSpanSpan.FaasSpanSpanBuilder builder) {
|
||||||
|
// we accept a builder from FaasSpan since FaasHttp "extends" FaasSpan
|
||||||
|
return new FaasHttpSpanBuilder(builder.getSpanBuilder());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return the Span used internally */
|
||||||
|
@Override
|
||||||
|
public Span getSpan() {
|
||||||
|
return this.delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Terminates the Span. Here there is the checking for required attributes. */
|
||||||
|
@Override
|
||||||
|
public void end() {
|
||||||
|
delegate.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setFaasTrigger(String faasTrigger) {
|
||||||
|
delegate.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setFaasExecution(String faasExecution) {
|
||||||
|
delegate.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.method.
|
||||||
|
*
|
||||||
|
* @param httpMethod HTTP request method.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpMethod(String httpMethod) {
|
||||||
|
delegate.setAttribute("http.method", httpMethod);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.url.
|
||||||
|
*
|
||||||
|
* @param httpUrl Full HTTP request URL in the form `scheme://host[:port]/path?query[#fragment]`.
|
||||||
|
* Usually the fragment is not transmitted over HTTP, but if it is known, it should be
|
||||||
|
* included nevertheless.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpUrl(String httpUrl) {
|
||||||
|
delegate.setAttribute("http.url", httpUrl);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.target.
|
||||||
|
*
|
||||||
|
* @param httpTarget The full request target as passed in a HTTP request line or equivalent.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpTarget(String httpTarget) {
|
||||||
|
delegate.setAttribute("http.target", httpTarget);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.host.
|
||||||
|
*
|
||||||
|
* @param httpHost The value of the [HTTP host
|
||||||
|
* header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not
|
||||||
|
* present, this attribute should be the same.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpHost(String httpHost) {
|
||||||
|
delegate.setAttribute("http.host", httpHost);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.scheme.
|
||||||
|
*
|
||||||
|
* @param httpScheme The URI scheme identifying the used protocol.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpScheme(String httpScheme) {
|
||||||
|
delegate.setAttribute("http.scheme", httpScheme);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.status_code.
|
||||||
|
*
|
||||||
|
* @param httpStatusCode [HTTP response status
|
||||||
|
* code](https://tools.ietf.org/html/rfc7231#section-6).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpStatusCode(long httpStatusCode) {
|
||||||
|
delegate.setAttribute("http.status_code", httpStatusCode);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.status_text.
|
||||||
|
*
|
||||||
|
* @param httpStatusText [HTTP reason phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpStatusText(String httpStatusText) {
|
||||||
|
delegate.setAttribute("http.status_text", httpStatusText);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.flavor.
|
||||||
|
*
|
||||||
|
* @param httpFlavor Kind of HTTP protocol used.
|
||||||
|
* <p>If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if
|
||||||
|
* `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpFlavor(String httpFlavor) {
|
||||||
|
delegate.setAttribute("http.flavor", httpFlavor);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.user_agent.
|
||||||
|
*
|
||||||
|
* @param httpUserAgent Value of the [HTTP
|
||||||
|
* User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpUserAgent(String httpUserAgent) {
|
||||||
|
delegate.setAttribute("http.user_agent", httpUserAgent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.request_content_length.
|
||||||
|
*
|
||||||
|
* @param httpRequestContentLength The size of the request payload body in bytes. This is the
|
||||||
|
* number of bytes transferred excluding headers and is often, but not always, present as the
|
||||||
|
* [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For requests
|
||||||
|
* using transport encoding, this should be the compressed size.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpRequestContentLength(long httpRequestContentLength) {
|
||||||
|
delegate.setAttribute("http.request_content_length", httpRequestContentLength);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.request_content_length_uncompressed.
|
||||||
|
*
|
||||||
|
* @param httpRequestContentLengthUncompressed The size of the uncompressed request payload body
|
||||||
|
* after transport decoding. Not set if transport encoding not used.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpRequestContentLengthUncompressed(
|
||||||
|
long httpRequestContentLengthUncompressed) {
|
||||||
|
delegate.setAttribute(
|
||||||
|
"http.request_content_length_uncompressed", httpRequestContentLengthUncompressed);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.response_content_length.
|
||||||
|
*
|
||||||
|
* @param httpResponseContentLength The size of the response payload body in bytes. This is the
|
||||||
|
* number of bytes transferred excluding headers and is often, but not always, present as the
|
||||||
|
* [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For requests
|
||||||
|
* using transport encoding, this should be the compressed size.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpResponseContentLength(long httpResponseContentLength) {
|
||||||
|
delegate.setAttribute("http.response_content_length", httpResponseContentLength);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.response_content_length_uncompressed.
|
||||||
|
*
|
||||||
|
* @param httpResponseContentLengthUncompressed The size of the uncompressed response payload body
|
||||||
|
* after transport decoding. Not set if transport encoding not used.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpResponseContentLengthUncompressed(
|
||||||
|
long httpResponseContentLengthUncompressed) {
|
||||||
|
delegate.setAttribute(
|
||||||
|
"http.response_content_length_uncompressed", httpResponseContentLengthUncompressed);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.server_name.
|
||||||
|
*
|
||||||
|
* @param httpServerName The primary server name of the matched virtual host. This should be
|
||||||
|
* obtained via configuration. If no such configuration can be obtained, this attribute MUST
|
||||||
|
* NOT be set ( `net.host.name` should be used instead).
|
||||||
|
* <p>http.url is usually not readily available on the server side but would have to be
|
||||||
|
* assembled in a cumbersome and sometimes lossy process from other information (see e.g.
|
||||||
|
* open-telemetry/opentelemetry-python/pull/148). It is thus preferred to supply the raw data
|
||||||
|
* that is available.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpServerName(String httpServerName) {
|
||||||
|
delegate.setAttribute("http.server_name", httpServerName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.route.
|
||||||
|
*
|
||||||
|
* @param httpRoute The matched route (path template).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpRoute(String httpRoute) {
|
||||||
|
delegate.setAttribute("http.route", httpRoute);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.client_ip.
|
||||||
|
*
|
||||||
|
* @param httpClientIp The IP address of the original client behind all proxies, if known (e.g.
|
||||||
|
* from
|
||||||
|
* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)).
|
||||||
|
* <p>This is not necessarily the same as `net.peer.ip`, which would identify the
|
||||||
|
* network-level peer, which may be a proxy.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setHttpClientIp(String httpClientIp) {
|
||||||
|
delegate.setAttribute("http.client_ip", httpClientIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.transport.
|
||||||
|
*
|
||||||
|
* @param netTransport Transport protocol used. See note below.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setNetTransport(String netTransport) {
|
||||||
|
delegate.setAttribute("net.transport", netTransport);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.ip.
|
||||||
|
*
|
||||||
|
* @param netPeerIp Remote address of the peer (dotted decimal for IPv4 or
|
||||||
|
* [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setNetPeerIp(String netPeerIp) {
|
||||||
|
delegate.setAttribute("net.peer.ip", netPeerIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.port.
|
||||||
|
*
|
||||||
|
* @param netPeerPort Remote port number.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setNetPeerPort(long netPeerPort) {
|
||||||
|
delegate.setAttribute("net.peer.port", netPeerPort);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.name.
|
||||||
|
*
|
||||||
|
* @param netPeerName Remote hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setNetPeerName(String netPeerName) {
|
||||||
|
delegate.setAttribute("net.peer.name", netPeerName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.ip.
|
||||||
|
*
|
||||||
|
* @param netHostIp Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setNetHostIp(String netHostIp) {
|
||||||
|
delegate.setAttribute("net.host.ip", netHostIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.port.
|
||||||
|
*
|
||||||
|
* @param netHostPort Like `net.peer.port` but for the host port.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setNetHostPort(long netHostPort) {
|
||||||
|
delegate.setAttribute("net.host.port", netHostPort);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.name.
|
||||||
|
*
|
||||||
|
* @param netHostName Local hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasHttpSemanticConvention setNetHostName(String netHostName) {
|
||||||
|
delegate.setAttribute("net.host.name", netHostName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builder class for {@link FaasHttpSpan}. */
|
||||||
|
public static class FaasHttpSpanBuilder {
|
||||||
|
// Protected because maybe we want to extend manually these classes
|
||||||
|
protected Span.Builder internalBuilder;
|
||||||
|
|
||||||
|
protected FaasHttpSpanBuilder(Tracer tracer, String spanName) {
|
||||||
|
internalBuilder = tracer.spanBuilder(spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FaasHttpSpanBuilder(Span.Builder spanBuilder) {
|
||||||
|
this.internalBuilder = spanBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Span.Builder getSpanBuilder() {
|
||||||
|
return this.internalBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasHttpSpanBuilder setParent(Span parent) {
|
||||||
|
this.internalBuilder.setParent(parent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasHttpSpanBuilder setParent(SpanContext remoteParent) {
|
||||||
|
this.internalBuilder.setParent(remoteParent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** this method sets the type of the {@link Span} is only available in the builder. */
|
||||||
|
public FaasHttpSpanBuilder setKind(Span.Kind kind) {
|
||||||
|
internalBuilder.setSpanKind(kind);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** starts the span */
|
||||||
|
public FaasHttpSpan start() {
|
||||||
|
// check for sampling relevant field here, but there are none.
|
||||||
|
return new FaasHttpSpan(this.internalBuilder.startSpan());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setFaasTrigger(String faasTrigger) {
|
||||||
|
internalBuilder.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setFaasExecution(String faasExecution) {
|
||||||
|
internalBuilder.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.method.
|
||||||
|
*
|
||||||
|
* @param httpMethod HTTP request method.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpMethod(String httpMethod) {
|
||||||
|
internalBuilder.setAttribute("http.method", httpMethod);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.url.
|
||||||
|
*
|
||||||
|
* @param httpUrl Full HTTP request URL in the form
|
||||||
|
* `scheme://host[:port]/path?query[#fragment]`. Usually the fragment is not transmitted
|
||||||
|
* over HTTP, but if it is known, it should be included nevertheless.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpUrl(String httpUrl) {
|
||||||
|
internalBuilder.setAttribute("http.url", httpUrl);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.target.
|
||||||
|
*
|
||||||
|
* @param httpTarget The full request target as passed in a HTTP request line or equivalent.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpTarget(String httpTarget) {
|
||||||
|
internalBuilder.setAttribute("http.target", httpTarget);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.host.
|
||||||
|
*
|
||||||
|
* @param httpHost The value of the [HTTP host
|
||||||
|
* header](https://tools.ietf.org/html/rfc7230#section-5.4). When the header is empty or not
|
||||||
|
* present, this attribute should be the same.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpHost(String httpHost) {
|
||||||
|
internalBuilder.setAttribute("http.host", httpHost);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.scheme.
|
||||||
|
*
|
||||||
|
* @param httpScheme The URI scheme identifying the used protocol.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpScheme(String httpScheme) {
|
||||||
|
internalBuilder.setAttribute("http.scheme", httpScheme);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.status_code.
|
||||||
|
*
|
||||||
|
* @param httpStatusCode [HTTP response status
|
||||||
|
* code](https://tools.ietf.org/html/rfc7231#section-6).
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpStatusCode(long httpStatusCode) {
|
||||||
|
internalBuilder.setAttribute("http.status_code", httpStatusCode);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.status_text.
|
||||||
|
*
|
||||||
|
* @param httpStatusText [HTTP reason
|
||||||
|
* phrase](https://tools.ietf.org/html/rfc7230#section-3.1.2).
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpStatusText(String httpStatusText) {
|
||||||
|
internalBuilder.setAttribute("http.status_text", httpStatusText);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.flavor.
|
||||||
|
*
|
||||||
|
* @param httpFlavor Kind of HTTP protocol used.
|
||||||
|
* <p>If `net.transport` is not specified, it can be assumed to be `IP.TCP` except if
|
||||||
|
* `http.flavor` is `QUIC`, in which case `IP.UDP` is assumed.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpFlavor(String httpFlavor) {
|
||||||
|
internalBuilder.setAttribute("http.flavor", httpFlavor);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.user_agent.
|
||||||
|
*
|
||||||
|
* @param httpUserAgent Value of the [HTTP
|
||||||
|
* User-Agent](https://tools.ietf.org/html/rfc7231#section-5.5.3) header sent by the client.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpUserAgent(String httpUserAgent) {
|
||||||
|
internalBuilder.setAttribute("http.user_agent", httpUserAgent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.request_content_length.
|
||||||
|
*
|
||||||
|
* @param httpRequestContentLength The size of the request payload body in bytes. This is the
|
||||||
|
* number of bytes transferred excluding headers and is often, but not always, present as
|
||||||
|
* the [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For
|
||||||
|
* requests using transport encoding, this should be the compressed size.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpRequestContentLength(long httpRequestContentLength) {
|
||||||
|
internalBuilder.setAttribute("http.request_content_length", httpRequestContentLength);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.request_content_length_uncompressed.
|
||||||
|
*
|
||||||
|
* @param httpRequestContentLengthUncompressed The size of the uncompressed request payload body
|
||||||
|
* after transport decoding. Not set if transport encoding not used.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpRequestContentLengthUncompressed(
|
||||||
|
long httpRequestContentLengthUncompressed) {
|
||||||
|
internalBuilder.setAttribute(
|
||||||
|
"http.request_content_length_uncompressed", httpRequestContentLengthUncompressed);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.response_content_length.
|
||||||
|
*
|
||||||
|
* @param httpResponseContentLength The size of the response payload body in bytes. This is the
|
||||||
|
* number of bytes transferred excluding headers and is often, but not always, present as
|
||||||
|
* the [Content-Length](https://tools.ietf.org/html/rfc7230#section-3.3.2) header. For
|
||||||
|
* requests using transport encoding, this should be the compressed size.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpResponseContentLength(long httpResponseContentLength) {
|
||||||
|
internalBuilder.setAttribute("http.response_content_length", httpResponseContentLength);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.response_content_length_uncompressed.
|
||||||
|
*
|
||||||
|
* @param httpResponseContentLengthUncompressed The size of the uncompressed response payload
|
||||||
|
* body after transport decoding. Not set if transport encoding not used.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpResponseContentLengthUncompressed(
|
||||||
|
long httpResponseContentLengthUncompressed) {
|
||||||
|
internalBuilder.setAttribute(
|
||||||
|
"http.response_content_length_uncompressed", httpResponseContentLengthUncompressed);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.server_name.
|
||||||
|
*
|
||||||
|
* @param httpServerName The primary server name of the matched virtual host. This should be
|
||||||
|
* obtained via configuration. If no such configuration can be obtained, this attribute MUST
|
||||||
|
* NOT be set ( `net.host.name` should be used instead).
|
||||||
|
* <p>http.url is usually not readily available on the server side but would have to be
|
||||||
|
* assembled in a cumbersome and sometimes lossy process from other information (see e.g.
|
||||||
|
* open-telemetry/opentelemetry-python/pull/148). It is thus preferred to supply the raw
|
||||||
|
* data that is available.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpServerName(String httpServerName) {
|
||||||
|
internalBuilder.setAttribute("http.server_name", httpServerName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.route.
|
||||||
|
*
|
||||||
|
* @param httpRoute The matched route (path template).
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpRoute(String httpRoute) {
|
||||||
|
internalBuilder.setAttribute("http.route", httpRoute);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets http.client_ip.
|
||||||
|
*
|
||||||
|
* @param httpClientIp The IP address of the original client behind all proxies, if known (e.g.
|
||||||
|
* from
|
||||||
|
* [X-Forwarded-For](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For)).
|
||||||
|
* <p>This is not necessarily the same as `net.peer.ip`, which would identify the
|
||||||
|
* network-level peer, which may be a proxy.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setHttpClientIp(String httpClientIp) {
|
||||||
|
internalBuilder.setAttribute("http.client_ip", httpClientIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.transport.
|
||||||
|
*
|
||||||
|
* @param netTransport Transport protocol used. See note below.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setNetTransport(String netTransport) {
|
||||||
|
internalBuilder.setAttribute("net.transport", netTransport);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.ip.
|
||||||
|
*
|
||||||
|
* @param netPeerIp Remote address of the peer (dotted decimal for IPv4 or
|
||||||
|
* [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6).
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setNetPeerIp(String netPeerIp) {
|
||||||
|
internalBuilder.setAttribute("net.peer.ip", netPeerIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.port.
|
||||||
|
*
|
||||||
|
* @param netPeerPort Remote port number.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setNetPeerPort(long netPeerPort) {
|
||||||
|
internalBuilder.setAttribute("net.peer.port", netPeerPort);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.name.
|
||||||
|
*
|
||||||
|
* @param netPeerName Remote hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setNetPeerName(String netPeerName) {
|
||||||
|
internalBuilder.setAttribute("net.peer.name", netPeerName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.ip.
|
||||||
|
*
|
||||||
|
* @param netHostIp Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setNetHostIp(String netHostIp) {
|
||||||
|
internalBuilder.setAttribute("net.host.ip", netHostIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.port.
|
||||||
|
*
|
||||||
|
* @param netHostPort Like `net.peer.port` but for the host port.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setNetHostPort(long netHostPort) {
|
||||||
|
internalBuilder.setAttribute("net.host.port", netHostPort);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.name.
|
||||||
|
*
|
||||||
|
* @param netHostName Local hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
public FaasHttpSpanBuilder setNetHostName(String netHostName) {
|
||||||
|
internalBuilder.setAttribute("net.host.name", netHostName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,174 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
|
||||||
|
public interface FaasPubsubSemanticConvention {
|
||||||
|
void end();
|
||||||
|
|
||||||
|
Span getSpan();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.trigger
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setFaasTrigger(String faasTrigger);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.execution
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setFaasExecution(String faasExecution);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.system
|
||||||
|
*
|
||||||
|
* @param messagingSystem A string identifying the messaging system.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingSystem(String messagingSystem);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.destination
|
||||||
|
*
|
||||||
|
* @param messagingDestination The message destination name. This might be equal to the span name
|
||||||
|
* but is required nevertheless.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingDestination(String messagingDestination);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.destination_kind
|
||||||
|
*
|
||||||
|
* @param messagingDestinationKind The kind of message destination.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingDestinationKind(String messagingDestinationKind);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.temp_destination
|
||||||
|
*
|
||||||
|
* @param messagingTempDestination A boolean that is true if the message destination is temporary.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingTempDestination(boolean messagingTempDestination);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.protocol
|
||||||
|
*
|
||||||
|
* @param messagingProtocol The name of the transport protocol.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingProtocol(String messagingProtocol);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.protocol_version
|
||||||
|
*
|
||||||
|
* @param messagingProtocolVersion The version of the transport protocol.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingProtocolVersion(String messagingProtocolVersion);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.url
|
||||||
|
*
|
||||||
|
* @param messagingUrl Connection string.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingUrl(String messagingUrl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.message_id
|
||||||
|
*
|
||||||
|
* @param messagingMessageId A value used by the messaging system as an identifier for the
|
||||||
|
* message, represented as a string.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingMessageId(String messagingMessageId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.conversation_id
|
||||||
|
*
|
||||||
|
* @param messagingConversationId A value identifying the conversation to which the message
|
||||||
|
* belongs, represented as a string. Sometimes called "Correlation ID".
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingConversationId(String messagingConversationId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.message_payload_size_bytes
|
||||||
|
*
|
||||||
|
* @param messagingMessagePayloadSizeBytes The (uncompressed) size of the message payload in
|
||||||
|
* bytes. Also use this attribute if it is unknown whether the compressed or uncompressed
|
||||||
|
* payload size is reported.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingMessagePayloadSizeBytes(
|
||||||
|
long messagingMessagePayloadSizeBytes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for messaging.message_payload_compressed_size_bytes
|
||||||
|
*
|
||||||
|
* @param messagingMessagePayloadCompressedSizeBytes The compressed size of the message payload in
|
||||||
|
* bytes.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setMessagingMessagePayloadCompressedSizeBytes(
|
||||||
|
long messagingMessagePayloadCompressedSizeBytes);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.peer.port
|
||||||
|
*
|
||||||
|
* @param netPeerPort Remote port number.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setNetPeerPort(long netPeerPort);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.transport
|
||||||
|
*
|
||||||
|
* @param netTransport Strongly recommended for in-process queueing systems.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setNetTransport(String netTransport);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.peer.ip
|
||||||
|
*
|
||||||
|
* @param netPeerIp Remote address of the peer (dotted decimal for IPv4 or
|
||||||
|
* [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6).
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setNetPeerIp(String netPeerIp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.peer.name
|
||||||
|
*
|
||||||
|
* @param netPeerName Remote hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setNetPeerName(String netPeerName);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.host.ip
|
||||||
|
*
|
||||||
|
* @param netHostIp Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setNetHostIp(String netHostIp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.host.port
|
||||||
|
*
|
||||||
|
* @param netHostPort Like `net.peer.port` but for the host port.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setNetHostPort(long netHostPort);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for net.host.name
|
||||||
|
*
|
||||||
|
* @param netHostName Local hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
FaasPubsubSemanticConvention setNetHostName(String netHostName);
|
||||||
|
}
|
|
@ -0,0 +1,550 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
import io.opentelemetry.trace.SpanContext;
|
||||||
|
import io.opentelemetry.trace.Tracer;
|
||||||
|
|
||||||
|
public class FaasPubsubSpan extends DelegatingSpan implements FaasPubsubSemanticConvention {
|
||||||
|
|
||||||
|
protected FaasPubsubSpan(Span span) {
|
||||||
|
super(span);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry point to generate a {@link FaasPubsubSpan}.
|
||||||
|
*
|
||||||
|
* @param tracer Tracer to use
|
||||||
|
* @param spanName Name for the {@link Span}
|
||||||
|
* @return a {@link FaasPubsubSpan} object.
|
||||||
|
*/
|
||||||
|
public static FaasPubsubSpanBuilder createFaasPubsubSpan(Tracer tracer, String spanName) {
|
||||||
|
return new FaasPubsubSpanBuilder(tracer, spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FaasPubsubSpan} from a {@link FaasSpanSpan}.
|
||||||
|
*
|
||||||
|
* @param builder {@link FaasSpanSpan.FaasSpanSpanBuilder} to use.
|
||||||
|
* @return a {@link FaasPubsubSpan} object built from a {@link FaasSpanSpan}.
|
||||||
|
*/
|
||||||
|
public static FaasPubsubSpanBuilder createFaasPubsubSpan(
|
||||||
|
FaasSpanSpan.FaasSpanSpanBuilder builder) {
|
||||||
|
// we accept a builder from FaasSpan since FaasPubsub "extends" FaasSpan
|
||||||
|
return new FaasPubsubSpanBuilder(builder.getSpanBuilder());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return the Span used internally */
|
||||||
|
@Override
|
||||||
|
public Span getSpan() {
|
||||||
|
return this.delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Terminates the Span. Here there is the checking for required attributes. */
|
||||||
|
@Override
|
||||||
|
public void end() {
|
||||||
|
delegate.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setFaasTrigger(String faasTrigger) {
|
||||||
|
delegate.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setFaasExecution(String faasExecution) {
|
||||||
|
delegate.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.system.
|
||||||
|
*
|
||||||
|
* @param messagingSystem A string identifying the messaging system.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingSystem(String messagingSystem) {
|
||||||
|
delegate.setAttribute("messaging.system", messagingSystem);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.destination.
|
||||||
|
*
|
||||||
|
* @param messagingDestination The message destination name. This might be equal to the span name
|
||||||
|
* but is required nevertheless.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingDestination(String messagingDestination) {
|
||||||
|
delegate.setAttribute("messaging.destination", messagingDestination);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.destination_kind.
|
||||||
|
*
|
||||||
|
* @param messagingDestinationKind The kind of message destination.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingDestinationKind(String messagingDestinationKind) {
|
||||||
|
delegate.setAttribute("messaging.destination_kind", messagingDestinationKind);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.temp_destination.
|
||||||
|
*
|
||||||
|
* @param messagingTempDestination A boolean that is true if the message destination is temporary.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingTempDestination(
|
||||||
|
boolean messagingTempDestination) {
|
||||||
|
delegate.setAttribute("messaging.temp_destination", messagingTempDestination);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.protocol.
|
||||||
|
*
|
||||||
|
* @param messagingProtocol The name of the transport protocol.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingProtocol(String messagingProtocol) {
|
||||||
|
delegate.setAttribute("messaging.protocol", messagingProtocol);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.protocol_version.
|
||||||
|
*
|
||||||
|
* @param messagingProtocolVersion The version of the transport protocol.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingProtocolVersion(String messagingProtocolVersion) {
|
||||||
|
delegate.setAttribute("messaging.protocol_version", messagingProtocolVersion);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.url.
|
||||||
|
*
|
||||||
|
* @param messagingUrl Connection string.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingUrl(String messagingUrl) {
|
||||||
|
delegate.setAttribute("messaging.url", messagingUrl);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.message_id.
|
||||||
|
*
|
||||||
|
* @param messagingMessageId A value used by the messaging system as an identifier for the
|
||||||
|
* message, represented as a string.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingMessageId(String messagingMessageId) {
|
||||||
|
delegate.setAttribute("messaging.message_id", messagingMessageId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.conversation_id.
|
||||||
|
*
|
||||||
|
* @param messagingConversationId A value identifying the conversation to which the message
|
||||||
|
* belongs, represented as a string. Sometimes called "Correlation ID".
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingConversationId(String messagingConversationId) {
|
||||||
|
delegate.setAttribute("messaging.conversation_id", messagingConversationId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.message_payload_size_bytes.
|
||||||
|
*
|
||||||
|
* @param messagingMessagePayloadSizeBytes The (uncompressed) size of the message payload in
|
||||||
|
* bytes. Also use this attribute if it is unknown whether the compressed or uncompressed
|
||||||
|
* payload size is reported.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingMessagePayloadSizeBytes(
|
||||||
|
long messagingMessagePayloadSizeBytes) {
|
||||||
|
delegate.setAttribute("messaging.message_payload_size_bytes", messagingMessagePayloadSizeBytes);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.message_payload_compressed_size_bytes.
|
||||||
|
*
|
||||||
|
* @param messagingMessagePayloadCompressedSizeBytes The compressed size of the message payload in
|
||||||
|
* bytes.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setMessagingMessagePayloadCompressedSizeBytes(
|
||||||
|
long messagingMessagePayloadCompressedSizeBytes) {
|
||||||
|
delegate.setAttribute(
|
||||||
|
"messaging.message_payload_compressed_size_bytes",
|
||||||
|
messagingMessagePayloadCompressedSizeBytes);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.port.
|
||||||
|
*
|
||||||
|
* @param netPeerPort Remote port number.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setNetPeerPort(long netPeerPort) {
|
||||||
|
delegate.setAttribute("net.peer.port", netPeerPort);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.transport.
|
||||||
|
*
|
||||||
|
* @param netTransport Strongly recommended for in-process queueing systems.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setNetTransport(String netTransport) {
|
||||||
|
delegate.setAttribute("net.transport", netTransport);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.ip.
|
||||||
|
*
|
||||||
|
* @param netPeerIp Remote address of the peer (dotted decimal for IPv4 or
|
||||||
|
* [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setNetPeerIp(String netPeerIp) {
|
||||||
|
delegate.setAttribute("net.peer.ip", netPeerIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.name.
|
||||||
|
*
|
||||||
|
* @param netPeerName Remote hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setNetPeerName(String netPeerName) {
|
||||||
|
delegate.setAttribute("net.peer.name", netPeerName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.ip.
|
||||||
|
*
|
||||||
|
* @param netHostIp Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setNetHostIp(String netHostIp) {
|
||||||
|
delegate.setAttribute("net.host.ip", netHostIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.port.
|
||||||
|
*
|
||||||
|
* @param netHostPort Like `net.peer.port` but for the host port.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setNetHostPort(long netHostPort) {
|
||||||
|
delegate.setAttribute("net.host.port", netHostPort);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.name.
|
||||||
|
*
|
||||||
|
* @param netHostName Local hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasPubsubSemanticConvention setNetHostName(String netHostName) {
|
||||||
|
delegate.setAttribute("net.host.name", netHostName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builder class for {@link FaasPubsubSpan}. */
|
||||||
|
public static class FaasPubsubSpanBuilder {
|
||||||
|
// Protected because maybe we want to extend manually these classes
|
||||||
|
protected Span.Builder internalBuilder;
|
||||||
|
|
||||||
|
protected FaasPubsubSpanBuilder(Tracer tracer, String spanName) {
|
||||||
|
internalBuilder = tracer.spanBuilder(spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FaasPubsubSpanBuilder(Span.Builder spanBuilder) {
|
||||||
|
this.internalBuilder = spanBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Span.Builder getSpanBuilder() {
|
||||||
|
return this.internalBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasPubsubSpanBuilder setParent(Span parent) {
|
||||||
|
this.internalBuilder.setParent(parent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasPubsubSpanBuilder setParent(SpanContext remoteParent) {
|
||||||
|
this.internalBuilder.setParent(remoteParent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** this method sets the type of the {@link Span} is only available in the builder. */
|
||||||
|
public FaasPubsubSpanBuilder setKind(Span.Kind kind) {
|
||||||
|
internalBuilder.setSpanKind(kind);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** starts the span */
|
||||||
|
public FaasPubsubSpan start() {
|
||||||
|
// check for sampling relevant field here, but there are none.
|
||||||
|
return new FaasPubsubSpan(this.internalBuilder.startSpan());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setFaasTrigger(String faasTrigger) {
|
||||||
|
internalBuilder.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setFaasExecution(String faasExecution) {
|
||||||
|
internalBuilder.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.system.
|
||||||
|
*
|
||||||
|
* @param messagingSystem A string identifying the messaging system.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingSystem(String messagingSystem) {
|
||||||
|
internalBuilder.setAttribute("messaging.system", messagingSystem);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.destination.
|
||||||
|
*
|
||||||
|
* @param messagingDestination The message destination name. This might be equal to the span
|
||||||
|
* name but is required nevertheless.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingDestination(String messagingDestination) {
|
||||||
|
internalBuilder.setAttribute("messaging.destination", messagingDestination);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.destination_kind.
|
||||||
|
*
|
||||||
|
* @param messagingDestinationKind The kind of message destination.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingDestinationKind(String messagingDestinationKind) {
|
||||||
|
internalBuilder.setAttribute("messaging.destination_kind", messagingDestinationKind);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.temp_destination.
|
||||||
|
*
|
||||||
|
* @param messagingTempDestination A boolean that is true if the message destination is
|
||||||
|
* temporary.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingTempDestination(boolean messagingTempDestination) {
|
||||||
|
internalBuilder.setAttribute("messaging.temp_destination", messagingTempDestination);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.protocol.
|
||||||
|
*
|
||||||
|
* @param messagingProtocol The name of the transport protocol.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingProtocol(String messagingProtocol) {
|
||||||
|
internalBuilder.setAttribute("messaging.protocol", messagingProtocol);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.protocol_version.
|
||||||
|
*
|
||||||
|
* @param messagingProtocolVersion The version of the transport protocol.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingProtocolVersion(String messagingProtocolVersion) {
|
||||||
|
internalBuilder.setAttribute("messaging.protocol_version", messagingProtocolVersion);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.url.
|
||||||
|
*
|
||||||
|
* @param messagingUrl Connection string.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingUrl(String messagingUrl) {
|
||||||
|
internalBuilder.setAttribute("messaging.url", messagingUrl);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.message_id.
|
||||||
|
*
|
||||||
|
* @param messagingMessageId A value used by the messaging system as an identifier for the
|
||||||
|
* message, represented as a string.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingMessageId(String messagingMessageId) {
|
||||||
|
internalBuilder.setAttribute("messaging.message_id", messagingMessageId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.conversation_id.
|
||||||
|
*
|
||||||
|
* @param messagingConversationId A value identifying the conversation to which the message
|
||||||
|
* belongs, represented as a string. Sometimes called "Correlation ID".
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingConversationId(String messagingConversationId) {
|
||||||
|
internalBuilder.setAttribute("messaging.conversation_id", messagingConversationId);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.message_payload_size_bytes.
|
||||||
|
*
|
||||||
|
* @param messagingMessagePayloadSizeBytes The (uncompressed) size of the message payload in
|
||||||
|
* bytes. Also use this attribute if it is unknown whether the compressed or uncompressed
|
||||||
|
* payload size is reported.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingMessagePayloadSizeBytes(
|
||||||
|
long messagingMessagePayloadSizeBytes) {
|
||||||
|
internalBuilder.setAttribute(
|
||||||
|
"messaging.message_payload_size_bytes", messagingMessagePayloadSizeBytes);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets messaging.message_payload_compressed_size_bytes.
|
||||||
|
*
|
||||||
|
* @param messagingMessagePayloadCompressedSizeBytes The compressed size of the message payload
|
||||||
|
* in bytes.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setMessagingMessagePayloadCompressedSizeBytes(
|
||||||
|
long messagingMessagePayloadCompressedSizeBytes) {
|
||||||
|
internalBuilder.setAttribute(
|
||||||
|
"messaging.message_payload_compressed_size_bytes",
|
||||||
|
messagingMessagePayloadCompressedSizeBytes);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.port.
|
||||||
|
*
|
||||||
|
* @param netPeerPort Remote port number.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setNetPeerPort(long netPeerPort) {
|
||||||
|
internalBuilder.setAttribute("net.peer.port", netPeerPort);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.transport.
|
||||||
|
*
|
||||||
|
* @param netTransport Strongly recommended for in-process queueing systems.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setNetTransport(String netTransport) {
|
||||||
|
internalBuilder.setAttribute("net.transport", netTransport);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.ip.
|
||||||
|
*
|
||||||
|
* @param netPeerIp Remote address of the peer (dotted decimal for IPv4 or
|
||||||
|
* [RFC5952](https://tools.ietf.org/html/rfc5952) for IPv6).
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setNetPeerIp(String netPeerIp) {
|
||||||
|
internalBuilder.setAttribute("net.peer.ip", netPeerIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.peer.name.
|
||||||
|
*
|
||||||
|
* @param netPeerName Remote hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setNetPeerName(String netPeerName) {
|
||||||
|
internalBuilder.setAttribute("net.peer.name", netPeerName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.ip.
|
||||||
|
*
|
||||||
|
* @param netHostIp Like `net.peer.ip` but for the host IP. Useful in case of a multi-IP host.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setNetHostIp(String netHostIp) {
|
||||||
|
internalBuilder.setAttribute("net.host.ip", netHostIp);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.port.
|
||||||
|
*
|
||||||
|
* @param netHostPort Like `net.peer.port` but for the host port.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setNetHostPort(long netHostPort) {
|
||||||
|
internalBuilder.setAttribute("net.host.port", netHostPort);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets net.host.name.
|
||||||
|
*
|
||||||
|
* @param netHostName Local hostname or similar, see note below.
|
||||||
|
*/
|
||||||
|
public FaasPubsubSpanBuilder setNetHostName(String netHostName) {
|
||||||
|
internalBuilder.setAttribute("net.host.name", netHostName);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
|
||||||
|
public interface FaasSpanSemanticConvention {
|
||||||
|
void end();
|
||||||
|
|
||||||
|
Span getSpan();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.trigger
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
FaasSpanSemanticConvention setFaasTrigger(String faasTrigger);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.execution
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
FaasSpanSemanticConvention setFaasExecution(String faasExecution);
|
||||||
|
}
|
|
@ -0,0 +1,135 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
import io.opentelemetry.trace.SpanContext;
|
||||||
|
import io.opentelemetry.trace.Tracer;
|
||||||
|
|
||||||
|
public class FaasSpanSpan extends DelegatingSpan implements FaasSpanSemanticConvention {
|
||||||
|
|
||||||
|
protected FaasSpanSpan(Span span) {
|
||||||
|
super(span);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry point to generate a {@link FaasSpanSpan}.
|
||||||
|
*
|
||||||
|
* @param tracer Tracer to use
|
||||||
|
* @param spanName Name for the {@link Span}
|
||||||
|
* @return a {@link FaasSpanSpan} object.
|
||||||
|
*/
|
||||||
|
public static FaasSpanSpanBuilder createFaasSpanSpan(Tracer tracer, String spanName) {
|
||||||
|
return new FaasSpanSpanBuilder(tracer, spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return the Span used internally */
|
||||||
|
@Override
|
||||||
|
public Span getSpan() {
|
||||||
|
return this.delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Terminates the Span. Here there is the checking for required attributes. */
|
||||||
|
@Override
|
||||||
|
public void end() {
|
||||||
|
delegate.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasSpanSemanticConvention setFaasTrigger(String faasTrigger) {
|
||||||
|
delegate.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasSpanSemanticConvention setFaasExecution(String faasExecution) {
|
||||||
|
delegate.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builder class for {@link FaasSpanSpan}. */
|
||||||
|
public static class FaasSpanSpanBuilder {
|
||||||
|
// Protected because maybe we want to extend manually these classes
|
||||||
|
protected Span.Builder internalBuilder;
|
||||||
|
|
||||||
|
protected FaasSpanSpanBuilder(Tracer tracer, String spanName) {
|
||||||
|
internalBuilder = tracer.spanBuilder(spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FaasSpanSpanBuilder(Span.Builder spanBuilder) {
|
||||||
|
this.internalBuilder = spanBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Span.Builder getSpanBuilder() {
|
||||||
|
return this.internalBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasSpanSpanBuilder setParent(Span parent) {
|
||||||
|
this.internalBuilder.setParent(parent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasSpanSpanBuilder setParent(SpanContext remoteParent) {
|
||||||
|
this.internalBuilder.setParent(remoteParent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** this method sets the type of the {@link Span} is only available in the builder. */
|
||||||
|
public FaasSpanSpanBuilder setKind(Span.Kind kind) {
|
||||||
|
internalBuilder.setSpanKind(kind);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** starts the span */
|
||||||
|
public FaasSpanSpan start() {
|
||||||
|
// check for sampling relevant field here, but there are none.
|
||||||
|
return new FaasSpanSpan(this.internalBuilder.startSpan());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
public FaasSpanSpanBuilder setFaasTrigger(String faasTrigger) {
|
||||||
|
internalBuilder.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
public FaasSpanSpanBuilder setFaasExecution(String faasExecution) {
|
||||||
|
internalBuilder.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
|
||||||
|
public interface FaasTimerSemanticConvention {
|
||||||
|
void end();
|
||||||
|
|
||||||
|
Span getSpan();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.trigger
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
FaasTimerSemanticConvention setFaasTrigger(String faasTrigger);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.execution
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
FaasTimerSemanticConvention setFaasExecution(String faasExecution);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.time
|
||||||
|
*
|
||||||
|
* @param faasTime A string containing the function invocation time in the [ISO
|
||||||
|
* 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in
|
||||||
|
* [UTC](https://www.w3.org/TR/NOTE-datetime).
|
||||||
|
*/
|
||||||
|
FaasTimerSemanticConvention setFaasTime(String faasTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a value for faas.cron
|
||||||
|
*
|
||||||
|
* @param faasCron A string containing the schedule period as [Cron
|
||||||
|
* Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).
|
||||||
|
*/
|
||||||
|
FaasTimerSemanticConvention setFaasCron(String faasCron);
|
||||||
|
}
|
|
@ -0,0 +1,194 @@
|
||||||
|
/*
|
||||||
|
* Copyright The OpenTelemetry Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.opentelemetry.auto.typedspan;
|
||||||
|
|
||||||
|
import io.opentelemetry.trace.Span;
|
||||||
|
import io.opentelemetry.trace.SpanContext;
|
||||||
|
import io.opentelemetry.trace.Tracer;
|
||||||
|
|
||||||
|
public class FaasTimerSpan extends DelegatingSpan implements FaasTimerSemanticConvention {
|
||||||
|
|
||||||
|
protected FaasTimerSpan(Span span) {
|
||||||
|
super(span);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Entry point to generate a {@link FaasTimerSpan}.
|
||||||
|
*
|
||||||
|
* @param tracer Tracer to use
|
||||||
|
* @param spanName Name for the {@link Span}
|
||||||
|
* @return a {@link FaasTimerSpan} object.
|
||||||
|
*/
|
||||||
|
public static FaasTimerSpanBuilder createFaasTimerSpan(Tracer tracer, String spanName) {
|
||||||
|
return new FaasTimerSpanBuilder(tracer, spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a {@link FaasTimerSpan} from a {@link FaasSpanSpan}.
|
||||||
|
*
|
||||||
|
* @param builder {@link FaasSpanSpan.FaasSpanSpanBuilder} to use.
|
||||||
|
* @return a {@link FaasTimerSpan} object built from a {@link FaasSpanSpan}.
|
||||||
|
*/
|
||||||
|
public static FaasTimerSpanBuilder createFaasTimerSpan(FaasSpanSpan.FaasSpanSpanBuilder builder) {
|
||||||
|
// we accept a builder from FaasSpan since FaasTimer "extends" FaasSpan
|
||||||
|
return new FaasTimerSpanBuilder(builder.getSpanBuilder());
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @return the Span used internally */
|
||||||
|
@Override
|
||||||
|
public Span getSpan() {
|
||||||
|
return this.delegate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Terminates the Span. Here there is the checking for required attributes. */
|
||||||
|
@Override
|
||||||
|
public void end() {
|
||||||
|
delegate.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasTimerSemanticConvention setFaasTrigger(String faasTrigger) {
|
||||||
|
delegate.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasTimerSemanticConvention setFaasExecution(String faasExecution) {
|
||||||
|
delegate.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.time.
|
||||||
|
*
|
||||||
|
* @param faasTime A string containing the function invocation time in the [ISO
|
||||||
|
* 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in
|
||||||
|
* [UTC](https://www.w3.org/TR/NOTE-datetime).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasTimerSemanticConvention setFaasTime(String faasTime) {
|
||||||
|
delegate.setAttribute("faas.time", faasTime);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.cron.
|
||||||
|
*
|
||||||
|
* @param faasCron A string containing the schedule period as [Cron
|
||||||
|
* Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public FaasTimerSemanticConvention setFaasCron(String faasCron) {
|
||||||
|
delegate.setAttribute("faas.cron", faasCron);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Builder class for {@link FaasTimerSpan}. */
|
||||||
|
public static class FaasTimerSpanBuilder {
|
||||||
|
// Protected because maybe we want to extend manually these classes
|
||||||
|
protected Span.Builder internalBuilder;
|
||||||
|
|
||||||
|
protected FaasTimerSpanBuilder(Tracer tracer, String spanName) {
|
||||||
|
internalBuilder = tracer.spanBuilder(spanName);
|
||||||
|
}
|
||||||
|
|
||||||
|
public FaasTimerSpanBuilder(Span.Builder spanBuilder) {
|
||||||
|
this.internalBuilder = spanBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Span.Builder getSpanBuilder() {
|
||||||
|
return this.internalBuilder;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasTimerSpanBuilder setParent(Span parent) {
|
||||||
|
this.internalBuilder.setParent(parent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** sets the {@link Span} parent. */
|
||||||
|
public FaasTimerSpanBuilder setParent(SpanContext remoteParent) {
|
||||||
|
this.internalBuilder.setParent(remoteParent);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** this method sets the type of the {@link Span} is only available in the builder. */
|
||||||
|
public FaasTimerSpanBuilder setKind(Span.Kind kind) {
|
||||||
|
internalBuilder.setSpanKind(kind);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** starts the span */
|
||||||
|
public FaasTimerSpan start() {
|
||||||
|
// check for sampling relevant field here, but there are none.
|
||||||
|
return new FaasTimerSpan(this.internalBuilder.startSpan());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.trigger.
|
||||||
|
*
|
||||||
|
* @param faasTrigger Type of the trigger on which the function is executed.
|
||||||
|
*/
|
||||||
|
public FaasTimerSpanBuilder setFaasTrigger(String faasTrigger) {
|
||||||
|
internalBuilder.setAttribute("faas.trigger", faasTrigger);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.execution.
|
||||||
|
*
|
||||||
|
* @param faasExecution The execution id of the current function execution.
|
||||||
|
*/
|
||||||
|
public FaasTimerSpanBuilder setFaasExecution(String faasExecution) {
|
||||||
|
internalBuilder.setAttribute("faas.execution", faasExecution);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.time.
|
||||||
|
*
|
||||||
|
* @param faasTime A string containing the function invocation time in the [ISO
|
||||||
|
* 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format expressed in
|
||||||
|
* [UTC](https://www.w3.org/TR/NOTE-datetime).
|
||||||
|
*/
|
||||||
|
public FaasTimerSpanBuilder setFaasTime(String faasTime) {
|
||||||
|
internalBuilder.setAttribute("faas.time", faasTime);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets faas.cron.
|
||||||
|
*
|
||||||
|
* @param faasCron A string containing the schedule period as [Cron
|
||||||
|
* Expression](https://docs.oracle.com/cd/E12058_01/doc/doc.1014/e12030/cron_expressions.htm).
|
||||||
|
*/
|
||||||
|
public FaasTimerSpanBuilder setFaasCron(String faasCron) {
|
||||||
|
internalBuilder.setAttribute("faas.cron", faasCron);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue