Skip to content

Commit

Permalink
Merge branch 'master' into metrics_readme
Browse files Browse the repository at this point in the history
  • Loading branch information
mayurkale22 authored Nov 15, 2019
2 parents eb280b1 + 0c1ff8d commit d1160b2
Show file tree
Hide file tree
Showing 76 changed files with 2,990 additions and 121 deletions.
71 changes: 59 additions & 12 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,40 @@ postgres_service: &postgres_service
POSTGRES_USER: postgres
POSTGRES_DB: circle_database

cache_1: &cache_1
key: npm-cache-01-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/checksums.txt" }}-1
paths:
- ./node_modules
- ./yarn.lock
- packages/opentelemetry-base/node_modules
- packages/opentelemetry-scope-base/node_modules
- packages/opentelemetry-types/node_modules
- packages/opentelemetry-scope-async-hooks/node_modules
- packages/opentelemetry-core/node_modules
- packages/opentelemetry-exporter-prometheus/node_modules
- packages/opentelemetry-metrics/node_modules
- packages/opentelemetry-tracing/node_modules
- packages/opentelemetry-exporter-jaeger/node_modules
- packages/opentelemetry-exporter-zipkin/node_modules
- packages/opentelemetry-node/node_modules
- packages/opentelemetry-shim-opentracing/node_modules
- packages/opentelemetry-web/node_modules
- packages/opentelemetry-plugin-dns/node_modules

cache_2: &cache_2
key: npm-cache-02-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/checksums.txt" }}-2
paths:
- packages/opentelemetry-plugin-grpc/node_modules
- packages/opentelemetry-plugin-http/node_modules
- packages/opentelemetry-plugin-http2/node_modules
- packages/opentelemetry-plugin-mongodb/node_modules
- packages/opentelemetry-plugin-redis/node_modules
- packages/opentelemetry-plugin-postgres/opentelemetry-plugin-pg/node_modules
- packages/opentelemetry-plugin-document-load/node_modules
- packages/opentelemetry-plugin-https/node_modules
- packages/opentelemetry-plugin-postgres/opentelemetry-plugin-pg-pool/node_modules
- packages/opentelemetry-exporter-prometheus/node_modules

node_unit_tests: &node_unit_tests
steps:
- checkout
Expand All @@ -31,17 +65,17 @@ node_unit_tests: &node_unit_tests
echo "CIRCLE_NODE_VERSION=${CIRCLE_NODE_VERSION}"
- restore_cache:
keys:
- npm-cache-{{ checksum "/tmp/checksums.txt" }}
- npm-cache-01-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/checksums.txt" }}-1
- restore_cache:
keys:
- npm-cache-02-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/checksums.txt" }}-2
- run:
name: Install Dependencies
command: yarn install
- save_cache:
key: npm-cache-{{ checksum "/tmp/checksums.txt" }}
paths:
- ./node_modules
- ./yarn.lock
- ./packages/*/node_modules
- ./packages/*/yarn.lock
<<: *cache_1
- save_cache:
<<: *cache_2
- run:
name: Compile code
command: yarn compile
Expand All @@ -55,6 +89,9 @@ node_unit_tests: &node_unit_tests
browsers_unit_tests: &browsers_unit_tests
steps:
- checkout
- run:
name: Create Checksum
command: sh .circleci/checksum.sh /tmp/checksums.txt
- run:
name: Setup environment variables
command: |
Expand All @@ -65,12 +102,19 @@ browsers_unit_tests: &browsers_unit_tests
command: |
node --version
echo "CIRCLE_NODE_VERSION=${CIRCLE_NODE_VERSION}"
- restore_cache:
keys:
- npm-cache-01-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/checksums.txt" }}-1
- restore_cache:
keys:
- npm-cache-02-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/checksums.txt" }}-1
- run:
name: Install Dependencies
command: yarn install
- run:
name: Compile code
command: yarn compile
- save_cache:
<<: *cache_1
- save_cache:
<<: *cache_2
- run:
name: Unit tests
command: yarn test:browser
Expand All @@ -85,8 +129,11 @@ jobs:
steps:
- checkout
- run:
name: Install modules and dependencies.
command: yarn install
name: Install minimal doc and lint modules globally
command: yarn global add lerna typedoc linkinator typescript gts tslint-consistent-codestyle tslint-microsoft-contrib
- run:
name: Symlink global modules into all lerna packages
command: lerna exec 'ln -s $(yarn global dir)/node_modules node_modules'
- run:
name: Check code style and linting
command: yarn run check
Expand Down
2 changes: 1 addition & 1 deletion .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,4 @@
# https://help.github.com/en/articles/about-code-owners
#

