Add Database Typed Spans (#781)

This commit is contained in:
Giovanni Liva 2020-07-28 21:08:57 +02:00 committed by GitHub
parent 44fcf8115b
commit dcbfecd2c6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
15 changed files with 3152 additions and 2 deletions

View File

@ -0,0 +1,124 @@
/*
* 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 DbCassandraSemanticConvention {
void end();
Span getSpan();
/**
* Sets a value for db.system
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers..
*/
public DbCassandraSemanticConvention setDbSystem(String dbSystem);
/**
* Sets a value for db.connection_string
*
* @param dbConnectionString The connection string used to connect to the database..
* <p>It is recommended to remove embedded credentials.
*/
public DbCassandraSemanticConvention setDbConnectionString(String dbConnectionString);
/**
* Sets a value for db.user
*
* @param dbUser Username for accessing the database..
*/
public DbCassandraSemanticConvention setDbUser(String dbUser);
/**
* Sets a value for db.jdbc.driver_classname
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect..
*/
public DbCassandraSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname);
/**
* Sets a value for db.name
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails)..
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbCassandraSemanticConvention setDbName(String dbName);
/**
* Sets a value for db.statement
*
* @param dbStatement The database statement being executed..
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbCassandraSemanticConvention setDbStatement(String dbStatement);
/**
* Sets a value for db.operation
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`..
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
public DbCassandraSemanticConvention setDbOperation(String dbOperation);
/**
* Sets a value for net.peer.name
*
* @param netPeerName Remote hostname or similar, see note below..
*/
public DbCassandraSemanticConvention setNetPeerName(String netPeerName);
/**
* 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).
*/
public DbCassandraSemanticConvention setNetPeerIp(String netPeerIp);
/**
* Sets a value for net.peer.port
*
* @param netPeerPort Remote port number..
*/
public DbCassandraSemanticConvention setNetPeerPort(long netPeerPort);
/**
* Sets a value for net.transport
*
* @param netTransport Transport protocol used. See note below..
*/
public DbCassandraSemanticConvention setNetTransport(String netTransport);
/**
* Sets a value for db.cassandra.keyspace
*
* @param dbCassandraKeyspace The name of the keyspace being accessed. To be used instead of the
* generic `db.name` attribute..
*/
public DbCassandraSemanticConvention setDbCassandraKeyspace(String dbCassandraKeyspace);
}

View File

