Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: avoid type imports of the instrumented package in the built assets #1017

Merged
merged 7 commits into from
Jun 27, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export class CassandraDriverInstrumentation extends InstrumentationBase {
}

protected init() {
return new InstrumentationNodeModuleDefinition<typeof CassandraDriver>(
return new InstrumentationNodeModuleDefinition<any>(
'cassandra-driver',
supportedVersions,
driverModule => {
Expand Down Expand Up @@ -290,7 +290,7 @@ export class CassandraDriverInstrumentation extends InstrumentationBase {
};
}

public startSpan(
private startSpan(
{ op, query }: { op: string; query?: unknown },
client: CassandraDriver.Client
): Span {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ const DEFAULT_CONFIG: types.KnexInstrumentationConfig = {
maxQueryLength: 1022,
};

export class KnexInstrumentation extends InstrumentationBase<typeof knex> {
export class KnexInstrumentation extends InstrumentationBase<any> {
constructor(config: types.KnexInstrumentationConfig = {}) {
super(
`@opentelemetry/instrumentation-${constants.MODULE_NAME}`,
Expand All @@ -44,7 +44,7 @@ export class KnexInstrumentation extends InstrumentationBase<typeof knex> {
}

init() {
const module = new InstrumentationNodeModuleDefinition<typeof knex>(
const module = new InstrumentationNodeModuleDefinition<any>(
constants.MODULE_NAME,
constants.SUPPORTED_VERSIONS
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,7 @@ import { VERSION } from './version';

type formatType = typeof mysqlTypes.format;

export class MySQL2Instrumentation extends InstrumentationBase<
typeof mysqlTypes
> {
export class MySQL2Instrumentation extends InstrumentationBase<any> {
static readonly COMMON_ATTRIBUTES = {
[SemanticAttributes.DB_SYSTEM]: DbSystemValues.MYSQL,
};
Expand All @@ -50,7 +48,7 @@ export class MySQL2Instrumentation extends InstrumentationBase<

protected init() {
return [
new InstrumentationNodeModuleDefinition<typeof mysqlTypes>(
new InstrumentationNodeModuleDefinition<any>(
'mysql2',
['>= 1.4.2 < 3.0'],
(moduleExports: any, moduleVersion) => {
Expand Down
18 changes: 17 additions & 1 deletion plugins/node/opentelemetry-instrumentation-mysql2/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,23 @@

import { SpanAttributes } from '@opentelemetry/api';
import { SemanticAttributes } from '@opentelemetry/semantic-conventions';
import type { Query, QueryOptions } from 'mysql2';

/*
Following types declare an expectation on mysql2 types and define a subset we
use in the instrumentation of the types actually defined in mysql2 pacakge

We need to import them here so that the installing party of the instrumentation
doesn't have to absolutely install the mysql2 package as well - specially
important for auto-loaders and meta-pacakges.
*/
interface QueryOptions {
sql: string;
values?: any | any[] | { [param: string]: any };
}

interface Query {
sql: string;
}

interface Config {
host?: string;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,17 +33,15 @@ import * as utils from './utils';
import AttributeNames from './enums/AttributeNames';
import LayerType from './enums/LayerType';

export default class RouterInstrumentation extends InstrumentationBase<
typeof Router
> {
export default class RouterInstrumentation extends InstrumentationBase<any> {
constructor() {
super(`@opentelemetry/instrumentation-${constants.MODULE_NAME}`, VERSION);
}

private _moduleVersion?: string;

init() {
const module = new InstrumentationNodeModuleDefinition<typeof Router>(
const module = new InstrumentationNodeModuleDefinition<any>(
constants.MODULE_NAME,
constants.SUPPORTED_VERSIONS,
(moduleExports, moduleVersion) => {
Expand Down Expand Up @@ -170,7 +168,7 @@ export default class RouterInstrumentation extends InstrumentationBase<
const type = layer.method
? LayerType.REQUEST_HANDLER
: LayerType.MIDDLEWARE;
const route = utils.getRoute(req);
const route = req.baseUrl + (req.route?.path ?? '') || '/';
const spanName =
type === LayerType.REQUEST_HANDLER
? `request handler - ${route}`
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@

import * as constants from './constants';
import * as types from './types';
import * as Router from 'router';

// Detect whether a function is a router package internal plumming handler
export const isInternal = (fn: Function) => {
Expand All @@ -30,9 +29,6 @@ export const isInternal = (fn: Function) => {
return false;
};

export const getRoute = (req: Router.RoutedRequest) =>
req.baseUrl + (req.route?.path ?? '') || '/';

export const renameHttpSpan = (
span?: types.InstrumentationSpan,
method?: string,
Expand Down