Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/main' into ci-test-changed
Browse files Browse the repository at this point in the history
  • Loading branch information
Amir Blum committed Aug 16, 2021
2 parents 8a62da1 + 6a99dc2 commit ae2bd3f
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 16 deletions.
13 changes: 13 additions & 0 deletions .github/component_owners.yml
Expand Up @@ -5,6 +5,16 @@ components:
plugins/node/opentelemetry-instrumentation-aws-lambda:
- NathanielRN
- willarmiros
plugins/node/opentelemetry-instrumentation-restify:
- rauno56
plugins/node/opentelemetry-instrumentation-router:
- rauno56
plugins/node/opentelemetry-instrumentation-memcached:
- rauno56
plugins/node/opentelemetry-instrumentation-knex:
- rauno56
plugins/node/opentelemetry-instrumentation-generic-pool:
- rauno56
propagators/opentelemetry-propagator-aws-xray:
- NathanielRN
- willarmiros
Expand All @@ -13,3 +23,6 @@ components:
- willarmiros
detectors/node/opentelemetry-resource-detector-alibaba-cloud:
- legendecas

ignored-authors:
- renovate-bot
10 changes: 5 additions & 5 deletions packages/opentelemetry-browser-extension-autoinjection/README.md
Expand Up @@ -24,13 +24,13 @@ This browser extension allows you to inject [OpenTelemetry](https://opentelemetr
Run the following in your shell to download and build the extension from source:

```shell
git clone https://github.com/svrnm/opentelemetry-browser-extension
cd opentelemetry-browser-extension
git clone https://github.com/open-telemetry/opentelemetry-js-contrib.git
cd opentelemetry-js-contrib/packages/opentelemetry-browser-extension-autoinjection
npm install
npm run compile
npm run build
```

This will create a so called unpacked extension into the `build/` folder you now can load into your browser:
This will create a so-called unpacked extension into the `build/` folder you now can load into your browser:

* Open a new browser window and go to chrome://extensions
* Turn on "Developer Mode"
Expand Down Expand Up @@ -58,4 +58,4 @@ Click on `Save & Reload`, check the developer toolbar to see how spans being are

3. Firefox support is unstable, sometimes it works, sometimes not. If you have experience building extensions for firefox, please reach out.

4. The website you are targeting with this extension might have a [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) (CSP) in place and block the extension from injecting javascript or block the exporters from sending spans to a collector. To work around this limitation, you need another browser extension, that allows you to disable CSP for a website.
4. The website you are targeting with this extension might have a [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) (CSP) in place and block the extension from injecting javascript or block the exporters from sending spans to a collector. To work around this limitation, you need another browser extension, that allows you to disable CSP for a website.
Expand Up @@ -14,7 +14,13 @@
* limitations under the License.
*/

import { diag, Span, SpanKind, SpanStatusCode } from '@opentelemetry/api';
import {
context,
diag,
Span,
SpanKind,
SpanStatusCode,
} from '@opentelemetry/api';
import {
InstrumentationBase,
InstrumentationNodeModuleDefinition,
Expand All @@ -28,6 +34,11 @@ import { VERSION } from './version';

type formatType = typeof mysqlTypes.format;

type getConnectionCallbackType = (
err: mysqlTypes.MysqlError,
connection: mysqlTypes.PoolConnection
) => void;

export class MySQLInstrumentation extends InstrumentationBase<
typeof mysqlTypes
> {
Expand Down Expand Up @@ -176,21 +187,21 @@ export class MySQLInstrumentation extends InstrumentationBase<

if (arguments.length === 1 && typeof arg1 === 'function') {
const patchFn = thisPlugin._getConnectionCallbackPatchFn(
arg1,
arg1 as getConnectionCallbackType,
format
);
return originalGetConnection.call(pool, patchFn);
}
if (arguments.length === 2 && typeof arg2 === 'function') {
const patchFn = thisPlugin._getConnectionCallbackPatchFn(
arg2,
arg2 as getConnectionCallbackType,
format
);
return originalGetConnection.call(pool, arg1, patchFn);
}
if (arguments.length === 3 && typeof arg3 === 'function') {
const patchFn = thisPlugin._getConnectionCallbackPatchFn(
arg3,
arg3 as getConnectionCallbackType,
format
);
return originalGetConnection.call(pool, arg1, arg2, patchFn);
Expand All @@ -201,22 +212,30 @@ export class MySQLInstrumentation extends InstrumentationBase<
};
}

private _getConnectionCallbackPatchFn(cb: Function, format: formatType) {
private _getConnectionCallbackPatchFn(
cb: getConnectionCallbackType,
format: formatType
) {
const thisPlugin = this;
return function () {
if (arguments[1]) {
const activeContext = context.active();
return function (
this: any,
err: mysqlTypes.MysqlError,
connection: mysqlTypes.PoolConnection
) {
if (connection) {
// this is the callback passed into a query
// no need to unwrap
if (!isWrapped(arguments[1].query)) {
if (!isWrapped(connection.query)) {
thisPlugin._wrap(
arguments[1],
connection,
'query',
thisPlugin._patchQuery(arguments[1], format)
thisPlugin._patchQuery(connection, format)
);
}
}
if (typeof cb === 'function') {
cb(...arguments);
context.with(activeContext, cb, this, err, connection);
}
};
}
Expand Down
Expand Up @@ -426,6 +426,25 @@ describe('mysql@2.x', () => {
});
});
});

it('should propagate active context to callback', done => {
const parentSpan = provider.getTracer('default').startSpan('test span');
context.with(trace.setSpan(context.active(), parentSpan), () => {
pool.getConnection((err, connection) => {
assert.ifError(err);
assert.ok(connection);
const sql = 'SELECT ? as solution';
connection.query(sql, 1, (err, res) => {
assert.ifError(err);
assert.ok(res);
assert.strictEqual(res[0].solution, 1);
const actualSpan = trace.getSpan(context.active());
assert.strictEqual(actualSpan, parentSpan);
done();
});
});
});
});
});

describe('#PoolCluster', () => {
Expand Down Expand Up @@ -600,6 +619,25 @@ describe('mysql@2.x', () => {
}
);
});

it('should propagate active context to callback', done => {
const parentSpan = provider.getTracer('default').startSpan('test span');
context.with(trace.setSpan(context.active(), parentSpan), () => {
poolCluster.getConnection((err, connection) => {
assert.ifError(err);
assert.ok(connection);
const sql = 'SELECT ? as solution';
connection.query(sql, 1, (err, res) => {
assert.ifError(err);
assert.ok(res);
assert.strictEqual(res[0].solution, 1);
const actualSpan = trace.getSpan(context.active());
assert.strictEqual(actualSpan, parentSpan);
done();
});
});
});
});
});
});

Expand Down

0 comments on commit ae2bd3f

Please sign in to comment.