Skip to content

Commit

Permalink
Merge branch 'main' into graphql-example
Browse files Browse the repository at this point in the history
  • Loading branch information
obecny authored Nov 16, 2021
2 parents 53fa7ce + 089e3cb commit b9bc673
Show file tree
Hide file tree
Showing 46 changed files with 521 additions and 199 deletions.
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"detectors/node/opentelemetry-resource-detector-alibaba-cloud":"0.26.0","detectors/node/opentelemetry-resource-detector-aws":"1.0.1","detectors/node/opentelemetry-resource-detector-gcp":"0.26.0","detectors/node/opentelemetry-resource-detector-github":"0.26.0","metapackages/auto-instrumentations-node":"0.26.0","metapackages/auto-instrumentations-web":"0.26.0","packages/opentelemetry-browser-extension-autoinjection":"0.26.0","packages/opentelemetry-host-metrics":"0.26.0","packages/opentelemetry-id-generator-aws-xray":"1.0.0","packages/opentelemetry-test-utils":"0.27.0","plugins/node/opentelemetry-instrumentation-aws-lambda":"0.27.0","plugins/node/opentelemetry-instrumentation-aws-sdk":"0.1.0","plugins/node/opentelemetry-instrumentation-bunyan":"0.26.0","plugins/node/opentelemetry-instrumentation-cassandra":"0.26.0","plugins/node/opentelemetry-instrumentation-connect":"0.26.0","plugins/node/opentelemetry-instrumentation-dns":"0.26.0","plugins/node/opentelemetry-instrumentation-express":"0.26.0","plugins/node/opentelemetry-instrumentation-generic-pool":"0.26.0","plugins/node/opentelemetry-instrumentation-graphql":"0.26.0","plugins/node/opentelemetry-instrumentation-hapi":"0.26.0","plugins/node/opentelemetry-instrumentation-ioredis":"0.26.0","plugins/node/opentelemetry-instrumentation-knex":"0.26.0","plugins/node/opentelemetry-instrumentation-koa":"0.26.0","plugins/node/opentelemetry-instrumentation-memcached":"0.26.0","plugins/node/opentelemetry-instrumentation-mongodb":"0.26.0","plugins/node/opentelemetry-instrumentation-mysql":"0.26.0","plugins/node/opentelemetry-instrumentation-mysql2":"0.26.0","plugins/node/opentelemetry-instrumentation-nestjs-core":"0.26.0","plugins/node/opentelemetry-instrumentation-net":"0.26.0","plugins/node/opentelemetry-instrumentation-pg":"0.26.0","plugins/node/opentelemetry-instrumentation-pino":"0.26.0","plugins/node/opentelemetry-instrumentation-redis":"0.26.0","plugins/node/opentelemetry-instrumentation-restify":"0.26.0","plugins/node/opentelemetry-instrumentation-router":"0.26.0","plugins/node/opentelemetry-instrumentation-winston":"0.26.0","plugins/web/opentelemetry-instrumentation-document-load":"0.26.0","plugins/web/opentelemetry-instrumentation-user-interaction":"0.26.0","plugins/web/opentelemetry-plugin-react-load":"0.26.0","propagators/opentelemetry-propagator-aws-xray":"1.0.0","propagators/opentelemetry-propagator-grpc-census-binary":"0.25.0","propagators/opentelemetry-propagator-ot-trace":"0.25.0"}
{"detectors/node/opentelemetry-resource-detector-alibaba-cloud":"0.26.0","detectors/node/opentelemetry-resource-detector-aws":"1.0.1","detectors/node/opentelemetry-resource-detector-gcp":"0.26.0","detectors/node/opentelemetry-resource-detector-github":"0.26.0","metapackages/auto-instrumentations-node":"0.26.1","metapackages/auto-instrumentations-web":"0.26.0","packages/opentelemetry-browser-extension-autoinjection":"0.26.0","packages/opentelemetry-host-metrics":"0.26.0","packages/opentelemetry-id-generator-aws-xray":"1.0.0","packages/opentelemetry-test-utils":"0.27.0","plugins/node/opentelemetry-instrumentation-aws-lambda":"0.27.0","plugins/node/opentelemetry-instrumentation-aws-sdk":"0.2.0","plugins/node/opentelemetry-instrumentation-bunyan":"0.26.0","plugins/node/opentelemetry-instrumentation-cassandra":"0.26.0","plugins/node/opentelemetry-instrumentation-connect":"0.26.0","plugins/node/opentelemetry-instrumentation-dns":"0.26.0","plugins/node/opentelemetry-instrumentation-express":"0.26.0","plugins/node/opentelemetry-instrumentation-generic-pool":"0.26.0","plugins/node/opentelemetry-instrumentation-graphql":"0.26.1","plugins/node/opentelemetry-instrumentation-hapi":"0.26.0","plugins/node/opentelemetry-instrumentation-ioredis":"0.26.0","plugins/node/opentelemetry-instrumentation-knex":"0.26.0","plugins/node/opentelemetry-instrumentation-koa":"0.26.0","plugins/node/opentelemetry-instrumentation-memcached":"0.26.0","plugins/node/opentelemetry-instrumentation-mongodb":"0.26.0","plugins/node/opentelemetry-instrumentation-mysql":"0.26.0","plugins/node/opentelemetry-instrumentation-mysql2":"0.26.0","plugins/node/opentelemetry-instrumentation-nestjs-core":"0.27.0","plugins/node/opentelemetry-instrumentation-net":"0.26.0","plugins/node/opentelemetry-instrumentation-pg":"0.26.0","plugins/node/opentelemetry-instrumentation-pino":"0.26.0","plugins/node/opentelemetry-instrumentation-redis":"0.26.0","plugins/node/opentelemetry-instrumentation-restify":"0.26.0","plugins/node/opentelemetry-instrumentation-router":"0.26.0","plugins/node/opentelemetry-instrumentation-winston":"0.26.0","plugins/web/opentelemetry-instrumentation-document-load":"0.26.0","plugins/web/opentelemetry-instrumentation-user-interaction":"0.26.0","plugins/web/opentelemetry-plugin-react-load":"0.26.0","propagators/opentelemetry-propagator-aws-xray":"1.0.0","propagators/opentelemetry-propagator-grpc-census-binary":"0.25.0","propagators/opentelemetry-propagator-ot-trace":"0.25.0"}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
"devDependencies": {
"@opentelemetry/api": "1.0.2",
"@opentelemetry/contrib-test-utils": "^0.27.0",
"@opentelemetry/core": "1.0.0",
"@opentelemetry/core": "1.0.1",
"@types/mocha": "8.2.3",
"@types/node": "14.17.9",
"@types/semver": "7.3.8",
Expand All @@ -67,4 +67,4 @@
"gcp-metadata": "^4.1.4",
"semver": "7.3.5"
}
}
}
11 changes: 10 additions & 1 deletion metapackages/auto-instrumentations-node/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,14 @@
# Changelog