@ -0,0 +1,386 @@
/*
* 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 DbCassandraSpan extends DelegatingSpan implements DbCassandraSemanticConvention {
protected DbCassandraSpan(Span span) {
super(span);
}
/**
* Entry point to generate a {@link DbCassandraSpan}.
*
* @param tracer Tracer to use
* @param spanName Name for the {@link Span}
* @return a {@link DbCassandraSpan} object.
*/
public static DbCassandraSpanBuilder createDbCassandraSpan(Tracer tracer, String spanName) {
return new DbCassandraSpanBuilder(tracer, spanName);
}
/**
* Creates a {@link DbCassandraSpan} from a {@link DbSpan}.
*
* @param builder {@link DbSpan.DbSpanBuilder} to use.
* @return a {@link DbCassandraSpan} object built from a {@link DbSpan}.
*/
public static DbCassandraSpanBuilder createDbCassandraSpan(DbSpan.DbSpanBuilder builder) {
// we accept a builder from Db since DbCassandra "extends" Db
return new DbCassandraSpanBuilder(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 db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers.
*/
@Override
public DbCassandraSemanticConvention setDbSystem(String dbSystem) {
delegate.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
@Override
public DbCassandraSemanticConvention setDbConnectionString(String dbConnectionString) {
delegate.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
@Override
public DbCassandraSemanticConvention setDbUser(String dbUser) {
delegate.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect.
*/
@Override
public DbCassandraSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
delegate.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
@Override
public DbCassandraSemanticConvention setDbName(String dbName) {
delegate.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
@Override
public DbCassandraSemanticConvention setDbStatement(String dbStatement) {
delegate.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
@Override
public DbCassandraSemanticConvention setDbOperation(String dbOperation) {
delegate.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
@Override
public DbCassandraSemanticConvention setNetPeerName(String netPeerName) {
delegate.setAttribute("net.peer.name", netPeerName);
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 DbCassandraSemanticConvention setNetPeerIp(String netPeerIp) {
delegate.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
@Override
public DbCassandraSemanticConvention setNetPeerPort(long netPeerPort) {
delegate.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
@Override
public DbCassandraSemanticConvention setNetTransport(String netTransport) {
delegate.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.cassandra.keyspace.
*
* @param dbCassandraKeyspace The name of the keyspace being accessed. To be used instead of the
* generic `db.name` attribute.
*/
@Override
public DbCassandraSemanticConvention setDbCassandraKeyspace(String dbCassandraKeyspace) {
delegate.setAttribute("db.cassandra.keyspace", dbCassandraKeyspace);
return this;
}
/** Builder class for {@link DbCassandraSpan}. */
public static class DbCassandraSpanBuilder {
// Protected because maybe we want to extend manually these classes
protected Span.Builder internalBuilder;
protected DbCassandraSpanBuilder(Tracer tracer, String spanName) {
internalBuilder = tracer.spanBuilder(spanName);
}
public DbCassandraSpanBuilder(Span.Builder spanBuilder) {
this.internalBuilder = spanBuilder;
}
public Span.Builder getSpanBuilder() {
return this.internalBuilder;
}
/** sets the {@link Span} parent. */
public DbCassandraSpanBuilder setParent(Span parent) {
this.internalBuilder.setParent(parent);
return this;
}
/** sets the {@link Span} parent. */
public DbCassandraSpanBuilder 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 DbCassandraSpanBuilder setKind(Span.Kind kind) {
internalBuilder.setSpanKind(kind);
return this;
}
/** starts the span */
public DbCassandraSpan start() {
// check for sampling relevant field here, but there are none.
return new DbCassandraSpan(this.internalBuilder.startSpan());
}
/**
* Sets db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used.
* See below for a list of well-known identifiers.
*/
public DbCassandraSpanBuilder setDbSystem(String dbSystem) {
internalBuilder.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
public DbCassandraSpanBuilder setDbConnectionString(String dbConnectionString) {
internalBuilder.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
public DbCassandraSpanBuilder setDbUser(String dbUser) {
internalBuilder.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database
* Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver
* used to connect.
*/
public DbCassandraSpanBuilder setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
internalBuilder.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should
* be set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbCassandraSpanBuilder setDbName(String dbName) {
internalBuilder.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbCassandraSpanBuilder setDbStatement(String dbStatement) {
internalBuilder.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like
* `SELECT` or `INSERT`, it is not recommended to attempt any client-side parsing of
* `db.statement` just to get this property (the back end can do that if required).
*/
public DbCassandraSpanBuilder setDbOperation(String dbOperation) {
internalBuilder.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
public DbCassandraSpanBuilder setNetPeerName(String netPeerName) {
internalBuilder.setAttribute("net.peer.name", netPeerName);
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 DbCassandraSpanBuilder setNetPeerIp(String netPeerIp) {
internalBuilder.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
public DbCassandraSpanBuilder setNetPeerPort(long netPeerPort) {
internalBuilder.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
public DbCassandraSpanBuilder setNetTransport(String netTransport) {
internalBuilder.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.cassandra.keyspace.
*
* @param dbCassandraKeyspace The name of the keyspace being accessed. To be used instead of the
* generic `db.name` attribute.
*/
public DbCassandraSpanBuilder setDbCassandraKeyspace(String dbCassandraKeyspace) {
internalBuilder.setAttribute("db.cassandra.keyspace", dbCassandraKeyspace);
return this;
}
}
}

View File

@ -0,0 +1,124 @@
/*
* 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 DbHbaseSemanticConvention {
void end();
Span getSpan();
/**
* Sets a value for db.system
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers..
*/
public DbHbaseSemanticConvention setDbSystem(String dbSystem);
/**
* Sets a value for db.connection_string
*
* @param dbConnectionString The connection string used to connect to the database..
* <p>It is recommended to remove embedded credentials.
*/
public DbHbaseSemanticConvention setDbConnectionString(String dbConnectionString);
/**
* Sets a value for db.user
*
* @param dbUser Username for accessing the database..
*/
public DbHbaseSemanticConvention setDbUser(String dbUser);
/**
* Sets a value for db.jdbc.driver_classname
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect..
*/
public DbHbaseSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname);
/**
* Sets a value for db.name
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails)..
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbHbaseSemanticConvention setDbName(String dbName);
/**
* Sets a value for db.statement
*
* @param dbStatement The database statement being executed..
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbHbaseSemanticConvention setDbStatement(String dbStatement);
/**
* Sets a value for db.operation
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`..
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
public DbHbaseSemanticConvention setDbOperation(String dbOperation);
/**
* Sets a value for net.peer.name
*
* @param netPeerName Remote hostname or similar, see note below..
*/
public DbHbaseSemanticConvention setNetPeerName(String netPeerName);
/**
* 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).
*/
public DbHbaseSemanticConvention setNetPeerIp(String netPeerIp);
/**
* Sets a value for net.peer.port
*
* @param netPeerPort Remote port number..
*/
public DbHbaseSemanticConvention setNetPeerPort(long netPeerPort);
/**
* Sets a value for net.transport
*
* @param netTransport Transport protocol used. See note below..
*/
public DbHbaseSemanticConvention setNetTransport(String netTransport);
/**
* Sets a value for db.hbase.namespace
*
* @param dbHbaseNamespace The [HBase namespace](https://hbase.apache.org/book.html#_namespace)
* being accessed. To be used instead of the generic `db.name` attribute..
*/
public DbHbaseSemanticConvention setDbHbaseNamespace(String dbHbaseNamespace);
}

View File

@ -0,0 +1,386 @@
/*
* 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 DbHbaseSpan extends DelegatingSpan implements DbHbaseSemanticConvention {
protected DbHbaseSpan(Span span) {
super(span);
}
/**
* Entry point to generate a {@link DbHbaseSpan}.
*
* @param tracer Tracer to use
* @param spanName Name for the {@link Span}
* @return a {@link DbHbaseSpan} object.
*/
public static DbHbaseSpanBuilder createDbHbaseSpan(Tracer tracer, String spanName) {
return new DbHbaseSpanBuilder(tracer, spanName);
}
/**
* Creates a {@link DbHbaseSpan} from a {@link DbSpan}.
*
* @param builder {@link DbSpan.DbSpanBuilder} to use.
* @return a {@link DbHbaseSpan} object built from a {@link DbSpan}.
*/
public static DbHbaseSpanBuilder createDbHbaseSpan(DbSpan.DbSpanBuilder builder) {
// we accept a builder from Db since DbHbase "extends" Db
return new DbHbaseSpanBuilder(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 db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers.
*/
@Override
public DbHbaseSemanticConvention setDbSystem(String dbSystem) {
delegate.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
@Override
public DbHbaseSemanticConvention setDbConnectionString(String dbConnectionString) {
delegate.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
@Override
public DbHbaseSemanticConvention setDbUser(String dbUser) {
delegate.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect.
*/
@Override
public DbHbaseSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
delegate.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
@Override
public DbHbaseSemanticConvention setDbName(String dbName) {
delegate.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
@Override
public DbHbaseSemanticConvention setDbStatement(String dbStatement) {
delegate.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
@Override
public DbHbaseSemanticConvention setDbOperation(String dbOperation) {
delegate.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
@Override
public DbHbaseSemanticConvention setNetPeerName(String netPeerName) {
delegate.setAttribute("net.peer.name", netPeerName);
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 DbHbaseSemanticConvention setNetPeerIp(String netPeerIp) {
delegate.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
@Override
public DbHbaseSemanticConvention setNetPeerPort(long netPeerPort) {
delegate.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
@Override
public DbHbaseSemanticConvention setNetTransport(String netTransport) {
delegate.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.hbase.namespace.
*
* @param dbHbaseNamespace The [HBase namespace](https://hbase.apache.org/book.html#_namespace)
* being accessed. To be used instead of the generic `db.name` attribute.
*/
@Override
public DbHbaseSemanticConvention setDbHbaseNamespace(String dbHbaseNamespace) {
delegate.setAttribute("db.hbase.namespace", dbHbaseNamespace);
return this;
}
/** Builder class for {@link DbHbaseSpan}. */
public static class DbHbaseSpanBuilder {
// Protected because maybe we want to extend manually these classes
protected Span.Builder internalBuilder;
protected DbHbaseSpanBuilder(Tracer tracer, String spanName) {
internalBuilder = tracer.spanBuilder(spanName);
}
public DbHbaseSpanBuilder(Span.Builder spanBuilder) {
this.internalBuilder = spanBuilder;
}
public Span.Builder getSpanBuilder() {
return this.internalBuilder;
}
/** sets the {@link Span} parent. */
public DbHbaseSpanBuilder setParent(Span parent) {
this.internalBuilder.setParent(parent);
return this;
}
/** sets the {@link Span} parent. */
public DbHbaseSpanBuilder 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 DbHbaseSpanBuilder setKind(Span.Kind kind) {
internalBuilder.setSpanKind(kind);
return this;
}
/** starts the span */
public DbHbaseSpan start() {
// check for sampling relevant field here, but there are none.
return new DbHbaseSpan(this.internalBuilder.startSpan());
}
/**
* Sets db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used.
* See below for a list of well-known identifiers.
*/
public DbHbaseSpanBuilder setDbSystem(String dbSystem) {
internalBuilder.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
public DbHbaseSpanBuilder setDbConnectionString(String dbConnectionString) {
internalBuilder.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
public DbHbaseSpanBuilder setDbUser(String dbUser) {
internalBuilder.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database
* Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver
* used to connect.
*/
public DbHbaseSpanBuilder setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
internalBuilder.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should
* be set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbHbaseSpanBuilder setDbName(String dbName) {
internalBuilder.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbHbaseSpanBuilder setDbStatement(String dbStatement) {
internalBuilder.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like
* `SELECT` or `INSERT`, it is not recommended to attempt any client-side parsing of
* `db.statement` just to get this property (the back end can do that if required).
*/
public DbHbaseSpanBuilder setDbOperation(String dbOperation) {
internalBuilder.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
public DbHbaseSpanBuilder setNetPeerName(String netPeerName) {
internalBuilder.setAttribute("net.peer.name", netPeerName);
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 DbHbaseSpanBuilder setNetPeerIp(String netPeerIp) {
internalBuilder.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
public DbHbaseSpanBuilder setNetPeerPort(long netPeerPort) {
internalBuilder.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
public DbHbaseSpanBuilder setNetTransport(String netTransport) {
internalBuilder.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.hbase.namespace.
*
* @param dbHbaseNamespace The [HBase namespace](https://hbase.apache.org/book.html#_namespace)
* being accessed. To be used instead of the generic `db.name` attribute.
*/
public DbHbaseSpanBuilder setDbHbaseNamespace(String dbHbaseNamespace) {
internalBuilder.setAttribute("db.hbase.namespace", dbHbaseNamespace);
return this;
}
}
}

View File

@ -0,0 +1,124 @@
/*
* 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 DbMongodbSemanticConvention {
void end();
Span getSpan();
/**
* Sets a value for db.system
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers..
*/
public DbMongodbSemanticConvention setDbSystem(String dbSystem);
/**
* Sets a value for db.connection_string
*
* @param dbConnectionString The connection string used to connect to the database..
* <p>It is recommended to remove embedded credentials.
*/
public DbMongodbSemanticConvention setDbConnectionString(String dbConnectionString);
/**
* Sets a value for db.user
*
* @param dbUser Username for accessing the database..
*/
public DbMongodbSemanticConvention setDbUser(String dbUser);
/**
* Sets a value for db.jdbc.driver_classname
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect..
*/
public DbMongodbSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname);
/**
* Sets a value for db.name
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails)..
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbMongodbSemanticConvention setDbName(String dbName);
/**
* Sets a value for db.statement
*
* @param dbStatement The database statement being executed..
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbMongodbSemanticConvention setDbStatement(String dbStatement);
/**
* Sets a value for db.operation
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`..
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
public DbMongodbSemanticConvention setDbOperation(String dbOperation);
/**
* Sets a value for net.peer.name
*
* @param netPeerName Remote hostname or similar, see note below..
*/
public DbMongodbSemanticConvention setNetPeerName(String netPeerName);
/**
* 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).
*/
public DbMongodbSemanticConvention setNetPeerIp(String netPeerIp);
/**
* Sets a value for net.peer.port
*
* @param netPeerPort Remote port number..
*/
public DbMongodbSemanticConvention setNetPeerPort(long netPeerPort);
/**
* Sets a value for net.transport
*
* @param netTransport Transport protocol used. See note below..
*/
public DbMongodbSemanticConvention setNetTransport(String netTransport);
/**
* Sets a value for db.mongodb.collection
*
* @param dbMongodbCollection The collection being accessed within the database stated in
* `db.name`..
*/
public DbMongodbSemanticConvention setDbMongodbCollection(String dbMongodbCollection);
}

View File

@ -0,0 +1,386 @@
/*
* 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 DbMongodbSpan extends DelegatingSpan implements DbMongodbSemanticConvention {
protected DbMongodbSpan(Span span) {
super(span);
}
/**
* Entry point to generate a {@link DbMongodbSpan}.
*
* @param tracer Tracer to use
* @param spanName Name for the {@link Span}
* @return a {@link DbMongodbSpan} object.
*/
public static DbMongodbSpanBuilder createDbMongodbSpan(Tracer tracer, String spanName) {
return new DbMongodbSpanBuilder(tracer, spanName);
}
/**
* Creates a {@link DbMongodbSpan} from a {@link DbSpan}.
*
* @param builder {@link DbSpan.DbSpanBuilder} to use.
* @return a {@link DbMongodbSpan} object built from a {@link DbSpan}.
*/
public static DbMongodbSpanBuilder createDbMongodbSpan(DbSpan.DbSpanBuilder builder) {
// we accept a builder from Db since DbMongodb "extends" Db
return new DbMongodbSpanBuilder(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 db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers.
*/
@Override
public DbMongodbSemanticConvention setDbSystem(String dbSystem) {
delegate.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
@Override
public DbMongodbSemanticConvention setDbConnectionString(String dbConnectionString) {
delegate.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
@Override
public DbMongodbSemanticConvention setDbUser(String dbUser) {
delegate.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect.
*/
@Override
public DbMongodbSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
delegate.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
@Override
public DbMongodbSemanticConvention setDbName(String dbName) {
delegate.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
@Override
public DbMongodbSemanticConvention setDbStatement(String dbStatement) {
delegate.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
@Override
public DbMongodbSemanticConvention setDbOperation(String dbOperation) {
delegate.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
@Override
public DbMongodbSemanticConvention setNetPeerName(String netPeerName) {
delegate.setAttribute("net.peer.name", netPeerName);
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 DbMongodbSemanticConvention setNetPeerIp(String netPeerIp) {
delegate.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
@Override
public DbMongodbSemanticConvention setNetPeerPort(long netPeerPort) {
delegate.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
@Override
public DbMongodbSemanticConvention setNetTransport(String netTransport) {
delegate.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.mongodb.collection.
*
* @param dbMongodbCollection The collection being accessed within the database stated in
* `db.name`.
*/
@Override
public DbMongodbSemanticConvention setDbMongodbCollection(String dbMongodbCollection) {
delegate.setAttribute("db.mongodb.collection", dbMongodbCollection);
return this;
}
/** Builder class for {@link DbMongodbSpan}. */
public static class DbMongodbSpanBuilder {
// Protected because maybe we want to extend manually these classes
protected Span.Builder internalBuilder;
protected DbMongodbSpanBuilder(Tracer tracer, String spanName) {
internalBuilder = tracer.spanBuilder(spanName);
}
public DbMongodbSpanBuilder(Span.Builder spanBuilder) {
this.internalBuilder = spanBuilder;
}
public Span.Builder getSpanBuilder() {
return this.internalBuilder;
}
/** sets the {@link Span} parent. */
public DbMongodbSpanBuilder setParent(Span parent) {
this.internalBuilder.setParent(parent);
return this;
}
/** sets the {@link Span} parent. */
public DbMongodbSpanBuilder 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 DbMongodbSpanBuilder setKind(Span.Kind kind) {
internalBuilder.setSpanKind(kind);
return this;
}
/** starts the span */
public DbMongodbSpan start() {
// check for sampling relevant field here, but there are none.
return new DbMongodbSpan(this.internalBuilder.startSpan());
}
/**
* Sets db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used.
* See below for a list of well-known identifiers.
*/
public DbMongodbSpanBuilder setDbSystem(String dbSystem) {
internalBuilder.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
public DbMongodbSpanBuilder setDbConnectionString(String dbConnectionString) {
internalBuilder.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
public DbMongodbSpanBuilder setDbUser(String dbUser) {
internalBuilder.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database
* Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver
* used to connect.
*/
public DbMongodbSpanBuilder setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
internalBuilder.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should
* be set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbMongodbSpanBuilder setDbName(String dbName) {
internalBuilder.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbMongodbSpanBuilder setDbStatement(String dbStatement) {
internalBuilder.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like
* `SELECT` or `INSERT`, it is not recommended to attempt any client-side parsing of
* `db.statement` just to get this property (the back end can do that if required).
*/
public DbMongodbSpanBuilder setDbOperation(String dbOperation) {
internalBuilder.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
public DbMongodbSpanBuilder setNetPeerName(String netPeerName) {
internalBuilder.setAttribute("net.peer.name", netPeerName);
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 DbMongodbSpanBuilder setNetPeerIp(String netPeerIp) {
internalBuilder.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
public DbMongodbSpanBuilder setNetPeerPort(long netPeerPort) {
internalBuilder.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
public DbMongodbSpanBuilder setNetTransport(String netTransport) {
internalBuilder.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.mongodb.collection.
*
* @param dbMongodbCollection The collection being accessed within the database stated in
* `db.name`.
*/
public DbMongodbSpanBuilder setDbMongodbCollection(String dbMongodbCollection) {
internalBuilder.setAttribute("db.mongodb.collection", dbMongodbCollection);
return this;
}
}
}

View File

@ -0,0 +1,127 @@
/*
* 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 DbMssqlSemanticConvention {
void end();
Span getSpan();
/**
* Sets a value for db.system
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers..
*/
public DbMssqlSemanticConvention setDbSystem(String dbSystem);
/**
* Sets a value for db.connection_string
*
* @param dbConnectionString The connection string used to connect to the database..
* <p>It is recommended to remove embedded credentials.
*/
public DbMssqlSemanticConvention setDbConnectionString(String dbConnectionString);
/**
* Sets a value for db.user
*
* @param dbUser Username for accessing the database..
*/
public DbMssqlSemanticConvention setDbUser(String dbUser);
/**
* Sets a value for db.jdbc.driver_classname
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect..
*/
public DbMssqlSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname);
/**
* Sets a value for db.name
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails)..
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbMssqlSemanticConvention setDbName(String dbName);
/**
* Sets a value for db.statement
*
* @param dbStatement The database statement being executed..
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbMssqlSemanticConvention setDbStatement(String dbStatement);
/**
* Sets a value for db.operation
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`..
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
public DbMssqlSemanticConvention setDbOperation(String dbOperation);
/**
* Sets a value for net.peer.name
*
* @param netPeerName Remote hostname or similar, see note below..
*/
public DbMssqlSemanticConvention setNetPeerName(String netPeerName);
/**
* 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).
*/
public DbMssqlSemanticConvention setNetPeerIp(String netPeerIp);
/**
* Sets a value for net.peer.port
*
* @param netPeerPort Remote port number..
*/
public DbMssqlSemanticConvention setNetPeerPort(long netPeerPort);
/**
* Sets a value for net.transport
*
* @param netTransport Transport protocol used. See note below..
*/
public DbMssqlSemanticConvention setNetTransport(String netTransport);
/**
* Sets a value for db.mssql.instance_name
*
* @param dbMssqlInstanceName The Microsoft SQL Server [instance
* name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15)
* connecting to. This name is used to determine the port of a named instance..
* <p>If setting a `db.mssql.instance_name`, `net.peer.port` is no longer required (but still
* recommended if non-standard).
*/
public DbMssqlSemanticConvention setDbMssqlInstanceName(String dbMssqlInstanceName);
}

View File

@ -0,0 +1,392 @@
/*
* 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 DbMssqlSpan extends DelegatingSpan implements DbMssqlSemanticConvention {
protected DbMssqlSpan(Span span) {
super(span);
}
/**
* Entry point to generate a {@link DbMssqlSpan}.
*
* @param tracer Tracer to use
* @param spanName Name for the {@link Span}
* @return a {@link DbMssqlSpan} object.
*/
public static DbMssqlSpanBuilder createDbMssqlSpan(Tracer tracer, String spanName) {
return new DbMssqlSpanBuilder(tracer, spanName);
}
/**
* Creates a {@link DbMssqlSpan} from a {@link DbSpan}.
*
* @param builder {@link DbSpan.DbSpanBuilder} to use.
* @return a {@link DbMssqlSpan} object built from a {@link DbSpan}.
*/
public static DbMssqlSpanBuilder createDbMssqlSpan(DbSpan.DbSpanBuilder builder) {
// we accept a builder from Db since DbMssql "extends" Db
return new DbMssqlSpanBuilder(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 db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers.
*/
@Override
public DbMssqlSemanticConvention setDbSystem(String dbSystem) {
delegate.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
@Override
public DbMssqlSemanticConvention setDbConnectionString(String dbConnectionString) {
delegate.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
@Override
public DbMssqlSemanticConvention setDbUser(String dbUser) {
delegate.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect.
*/
@Override
public DbMssqlSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
delegate.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
@Override
public DbMssqlSemanticConvention setDbName(String dbName) {
delegate.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
@Override
public DbMssqlSemanticConvention setDbStatement(String dbStatement) {
delegate.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
@Override
public DbMssqlSemanticConvention setDbOperation(String dbOperation) {
delegate.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
@Override
public DbMssqlSemanticConvention setNetPeerName(String netPeerName) {
delegate.setAttribute("net.peer.name", netPeerName);
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 DbMssqlSemanticConvention setNetPeerIp(String netPeerIp) {
delegate.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
@Override
public DbMssqlSemanticConvention setNetPeerPort(long netPeerPort) {
delegate.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
@Override
public DbMssqlSemanticConvention setNetTransport(String netTransport) {
delegate.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.mssql.instance_name.
*
* @param dbMssqlInstanceName The Microsoft SQL Server [instance
* name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15)
* connecting to. This name is used to determine the port of a named instance.
* <p>If setting a `db.mssql.instance_name`, `net.peer.port` is no longer required (but still
* recommended if non-standard).
*/
@Override
public DbMssqlSemanticConvention setDbMssqlInstanceName(String dbMssqlInstanceName) {
delegate.setAttribute("db.mssql.instance_name", dbMssqlInstanceName);
return this;
}
/** Builder class for {@link DbMssqlSpan}. */
public static class DbMssqlSpanBuilder {
// Protected because maybe we want to extend manually these classes
protected Span.Builder internalBuilder;
protected DbMssqlSpanBuilder(Tracer tracer, String spanName) {
internalBuilder = tracer.spanBuilder(spanName);
}
public DbMssqlSpanBuilder(Span.Builder spanBuilder) {
this.internalBuilder = spanBuilder;
}
public Span.Builder getSpanBuilder() {
return this.internalBuilder;
}
/** sets the {@link Span} parent. */
public DbMssqlSpanBuilder setParent(Span parent) {
this.internalBuilder.setParent(parent);
return this;
}
/** sets the {@link Span} parent. */
public DbMssqlSpanBuilder 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 DbMssqlSpanBuilder setKind(Span.Kind kind) {
internalBuilder.setSpanKind(kind);
return this;
}
/** starts the span */
public DbMssqlSpan start() {
// check for sampling relevant field here, but there are none.
return new DbMssqlSpan(this.internalBuilder.startSpan());
}
/**
* Sets db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used.
* See below for a list of well-known identifiers.
*/
public DbMssqlSpanBuilder setDbSystem(String dbSystem) {
internalBuilder.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
public DbMssqlSpanBuilder setDbConnectionString(String dbConnectionString) {
internalBuilder.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
public DbMssqlSpanBuilder setDbUser(String dbUser) {
internalBuilder.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database
* Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver
* used to connect.
*/
public DbMssqlSpanBuilder setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
internalBuilder.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should
* be set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbMssqlSpanBuilder setDbName(String dbName) {
internalBuilder.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbMssqlSpanBuilder setDbStatement(String dbStatement) {
internalBuilder.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like
* `SELECT` or `INSERT`, it is not recommended to attempt any client-side parsing of
* `db.statement` just to get this property (the back end can do that if required).
*/
public DbMssqlSpanBuilder setDbOperation(String dbOperation) {
internalBuilder.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
public DbMssqlSpanBuilder setNetPeerName(String netPeerName) {
internalBuilder.setAttribute("net.peer.name", netPeerName);
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 DbMssqlSpanBuilder setNetPeerIp(String netPeerIp) {
internalBuilder.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
public DbMssqlSpanBuilder setNetPeerPort(long netPeerPort) {
internalBuilder.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
public DbMssqlSpanBuilder setNetTransport(String netTransport) {
internalBuilder.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.mssql.instance_name.
*
* @param dbMssqlInstanceName The Microsoft SQL Server [instance
* name](https://docs.microsoft.com/en-us/sql/connect/jdbc/building-the-connection-url?view=sql-server-ver15)
* connecting to. This name is used to determine the port of a named instance.
* <p>If setting a `db.mssql.instance_name`, `net.peer.port` is no longer required (but
* still recommended if non-standard).
*/
public DbMssqlSpanBuilder setDbMssqlInstanceName(String dbMssqlInstanceName) {
internalBuilder.setAttribute("db.mssql.instance_name", dbMssqlInstanceName);
return this;
}
}
}

View File

@ -0,0 +1,125 @@
/*
* 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 DbRedisSemanticConvention {
void end();
Span getSpan();
/**
* Sets a value for db.system
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers..
*/
public DbRedisSemanticConvention setDbSystem(String dbSystem);
/**
* Sets a value for db.connection_string
*
* @param dbConnectionString The connection string used to connect to the database..
* <p>It is recommended to remove embedded credentials.
*/
public DbRedisSemanticConvention setDbConnectionString(String dbConnectionString);
/**
* Sets a value for db.user
*
* @param dbUser Username for accessing the database..
*/
public DbRedisSemanticConvention setDbUser(String dbUser);
/**
* Sets a value for db.jdbc.driver_classname
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect..
*/
public DbRedisSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname);
/**
* Sets a value for db.name
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails)..
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbRedisSemanticConvention setDbName(String dbName);
/**
* Sets a value for db.statement
*
* @param dbStatement The database statement being executed..
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbRedisSemanticConvention setDbStatement(String dbStatement);
/**
* Sets a value for db.operation
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`..
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
public DbRedisSemanticConvention setDbOperation(String dbOperation);
/**
* Sets a value for net.peer.name
*
* @param netPeerName Remote hostname or similar, see note below..
*/
public DbRedisSemanticConvention setNetPeerName(String netPeerName);
/**
* 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).
*/
public DbRedisSemanticConvention setNetPeerIp(String netPeerIp);
/**
* Sets a value for net.peer.port
*
* @param netPeerPort Remote port number..
*/
public DbRedisSemanticConvention setNetPeerPort(long netPeerPort);
/**
* Sets a value for net.transport
*
* @param netTransport Transport protocol used. See note below..
*/
public DbRedisSemanticConvention setNetTransport(String netTransport);
/**
* Sets a value for db.redis.database_index
*
* @param dbRedisDatabaseIndex The index of the database being accessed as used in the [`SELECT`
* command](https://redis.io/commands/select), provided as an integer. To be used instead of
* the generic `db.name` attribute..
*/
public DbRedisSemanticConvention setDbRedisDatabaseIndex(long dbRedisDatabaseIndex);
}

View File

@ -0,0 +1,388 @@
/*
* 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 DbRedisSpan extends DelegatingSpan implements DbRedisSemanticConvention {
protected DbRedisSpan(Span span) {
super(span);
}
/**
* Entry point to generate a {@link DbRedisSpan}.
*
* @param tracer Tracer to use
* @param spanName Name for the {@link Span}
* @return a {@link DbRedisSpan} object.
*/
public static DbRedisSpanBuilder createDbRedisSpan(Tracer tracer, String spanName) {
return new DbRedisSpanBuilder(tracer, spanName);
}
/**
* Creates a {@link DbRedisSpan} from a {@link DbSpan}.
*
* @param builder {@link DbSpan.DbSpanBuilder} to use.
* @return a {@link DbRedisSpan} object built from a {@link DbSpan}.
*/
public static DbRedisSpanBuilder createDbRedisSpan(DbSpan.DbSpanBuilder builder) {
// we accept a builder from Db since DbRedis "extends" Db
return new DbRedisSpanBuilder(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 db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers.
*/
@Override
public DbRedisSemanticConvention setDbSystem(String dbSystem) {
delegate.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
@Override
public DbRedisSemanticConvention setDbConnectionString(String dbConnectionString) {
delegate.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
@Override
public DbRedisSemanticConvention setDbUser(String dbUser) {
delegate.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect.
*/
@Override
public DbRedisSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
delegate.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
@Override
public DbRedisSemanticConvention setDbName(String dbName) {
delegate.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
@Override
public DbRedisSemanticConvention setDbStatement(String dbStatement) {
delegate.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
@Override
public DbRedisSemanticConvention setDbOperation(String dbOperation) {
delegate.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
@Override
public DbRedisSemanticConvention setNetPeerName(String netPeerName) {
delegate.setAttribute("net.peer.name", netPeerName);
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 DbRedisSemanticConvention setNetPeerIp(String netPeerIp) {
delegate.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
@Override
public DbRedisSemanticConvention setNetPeerPort(long netPeerPort) {
delegate.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
@Override
public DbRedisSemanticConvention setNetTransport(String netTransport) {
delegate.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.redis.database_index.
*
* @param dbRedisDatabaseIndex The index of the database being accessed as used in the [`SELECT`
* command](https://redis.io/commands/select), provided as an integer. To be used instead of
* the generic `db.name` attribute.
*/
@Override
public DbRedisSemanticConvention setDbRedisDatabaseIndex(long dbRedisDatabaseIndex) {
delegate.setAttribute("db.redis.database_index", dbRedisDatabaseIndex);
return this;
}
/** Builder class for {@link DbRedisSpan}. */
public static class DbRedisSpanBuilder {
// Protected because maybe we want to extend manually these classes
protected Span.Builder internalBuilder;
protected DbRedisSpanBuilder(Tracer tracer, String spanName) {
internalBuilder = tracer.spanBuilder(spanName);
}
public DbRedisSpanBuilder(Span.Builder spanBuilder) {
this.internalBuilder = spanBuilder;
}
public Span.Builder getSpanBuilder() {
return this.internalBuilder;
}
/** sets the {@link Span} parent. */
public DbRedisSpanBuilder setParent(Span parent) {
this.internalBuilder.setParent(parent);
return this;
}
/** sets the {@link Span} parent. */
public DbRedisSpanBuilder 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 DbRedisSpanBuilder setKind(Span.Kind kind) {
internalBuilder.setSpanKind(kind);
return this;
}
/** starts the span */
public DbRedisSpan start() {
// check for sampling relevant field here, but there are none.
return new DbRedisSpan(this.internalBuilder.startSpan());
}
/**
* Sets db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used.
* See below for a list of well-known identifiers.
*/
public DbRedisSpanBuilder setDbSystem(String dbSystem) {
internalBuilder.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
public DbRedisSpanBuilder setDbConnectionString(String dbConnectionString) {
internalBuilder.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
public DbRedisSpanBuilder setDbUser(String dbUser) {
internalBuilder.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database
* Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver
* used to connect.
*/
public DbRedisSpanBuilder setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
internalBuilder.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should
* be set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbRedisSpanBuilder setDbName(String dbName) {
internalBuilder.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbRedisSpanBuilder setDbStatement(String dbStatement) {
internalBuilder.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like
* `SELECT` or `INSERT`, it is not recommended to attempt any client-side parsing of
* `db.statement` just to get this property (the back end can do that if required).
*/
public DbRedisSpanBuilder setDbOperation(String dbOperation) {
internalBuilder.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
public DbRedisSpanBuilder setNetPeerName(String netPeerName) {
internalBuilder.setAttribute("net.peer.name", netPeerName);
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 DbRedisSpanBuilder setNetPeerIp(String netPeerIp) {
internalBuilder.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
public DbRedisSpanBuilder setNetPeerPort(long netPeerPort) {
internalBuilder.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
public DbRedisSpanBuilder setNetTransport(String netTransport) {
internalBuilder.setAttribute("net.transport", netTransport);
return this;
}
/**
* Sets db.redis.database_index.
*
* @param dbRedisDatabaseIndex The index of the database being accessed as used in the [`SELECT`
* command](https://redis.io/commands/select), provided as an integer. To be used instead of
* the generic `db.name` attribute.
*/
public DbRedisSpanBuilder setDbRedisDatabaseIndex(long dbRedisDatabaseIndex) {
internalBuilder.setAttribute("db.redis.database_index", dbRedisDatabaseIndex);
return this;
}
}
}

View File

@ -0,0 +1,116 @@
/*
* 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 DbSemanticConvention {
void end();
Span getSpan();
/**
* Sets a value for db.system
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers..
*/
public DbSemanticConvention setDbSystem(String dbSystem);
/**
* Sets a value for db.connection_string
*
* @param dbConnectionString The connection string used to connect to the database..
* <p>It is recommended to remove embedded credentials.
*/
public DbSemanticConvention setDbConnectionString(String dbConnectionString);
/**
* Sets a value for db.user
*
* @param dbUser Username for accessing the database..
*/
public DbSemanticConvention setDbUser(String dbUser);
/**
* Sets a value for db.jdbc.driver_classname
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect..
*/
public DbSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname);
/**
* Sets a value for db.name
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails)..
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbSemanticConvention setDbName(String dbName);
/**
* Sets a value for db.statement
*
* @param dbStatement The database statement being executed..
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbSemanticConvention setDbStatement(String dbStatement);
/**
* Sets a value for db.operation
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`..
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
public DbSemanticConvention setDbOperation(String dbOperation);
/**
* Sets a value for net.peer.name
*
* @param netPeerName Remote hostname or similar, see note below..
*/
public DbSemanticConvention setNetPeerName(String netPeerName);
/**
* 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).
*/
public DbSemanticConvention setNetPeerIp(String netPeerIp);
/**
* Sets a value for net.peer.port
*
* @param netPeerPort Remote port number..
*/
public DbSemanticConvention setNetPeerPort(long netPeerPort);
/**
* Sets a value for net.transport
*
* @param netTransport Transport protocol used. See note below..
*/
public DbSemanticConvention setNetTransport(String netTransport);
}

View File

@ -0,0 +1,352 @@
/*
* 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 DbSpan extends DelegatingSpan implements DbSemanticConvention {
protected DbSpan(Span span) {
super(span);
}
/**
* Entry point to generate a {@link DbSpan}.
*
* @param tracer Tracer to use
* @param spanName Name for the {@link Span}
* @return a {@link DbSpan} object.
*/
public static DbSpanBuilder createDbSpan(Tracer tracer, String spanName) {
return new DbSpanBuilder(tracer, spanName).setKind(Span.Kind.CLIENT);
}
/** @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 db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used. See
* below for a list of well-known identifiers.
*/
@Override
public DbSemanticConvention setDbSystem(String dbSystem) {
delegate.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
@Override
public DbSemanticConvention setDbConnectionString(String dbConnectionString) {
delegate.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
@Override
public DbSemanticConvention setDbUser(String dbUser) {
delegate.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database Connectivity
* (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver used to
* connect.
*/
@Override
public DbSemanticConvention setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
delegate.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should be
* set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
@Override
public DbSemanticConvention setDbName(String dbName) {
delegate.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
@Override
public DbSemanticConvention setDbStatement(String dbStatement) {
delegate.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like `SELECT`
* or `INSERT`, it is not recommended to attempt any client-side parsing of `db.statement`
* just to get this property (the back end can do that if required).
*/
@Override
public DbSemanticConvention setDbOperation(String dbOperation) {
delegate.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
@Override
public DbSemanticConvention setNetPeerName(String netPeerName) {
delegate.setAttribute("net.peer.name", netPeerName);
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 DbSemanticConvention setNetPeerIp(String netPeerIp) {
delegate.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
@Override
public DbSemanticConvention setNetPeerPort(long netPeerPort) {
delegate.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
@Override
public DbSemanticConvention setNetTransport(String netTransport) {
delegate.setAttribute("net.transport", netTransport);
return this;
}
/** Builder class for {@link DbSpan}. */
public static class DbSpanBuilder {
// Protected because maybe we want to extend manually these classes
protected Span.Builder internalBuilder;
protected DbSpanBuilder(Tracer tracer, String spanName) {
internalBuilder = tracer.spanBuilder(spanName);
}
public DbSpanBuilder(Span.Builder spanBuilder) {
this.internalBuilder = spanBuilder;
}
public Span.Builder getSpanBuilder() {
return this.internalBuilder;
}
/** sets the {@link Span} parent. */
public DbSpanBuilder setParent(Span parent) {
this.internalBuilder.setParent(parent);
return this;
}
/** sets the {@link Span} parent. */
public DbSpanBuilder 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 DbSpanBuilder setKind(Span.Kind kind) {
internalBuilder.setSpanKind(kind);
return this;
}
/** starts the span */
public DbSpan start() {
// check for sampling relevant field here, but there are none.
return new DbSpan(this.internalBuilder.startSpan());
}
/**
* Sets db.system.
*
* @param dbSystem An identifier for the database management system (DBMS) product being used.
* See below for a list of well-known identifiers.
*/
public DbSpanBuilder setDbSystem(String dbSystem) {
internalBuilder.setAttribute("db.system", dbSystem);
return this;
}
/**
* Sets db.connection_string.
*
* @param dbConnectionString The connection string used to connect to the database.
* <p>It is recommended to remove embedded credentials.
*/
public DbSpanBuilder setDbConnectionString(String dbConnectionString) {
internalBuilder.setAttribute("db.connection_string", dbConnectionString);
return this;
}
/**
* Sets db.user.
*
* @param dbUser Username for accessing the database.
*/
public DbSpanBuilder setDbUser(String dbUser) {
internalBuilder.setAttribute("db.user", dbUser);
return this;
}
/**
* Sets db.jdbc.driver_classname.
*
* @param dbJdbcDriverClassname The fully-qualified class name of the [Java Database
* Connectivity (JDBC)](https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/) driver
* used to connect.
*/
public DbSpanBuilder setDbJdbcDriverClassname(String dbJdbcDriverClassname) {
internalBuilder.setAttribute("db.jdbc.driver_classname", dbJdbcDriverClassname);
return this;
}
/**
* Sets db.name.
*
* @param dbName If no tech-specific attribute is defined, this attribute is used to report the
* name of the database being accessed. For commands that switch the database, this should
* be set to the target database (even if the command fails).
* <p>In some SQL databases, the database name to be used is called &#34;schema name&#34;.
*/
public DbSpanBuilder setDbName(String dbName) {
internalBuilder.setAttribute("db.name", dbName);
return this;
}
/**
* Sets db.statement.
*
* @param dbStatement The database statement being executed.
* <p>The value may be sanitized to exclude sensitive information.
*/
public DbSpanBuilder setDbStatement(String dbStatement) {
internalBuilder.setAttribute("db.statement", dbStatement);
return this;
}
/**
* Sets db.operation.
*
* @param dbOperation The name of the operation being executed, e.g. the [MongoDB command
* name](https://docs.mongodb.com/manual/reference/command/#database-operations) such as
* `findAndModify`.
* <p>While it would semantically make sense to set this, e.g., to a SQL keyword like
* `SELECT` or `INSERT`, it is not recommended to attempt any client-side parsing of
* `db.statement` just to get this property (the back end can do that if required).
*/
public DbSpanBuilder setDbOperation(String dbOperation) {
internalBuilder.setAttribute("db.operation", dbOperation);
return this;
}
/**
* Sets net.peer.name.
*
* @param netPeerName Remote hostname or similar, see note below.
*/
public DbSpanBuilder setNetPeerName(String netPeerName) {
internalBuilder.setAttribute("net.peer.name", netPeerName);
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 DbSpanBuilder setNetPeerIp(String netPeerIp) {
internalBuilder.setAttribute("net.peer.ip", netPeerIp);
return this;
}
/**
* Sets net.peer.port.
*
* @param netPeerPort Remote port number.
*/
public DbSpanBuilder setNetPeerPort(long netPeerPort) {
internalBuilder.setAttribute("net.peer.port", netPeerPort);
return this;
}
/**
* Sets net.transport.
*
* @param netTransport Transport protocol used. See note below.
*/
public DbSpanBuilder setNetTransport(String netTransport) {
internalBuilder.setAttribute("net.transport", netTransport);
return this;
}
}
}

View File

@ -0,0 +1,118 @@
/*
* 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.common.AttributeValue;
import io.opentelemetry.common.Attributes;
import io.opentelemetry.trace.EndSpanOptions;
import io.opentelemetry.trace.Event;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.SpanContext;
import io.opentelemetry.trace.Status;
public class DelegatingSpan implements Span {
protected final Span delegate;
public DelegatingSpan(final Span delegate) {
this.delegate = delegate;
}
@Override
public void setAttribute(final String key, final String value) {
delegate.setAttribute(key, value);
}
@Override
public void setAttribute(final String key, final long value) {
delegate.setAttribute(key, value);
}
@Override
public void setAttribute(final String key, final double value) {
delegate.setAttribute(key, value);
}
@Override
public void setAttribute(final String key, final boolean value) {
delegate.setAttribute(key, value);
}
@Override
public void setAttribute(final String key, final AttributeValue value) {
delegate.setAttribute(key, value);
}
@Override
public void addEvent(final String name) {
delegate.addEvent(name);
}
@Override
public void addEvent(final String name, final long timestamp) {
delegate.addEvent(name, timestamp);
}
@Override
public void addEvent(String name, Attributes attributes) {
delegate.addEvent(name, attributes);
}
@Override
public void addEvent(String name, Attributes attributes, long timestamp) {
delegate.addEvent(name, attributes, timestamp);
}
@Override
public void addEvent(final Event event) {
delegate.addEvent(event);
}
@Override
public void addEvent(final Event event, final long timestamp) {
delegate.addEvent(event, timestamp);
}
@Override
public void setStatus(final Status status) {
delegate.setStatus(status);
}
@Override
public void updateName(final String name) {
delegate.updateName(name);
}
@Override
public void end() {
delegate.end();
}
@Override
public void end(final EndSpanOptions endOptions) {
delegate.end(endOptions);
}
@Override
public SpanContext getContext() {
return delegate.getContext();
}
@Override
public boolean isRecording() {
return delegate.isRecording();
}
}

View File

@ -35,7 +35,8 @@ public final class Constants {
"io.opentelemetry.auto.config",
"io.opentelemetry.auto.bootstrap",
"io.opentelemetry.auto.instrumentation.api",
"io.opentelemetry.auto.shaded"
"io.opentelemetry.auto.shaded",
"io.opentelemetry.auto.typedspan",
};
// This is used in IntegrationTestUtils.java

View File

@ -52,7 +52,8 @@ public class SpockRunner extends Sputnik {
"io.opentelemetry.auto.config",
"io.opentelemetry.auto.bootstrap",
"io.opentelemetry.auto.instrumentation.api",
"io.opentelemetry.auto.shaded"
"io.opentelemetry.auto.shaded",
"io.opentelemetry.auto.typedspan",
};
private static final String[] TEST_BOOTSTRAP_PREFIXES;