* @danielkhan @mayurkale22 @rochdev @bg451 @OlivierAlbertini @vmarchaud @markwolff
* @danielkhan @mayurkale22 @rochdev @bg451 @OlivierAlbertini @vmarchaud @markwolff @obecny
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,6 @@ docs

# OS generated files
.DS_Store

# VsCode configs
.vscode/
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ Approvers ([@open-telemetry/js-approvers](https://github.com/orgs/open-telemetry
- [Olivier Albertini](https://github.com/OlivierAlbertini), VilledeMontreal
- [Valentin Marchaud](https://github.com/vmarchaud), Open Source Contributor
- [Mark Wolff](https://github.com/markwolff), Microsoft
- [Bartlomiej Obecny](https://github.com/obecny), LightStep

*Find more about the approver role in [community repository](https://github.com/open-telemetry/community/blob/master/community-membership.md#approver).*

Expand Down Expand Up @@ -88,6 +89,7 @@ Maintainers ([@open-telemetry/js-maintainers](https://github.com/orgs/open-telem
| [@opentelemetry/metrics](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-metrics) | This module provides instruments and meters for reporting of time series data. |
| [@opentelemetry/node](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-node) | This module provides automatic tracing for Node.js applications. It is intended for use on the server only. |
| [@opentelemetry/web](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-web) | This module provides automated instrumentation and tracing for Web applications. It is intended for use in the browser only. |
| [@opentelemetry/base](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-base) | This package provides base code for the SDK packages (tracing and metrics). |

### Exporters

Expand All @@ -98,18 +100,24 @@ OpenTelemetry is vendor-agnostic and can upload data to any backend with various
- [@opentelemetry/exporter-zipkin](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-exporter-zipkin)

#### Metric Exporters
- [@opentelemetry/exporter-prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-exporter-prometheus) - WIP
- [@opentelemetry/exporter-prometheus](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-exporter-prometheus)

### Plugins

OpenTelemetry can collect tracing data automatically using plugins. Vendors/Users can also create and use their own. Currently, OpenTelemetry supports automatic tracing for:

#### Node Plugins
- [@opentelemetry/plugin-http](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-http)
- [@opentelemetry/plugin-grpc](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-grpc)
- [@opentelemetry/plugin-https](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-https)
- [@opentelemetry/plugin-dns](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-dns)
- [@opentelemetry/plugin-mongodb](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-mongodb) - WIP
- [@opentelemetry/plugin-postgres](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-postgres) - WIP
- [@opentelemetry/plugin-redis](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-redis) - WIP
- [@opentelemetry/plugin-mysql](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-mysql) - WIP

#### Web Plugins
- [@opentelemetry/plugin-document-load](https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-plugin-document-load)

To request automatic tracing support for a module not on this list, please [file an issue](https://github.com/open-telemetry/opentelemetry-js/issues). Alternatively, you can [write a plugin yourself](https://github.com/open-telemetry/opentelemetry-js/blob/master/doc/plugin-guide.md).

Expand Down
14 changes: 14 additions & 0 deletions examples/tracer-web/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,26 @@
<title>Web Tracer Example</title>
<base href="/">

<!--
https://www.w3.org/TR/trace-context/
Set the `traceparent` in the server's HTML template code. It should be
dynamically generated server side to have the server's request trace Id,
a parent span Id that was set on the server's request span, and the trace
flags to indicate the server's sampling decision
(01 = sampled, 00 = notsampled).
'{version}-{traceId}-{spanId}-{sampleDecision}'
-->
<meta name="traceparent" content="00-ab42124a3c573678d4d8b21ba52df3bf-d21f7bc17caa5aba-01">

<meta name="viewport" content="width=device-width, initial-scale=1">
</head>

<body>
Example of using Web Tracer with document load plugin and console exporter
<script type="text/javascript" src="/bundle.js"></script>
<br/>
<button id="button1">Test WebTracer with ZoneScopeManager - async</button>

</body>

</html>
74 changes: 73 additions & 1 deletion examples/tracer-web/index.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,83 @@
import { ConsoleSpanExporter, SimpleSpanProcessor } from '@opentelemetry/tracing';
import { WebTracer } from '@opentelemetry/web';
import { DocumentLoad } from '@opentelemetry/plugin-document-load';
import { ZoneScopeManager } from '@opentelemetry/scope-zone';

const webTracer = new WebTracer({
plugins: [
new DocumentLoad()
]
});

webTracer.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));

const webTracerWithZone = new WebTracer({
scopeManager: new ZoneScopeManager(),
plugins: [
new DocumentLoad()
]
});
webTracerWithZone.addSpanProcessor(new SimpleSpanProcessor(new ConsoleSpanExporter()));

console.log('Current span is window', webTracerWithZone.getCurrentSpan() === window);

// example of keeping track of scope between async operations
const prepareClickEvent = () => {
const url1 = 'https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/master/package.json';
const url2 = 'https://raw.githubusercontent.com/open-telemetry/opentelemetry-js/master/packages/opentelemetry-web/package.json';

const element = document.getElementById('button1');
let mainSpan = webTracerWithZone.startSpan('main-span');
webTracerWithZone.bind(element, mainSpan);

const onClick = () => {
const span1 = webTracerWithZone.startSpan(`files-series-info-1`, {
parent: webTracerWithZone.getCurrentSpan()
});

const span2 = webTracerWithZone.startSpan(`files-series-info-2`, {
parent: webTracerWithZone.getCurrentSpan()
});

webTracerWithZone.withSpan(span1, () => {
getData(url1).then((data) => {
console.log('current span is span1', webTracerWithZone.getCurrentSpan() === span1);
console.log('info from package.json', data.description, data.version);
webTracerWithZone.getCurrentSpan().addEvent('fetching-span1-completed');
span1.end();
});
});

webTracerWithZone.withSpan(span2, () => {
getData(url2).then((data) => {
setTimeout(() => {
console.log('current span is span2', webTracerWithZone.getCurrentSpan() === span2);
console.log('info from package.json', data.description, data.version);
webTracerWithZone.getCurrentSpan().addEvent('fetching-span2-completed');
span2.end();
}, 100);
});
});
};
element.addEventListener('click', onClick);
};

const getData = (url) => {
return new Promise(async (resolve, reject) => {
const req = new XMLHttpRequest();
req.open('GET', url, true);
req.send();
req.onload = function () {
let json;
try {
json = JSON.parse(req.responseText);
} catch (e) {
reject(e);
}
resolve(json);
};
});
};

window.addEventListener('load', () => {
prepareClickEvent();
});
1 change: 1 addition & 0 deletions examples/tracer-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
},
"dependencies": {
"@opentelemetry/plugin-document-load": "^0.2.0",
"@opentelemetry/scope-zone": "^0.2.0",
"@opentelemetry/tracing": "^0.2.0",
"@opentelemetry/web": "^0.2.0"
},
Expand Down
10 changes: 0 additions & 10 deletions examples/tracer-web/webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,6 @@ const common = {
}
]
},
plugins: [
new webpack.ProvidePlugin({
jQuery: 'jquery',
$: 'jquery',
jquery: 'jquery',
'window.jQuery': 'jquery'
})
],
resolve: {
modules: [
path.resolve(mainPath, 'src'),
Expand All @@ -52,8 +44,6 @@ module.exports = webpackMerge(common, {
},
devServer: {
contentBase: path.resolve(__dirname),
// contentBase: path.resolve('.'),
// historyApiFallback: true
},
plugins: [
new webpack.DefinePlugin({
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
"@commitlint/config-conventional": "^8.2.0",
"beautify-benchmark": "^0.2.4",
"benchmark": "^2.1.4",
"gts": "^1.0.0",
"gts": "^1.1.0",
"husky": "^3.0.9",
"lerna": "^3.17.0",
"lerna-changelog": "^0.8.2",
Expand Down
6 changes: 3 additions & 3 deletions packages/opentelemetry-base/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@opentelemetry/base",
"version": "0.2.0",
"description": "OpenTelemetry base",
"description": "OpenTelemetry base provides base code for the SDK packages",
"main": "build/src/index.js",
"types": "build/src/index.d.ts",
"repository": "open-telemetry/opentelemetry-js",
Expand Down Expand Up @@ -43,8 +43,8 @@
"devDependencies": {
"@types/mocha": "^5.2.5",
"@types/node": "^12.6.8",
"codecov": "^3.1.0",
"gts": "^1.0.0",
"codecov": "^3.6.1",
"gts": "^1.1.0",
"mocha": "^6.1.0",
"nyc": "^14.1.1",
"rimraf": "^3.0.0",
Expand Down
7 changes: 4 additions & 3 deletions packages/opentelemetry-core/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@opentelemetry/core",
"version": "0.2.0",
"description": "OpenTelemetry Core",
"description": "OpenTelemetry Core provides default and no-op implementations of the OpenTelemetry types for trace and metrics",
"main": "build/src/index.js",
"browser": {
"./src/platform/index.ts": "./src/platform/browser/index.ts",
Expand Down Expand Up @@ -51,10 +51,11 @@
"devDependencies": {
"@types/mocha": "^5.2.5",
"@types/node": "^12.6.8",
"@types/semver": "^6.2.0",
"@types/sinon": "^7.0.13",
"@types/webpack-env": "1.13.9",
"codecov": "^3.1.0",
"gts": "^1.0.0",
"codecov": "^3.6.1",
"gts": "^1.1.0",
"istanbul-instrumenter-loader": "^3.0.1",
"karma": "^4.4.1",
"karma-chrome-launcher": "^3.1.0",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,17 @@ const VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;
const INVALID_ID_REGEX = /^0+$/i;
const VERSION = '00';

function parse(traceParent: string): SpanContext | null {
/**
* Parses information from the [traceparent] span tag and converts it into {@link SpanContext}
* @param traceParent - A meta property that comes from server.
* It should be dynamically generated server side to have the server's request trace Id,
* a parent span Id that was set on the server's request span,
* and the trace flags to indicate the server's sampling decision
* (01 = sampled, 00 = not sampled).
* for example: '{version}-{traceId}-{spanId}-{sampleDecision}'
* For more information see {@link https://www.w3.org/TR/trace-context/}
*/
export function parseTraceParent(traceParent: string): SpanContext | null {
const match = traceParent.match(VALID_TRACE_PARENT_REGEX);
if (!match) return null;
const parts = traceParent.split('-');
Expand Down Expand Up @@ -87,7 +97,7 @@ export class HttpTraceContext implements HttpTextFormat {
const traceParent = Array.isArray(traceParentHeader)
? traceParentHeader[0]
: traceParentHeader;
const spanContext = parse(traceParent);
const spanContext = parseTraceParent(traceParent);
if (!spanContext) return null;

spanContext.isRemote = true;
Expand Down
Loading

0 comments on commit d1160b2

Please sign in to comment.