### [0.26.1](https://www.github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-node-v0.26.0...auto-instrumentations-node-v0.26.1) (2021-11-12)


### Dependencies

* The following workspace dependencies were updated
* dependencies
* @opentelemetry/instrumentation-graphql bumped from ^0.26.0 to ^0.26.1

## [0.26.0](https://www.github.com/open-telemetry/opentelemetry-js-contrib/compare/auto-instrumentations-node-v0.25.0...auto-instrumentations-node-v0.26.0) (2021-10-22)


Expand All @@ -21,4 +30,4 @@
* @opentelemetry/instrumentation-mongodb bumped from ^0.25.0 to ^0.26.0
* @opentelemetry/instrumentation-mysql bumped from ^0.25.0 to ^0.26.0
* @opentelemetry/instrumentation-pg bumped from ^0.25.0 to ^0.26.0
* @opentelemetry/instrumentation-redis bumped from ^0.25.0 to ^0.26.0
* @opentelemetry/instrumentation-redis bumped from ^0.25.0 to ^0.26.0
4 changes: 2 additions & 2 deletions metapackages/auto-instrumentations-node/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@opentelemetry/auto-instrumentations-node",
"version": "0.26.0",
"version": "0.26.1",
"description": "Metapackage which bundles opentelemetry node core and contrib instrumentations",
"author": "OpenTelemetry Authors",
"homepage": "https://github.com/open-telemetry/opentelemetry-js-contrib#readme",
Expand Down Expand Up @@ -48,7 +48,7 @@
"@opentelemetry/instrumentation": "^0.26.0",
"@opentelemetry/instrumentation-dns": "^0.26.0",
"@opentelemetry/instrumentation-express": "^0.26.0",
"@opentelemetry/instrumentation-graphql": "^0.26.0",
"@opentelemetry/instrumentation-graphql": "^0.26.1",
"@opentelemetry/instrumentation-grpc": "^0.26.0",
"@opentelemetry/instrumentation-http": "^0.26.0",
"@opentelemetry/instrumentation-ioredis": "^0.26.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,21 +66,21 @@
"@material-ui/core": "4.12.3",
"@material-ui/icons": "4.11.2",
"@material-ui/lab": "4.0.0-alpha.60",
"@opentelemetry/context-zone": "1.0.0",
"@opentelemetry/core": "1.0.0",
"@opentelemetry/context-zone": "1.0.1",
"@opentelemetry/core": "1.0.1",
"@opentelemetry/exporter-otlp-http": "0.26.0",
"@opentelemetry/exporter-zipkin": "1.0.0",
"@opentelemetry/exporter-zipkin": "1.0.1",
"@opentelemetry/instrumentation": "0.26.0",
"@opentelemetry/instrumentation-document-load": "^0.26.0",
"@opentelemetry/instrumentation-fetch": "0.26.0",
"@opentelemetry/instrumentation-xml-http-request": "0.26.0",
"@opentelemetry/resources": "1.0.0",
"@opentelemetry/sdk-trace-base": "1.0.0",
"@opentelemetry/sdk-trace-web": "1.0.0",
"@opentelemetry/semantic-conventions": "1.0.0",
"@opentelemetry/resources": "1.0.1",
"@opentelemetry/sdk-trace-base": "1.0.1",
"@opentelemetry/sdk-trace-web": "1.0.1",
"@opentelemetry/semantic-conventions": "1.0.1",
"change-case": "4.1.2",
"json5": "2.2.0",
"react": "17.0.2",
"react-dom": "17.0.2"
}
}
}
14 changes: 7 additions & 7 deletions packages/opentelemetry-test-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@
"typescript": "4.3.5"
},
"dependencies": {
"@opentelemetry/core": "1.0.0",
"@opentelemetry/exporter-jaeger": "1.0.0",
"@opentelemetry/core": "1.0.1",
"@opentelemetry/exporter-jaeger": "1.0.1",
"@opentelemetry/instrumentation": "0.26.0",
"@opentelemetry/sdk-trace-node": "1.0.0",
"@opentelemetry/resources": "1.0.0",
"@opentelemetry/sdk-trace-base": "1.0.0",
"@opentelemetry/semantic-conventions": "1.0.0"
"@opentelemetry/sdk-trace-node": "1.0.1",
"@opentelemetry/resources": "1.0.1",
"@opentelemetry/sdk-trace-base": "1.0.1",
"@opentelemetry/semantic-conventions": "1.0.1"
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,9 @@
},
"devDependencies": {
"@opentelemetry/api": "1.0.2",
"@opentelemetry/core": "1.0.0",
"@opentelemetry/sdk-trace-base": "1.0.0",
"@opentelemetry/sdk-trace-node": "1.0.0",
"@opentelemetry/core": "1.0.1",
"@opentelemetry/sdk-trace-base": "1.0.1",
"@opentelemetry/sdk-trace-node": "1.0.1",
"@types/mocha": "7.0.2",
"@types/node": "14.17.9",
"codecov": "3.8.3",
Expand All @@ -67,4 +67,4 @@
"@opentelemetry/semantic-conventions": "^1.0.0",
"@types/aws-lambda": "8.10.81"
}
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## [0.2.0](https://www.github.com/open-telemetry/opentelemetry-js-contrib/compare/instrumentation-aws-sdk-v0.1.0...instrumentation-aws-sdk-v0.2.0) (2021-11-12)


