Skip to content

Commit

Permalink
chore(instrumentation-pg): have @opentelemetry/semantic-conventions
Browse files Browse the repository at this point in the history
… package dependency with caret (`^`) version to sync with other instrumentation packages (#2664)

Refs: #2599 (similar work)
  • Loading branch information
serkan-ozal authored Jan 17, 2025
1 parent 4cf7e6f commit 4fb610d
Show file tree
Hide file tree
Showing 7 changed files with 107 additions and 20 deletions.
17 changes: 2 additions & 15 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion plugins/node/opentelemetry-instrumentation-pg/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
"dependencies": {
"@opentelemetry/core": "^1.26.0",
"@opentelemetry/instrumentation": "^0.57.0",
"@opentelemetry/semantic-conventions": "1.27.0",
"@opentelemetry/semantic-conventions": "^1.27.0",
"@opentelemetry/sql-common": "^0.40.1",
"@types/pg": "8.6.1",
"@types/pg-pool": "2.0.6"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ import {
METRIC_DB_CLIENT_OPERATION_DURATION,
ATTR_DB_NAMESPACE,
ATTR_DB_OPERATION_NAME,
} from '@opentelemetry/semantic-conventions/incubating';
} from './semconv';

export class PgInstrumentation extends InstrumentationBase<PgInstrumentationConfig> {
private _operationDuration!: Histogram;
Expand Down
100 changes: 100 additions & 0 deletions plugins/node/opentelemetry-instrumentation-pg/src/semconv.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/*
* 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
*
* https://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.
*/

/**
* The name of the connection pool; unique within the instrumented application. In case the connection pool implementation doesn't provide a name, instrumentation **SHOULD** use a combination of parameters that would make the name unique, for example, combining attributes `server.address`, `server.port`, and `db.namespace`, formatted as `server.address:server.port/db.namespace`. Instrumentations that generate connection pool name following different patterns **SHOULD** document it.
*
* @example myDataSource
*
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*/
export const ATTR_DB_CLIENT_CONNECTION_POOL_NAME =
'db.client.connection.pool.name';

/**
* The state of a connection in the pool
*
* @example idle
*
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*/
export const ATTR_DB_CLIENT_CONNECTION_STATE = 'db.client.connection.state';

/**
* The name of the database, fully qualified within the server address and port.
*
* @example customers
* @example test.users
*
* @note If a database system has multiple namespace components, they **SHOULD** be concatenated (potentially using database system specific conventions) from most general to most specific namespace component, and more specific namespaces **SHOULD NOT** be captured without the more general namespaces, to ensure that "startswith" queries for the more general namespaces will be valid.
* Semantic conventions for individual database systems **SHOULD** document what `db.namespace` means in the context of that system.
* It is **RECOMMENDED** to capture the value as provided by the application without attempting to do any case normalization.
* This attribute has stability level RELEASE CANDIDATE.
*
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*/
export const ATTR_DB_NAMESPACE = 'db.namespace';

/**
* The name of the operation or command being executed.
*
* @example findAndModify
* @example HMSET
* @example SELECT
*
* @note It is **RECOMMENDED** to capture the value as provided by the application without attempting to do any case normalization.
* If the operation name is parsed from the query text, it **SHOULD** be the first operation name found in the query.
* For batch operations, if the individual operations are known to have the same operation name then that operation name **SHOULD** be used prepended by `BATCH `, otherwise `db.operation.name` **SHOULD** be `BATCH` or some other database system specific term if more applicable.
* This attribute has stability level RELEASE CANDIDATE.
*
* @experimental This attribute is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*/
export const ATTR_DB_OPERATION_NAME = 'db.operation.name';

/**
* Enum value "used" for attribute {@link ATTR_DB_CLIENT_CONNECTION_STATE}.
*/
export const DB_CLIENT_CONNECTION_STATE_VALUE_USED = 'used';

/**
* Enum value "idle" for attribute {@link ATTR_DB_CLIENT_CONNECTION_STATE}.
*/
export const DB_CLIENT_CONNECTION_STATE_VALUE_IDLE = 'idle';

/**
* The number of connections that are currently in state described by the `state` attribute
*
* @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*/
export const METRIC_DB_CLIENT_CONNECTION_COUNT = 'db.client.connection.count';

/**
* The number of current pending requests for an open connection
*
* @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*/
export const METRIC_DB_CLIENT_CONNECTION_PENDING_REQUESTS =
'db.client.connection.pending_requests';

/**
* Duration of database client operations.
*
* @note Batch operations **SHOULD** be recorded as a single operation.
*
* @experimental This metric is experimental and is subject to breaking changes in minor releases of `@opentelemetry/semantic-conventions`.
*/
export const METRIC_DB_CLIENT_OPERATION_DURATION =
'db.client.operation.duration';
2 changes: 1 addition & 1 deletion plugins/node/opentelemetry-instrumentation-pg/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ import {
ATTR_DB_CLIENT_CONNECTION_STATE,
DB_CLIENT_CONNECTION_STATE_VALUE_USED,
DB_CLIENT_CONNECTION_STATE_VALUE_IDLE,
} from '@opentelemetry/semantic-conventions/incubating';
} from './semconv';
import {
PgClientExtended,
PostgresCallback,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ import {
METRIC_DB_CLIENT_CONNECTION_COUNT,
METRIC_DB_CLIENT_CONNECTION_PENDING_REQUESTS,
METRIC_DB_CLIENT_OPERATION_DURATION,
} from '@opentelemetry/semantic-conventions/incubating';
} from '../src/semconv';

const memoryExporter = new InMemorySpanExporter();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ import {
import {
METRIC_DB_CLIENT_OPERATION_DURATION,
ATTR_DB_OPERATION_NAME,
} from '@opentelemetry/semantic-conventions/incubating';
} from '../src/semconv';
import { addSqlCommenterComment } from '@opentelemetry/sql-common';

const memoryExporter = new InMemorySpanExporter();
Expand Down

0 comments on commit 4fb610d

Please sign in to comment.