### Features

* AWS-SDK SNS Context propagation ([#728](https://www.github.com/open-telemetry/opentelemetry-js-contrib/issues/728)) ([78cd4e1](https://www.github.com/open-telemetry/opentelemetry-js-contrib/commit/78cd4e118e5a41107d84dfd1ae8c4c28e885b27e))

## 0.1.0 (2021-10-22)


Expand All @@ -13,4 +20,4 @@

* The following workspace dependencies were updated
* devDependencies
* @opentelemetry/contrib-test-utils bumped from ^0.26.0 to ^0.27.0
* @opentelemetry/contrib-test-utils bumped from ^0.26.0 to ^0.27.0
5 changes: 1 addition & 4 deletions plugins/node/opentelemetry-instrumentation-aws-sdk/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,9 @@ AWS contains dozens of services accessible with the JS SDK. For many services, t
Specific service logic currently implemented for:

- [SQS](./docs/sqs.md)
- [SNS](./docs/sns.md)
- DynamoDb

---

This instrumentation is a work in progress. We implemented some of the specific trace semantics for some of the services, and strive to support more services and extend the already supported services in the future. You can [Open an Issue](https://github.com/aspecto-io/opentelemetry-ext-js/issues), or [Submit a Pull Request](https://github.com/aspecto-io/opentelemetry-ext-js/pulls) if you want to contribute.

## Potential Side Effects

The instrumentation is doing best effort to support the trace specification of OpenTelemetry. For SQS, it involves defining new attributes on the `Messages` array, as well as on the manipulated types generated from this array (to set correct trace context for a single SQS message operation). Those properties are defined as [non-enumerable](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties) properties, so they have minimum side effect on the app. They will, however, show when using the `Object.getOwnPropertyDescriptors` and `Reflect.ownKeys` functions on SQS `Messages` array and for each `Message` in the array.
Expand Down
15 changes: 15 additions & 0 deletions plugins/node/opentelemetry-instrumentation-aws-sdk/doc/sns.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# SNS

SNS is amazon's managed pub/sub system. Thus, it should follow the [OpenTelemetry specification for Messaging systems](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md).

## Specific trace semantic

The following methods are automatically enhanced:

### Publish messages

- [Messaging Attributes](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/messaging.md#messaging-attributes) are added by this instrumentation according to the spec.
- OpenTelemetry trace context is injected as SNS MessageAttributes, so the service receiving the message can link cascading spans to the trace which created the message.

### Consumers
There are many potential consumers: SQS, Lambda, HTTP/S, Email, SMS, mobile notifications. each one of them will received the propagated context in its own way.
16 changes: 9 additions & 7 deletions plugins/node/opentelemetry-instrumentation-aws-sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@opentelemetry/instrumentation-aws-sdk",
"version": "0.1.0",
"version": "0.2.0",
"description": "OpenTelemetry automatic instrumentation for the `aws-sdk` package",
"keywords": [
"aws",
Expand Down Expand Up @@ -57,22 +57,24 @@
"@aws-sdk/client-sqs": "3.37.0",
"@aws-sdk/types": "3.37.0",
"@opentelemetry/api": "1.0.1",
"@opentelemetry/sdk-trace-base": "1.0.0",
"@opentelemetry/sdk-trace-base": "1.0.1",
"@types/mocha": "^8.2.2",
"@types/node": "^14.0.0",
"@types/sinon": "^10.0.6",
"aws-sdk": "2.1008.0",
"eslint": "^7.32.0",
"expect": "^25",
"mocha": "7.2.0",
"ts-mocha": "8.0.0",
"nock": "^13.0.11",
"nyc": "^15.1.0",
"rimraf": "^3.0.2",
"sinon": "^12.0.0",
"gts": "3.1.0",
"@opentelemetry/contrib-test-utils": "^0.27.0",
"test-all-versions": "^5.0.1",
"ts-mocha": "8.0.0",
"ts-node": "^9.1.1",
"typescript": "4.3.4",
"eslint": "^7.32.0",
"nyc": "^15.1.0",
"rimraf": "^3.0.2"
"typescript": "4.3.4"
},
"engines": {
"node": ">=8.5.0"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Copyright The OpenTelemetry Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* 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.
*/
import {
TextMapGetter,
TextMapSetter,
context,
propagation,
diag,
} from '@opentelemetry/api';
import type { SQS, SNS } from 'aws-sdk';

// https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-quotas.html
export const MAX_MESSAGE_ATTRIBUTES = 10;
class ContextSetter
implements
TextMapSetter<SQS.MessageBodyAttributeMap | SNS.MessageAttributeMap>
{
set(
carrier: SQS.MessageBodyAttributeMap | SNS.MessageAttributeMap,
key: string,
value: string
) {
carrier[key] = {
DataType: 'String',
StringValue: value as string,
};
}
}
export const contextSetter = new ContextSetter();

class ContextGetter
implements
TextMapGetter<SQS.MessageBodyAttributeMap | SNS.MessageAttributeMap>
{
keys(
carrier: SQS.MessageBodyAttributeMap | SNS.MessageAttributeMap
): string[] {
return Object.keys(carrier);
}

get(
carrier: SQS.MessageBodyAttributeMap | SNS.MessageAttributeMap,
key: string
): undefined | string | string[] {
return carrier?.[key]?.StringValue;
}
}
export const contextGetter = new ContextGetter();

export const injectPropagationContext = (
attributesMap?: SQS.MessageBodyAttributeMap | SNS.MessageAttributeMap
): SQS.MessageBodyAttributeMap | SNS.MessageAttributeMap => {
const attributes = attributesMap ?? {};
if (Object.keys(attributes).length < MAX_MESSAGE_ATTRIBUTES) {
propagation.inject(context.active(), attributes, contextSetter);
} else {
diag.warn(
'aws-sdk instrumentation: cannot set context propagation on SQS/SNS message due to maximum amount of MessageAttributes'
);
}
return attributes;
};
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,14 @@ import {
NormalizedResponse,
} from '../types';
import { DynamodbServiceExtension } from './dynamodb';
import { SnsServiceExtension } from './sns';

export class ServicesExtensions implements ServiceExtension {
services: Map<string, ServiceExtension> = new Map();

constructor() {
this.services.set('SQS', new SqsServiceExtension());
this.services.set('SNS', new SnsServiceExtension());
this.services.set('DynamoDB', new DynamodbServiceExtension());
}

Expand Down
Loading

0 comments on commit b9bc673

Please sign in to comment.