Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 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
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,11 @@ experimental/packages/api-logs/ @open-telemetry/javascript-maintainers
# Any browser-specific code is co-owned by Browser SIG and JS SIG (list more packages here as needed):
bundler-tests/ @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
examples/opentelemetry-web/ @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
experimental/packages/**/*browser* @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
experimental/packages/opentelemetry-browser-detector/ @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
experimental/packages/opentelemetry-instrumentation-fetch/ @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
experimental/packages/opentelemetry-instrumentation-xml-http-request/ @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
experimental/packages/otlp-exporter-base/src/transport/fetch-transport.ts @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
experimental/packages/web-common/ @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
packages/opentelemetry-context-zone/ @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
packages/opentelemetry-context-zone-peer-dep/ @open-telemetry/browser-maintainers @open-telemetry/javascript-approvers
Expand Down
1 change: 1 addition & 0 deletions experimental/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2
* fix(exporter-prometheus): add missing `@opentelemetry/semantic-conventions` dependency [#6330](https://github.com/open-telemetry/opentelemetry-js/pull/6330) @omizha
* fix(otlp-transformer): correctly handle Uint8Array attribute values when serializing to JSON [#6348](https://github.com/open-telemetry/opentelemetry-js/pull/6348) @pichlermarc
* fix(otlp-exporter-base): fix unwanted instrumentation of the fetch exports when context is not propagated [#6353](https://github.com/open-telemetry/opentelemetry-js/pull/6353) @david-luna
* fix(otlp-exporter-base): remove sendBeacon in favor of fetch with keepalive [#6391](https://github.com/open-telemetry/opentelemetry-js/pull/6391) @overbalance

### :books: Documentation

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,56 +35,26 @@ describe('OTLPLogExporter', function () {
});

describe('export', function () {
describe('when sendBeacon is available', function () {
it('should successfully send data using sendBeacon', async function () {
// arrange
const stubBeacon = sinon.stub(navigator, 'sendBeacon');
const loggerProvider = new LoggerProvider({
processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
});

// act
loggerProvider.getLogger('test-logger').emit({ body: 'test-body' });
await loggerProvider.shutdown();

// assert
const args = stubBeacon.args[0];
const blob: Blob = args[1] as unknown as Blob;
const body = await blob.text();
assert.doesNotThrow(
() => JSON.parse(body),
'expected requestBody to be in JSON format, but parsing failed'
);
});
});

describe('when sendBeacon is not available', function () {
beforeEach(function () {
// fake sendBeacon not being available
(window.navigator as any).sendBeacon = false;
it('should successfully send data using fetch', async function () {
// arrange
const stubFetch = sinon
.stub(window, 'fetch')
.resolves(new Response('', { status: 200 }));
const loggerProvider = new LoggerProvider({
processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
});

it('should successfully send data using fetch', async function () {
// arrange
const stubFetch = sinon
.stub(window, 'fetch')
.resolves(new Response('', { status: 200 }));
const loggerProvider = new LoggerProvider({
processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
});

// act
loggerProvider.getLogger('test-logger').emit({ body: 'test-body' });
await loggerProvider.shutdown();

// assert
const request = new Request(...stubFetch.args[0]);
const body = await request.text();
assert.doesNotThrow(
() => JSON.parse(body),
'expected requestBody to be in JSON format, but parsing failed'
);
});
// act
loggerProvider.getLogger('test-logger').emit({ body: 'test-body' });
await loggerProvider.shutdown();

// assert
const request = new Request(...stubFetch.args[0]);
const body = await request.text();
assert.doesNotThrow(
() => JSON.parse(body),
'expected requestBody to be in JSON format, but parsing failed'
);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -35,56 +35,26 @@ describe('OTLPLogExporter', function () {
});

describe('export', function () {
describe('when sendBeacon is available', function () {
it('should successfully send data using sendBeacon', async function () {
// arrange
const stubBeacon = sinon.stub(navigator, 'sendBeacon');
const loggerProvider = new LoggerProvider({
processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
});

// act
loggerProvider.getLogger('test-logger').emit({ body: 'test-body' });
await loggerProvider.shutdown();

// assert
const args = stubBeacon.args[0];
const blob: Blob = args[1] as unknown as Blob;
const body = await blob.text();
assert.throws(
() => JSON.parse(body),
'expected requestBody to be in protobuf format, but parsing as JSON succeeded'
);
});
});

describe('when sendBeacon is not available', function () {
beforeEach(function () {
// fake sendBeacon not being available
(window.navigator as any).sendBeacon = false;
it('should successfully send data using fetch', async function () {
// arrange
const stubFetch = sinon
.stub(window, 'fetch')
.resolves(new Response('', { status: 200 }));
const loggerProvider = new LoggerProvider({
processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
});

it('should successfully send data using fetch', async function () {
// arrange
const stubFetch = sinon
.stub(window, 'fetch')
.resolves(new Response('', { status: 200 }));
const loggerProvider = new LoggerProvider({
processors: [new SimpleLogRecordProcessor(new OTLPLogExporter())],
});

// act
loggerProvider.getLogger('test-logger').emit({ body: 'test-body' });
await loggerProvider.shutdown();

// assert
const request = new Request(...stubFetch.args[0]);
const body = await request.text();
assert.throws(
() => JSON.parse(body),
'expected requestBody to be in protobuf format, but parsing as JSON succeeded'
);
});
// act
loggerProvider.getLogger('test-logger').emit({ body: 'test-body' });
await loggerProvider.shutdown();

// assert
const request = new Request(...stubFetch.args[0]);
const body = await request.text();
assert.throws(
() => JSON.parse(body),
'expected requestBody to be in protobuf format, but parsing as JSON succeeded'
);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -36,56 +36,26 @@ describe('OTLPTraceExporter', () => {
});

describe('export', function () {
describe('when sendBeacon is available', function () {
it('should successfully send data using sendBeacon', async function () {
// arrange
const stubBeacon = sinon.stub(navigator, 'sendBeacon');
const tracerProvider = new BasicTracerProvider({
spanProcessors: [new SimpleSpanProcessor(new OTLPTraceExporter())],
});

// act
tracerProvider.getTracer('test-tracer').startSpan('test-span').end();
await tracerProvider.shutdown();

// assert
const args = stubBeacon.args[0];
const blob: Blob = args[1] as unknown as Blob;
const body = await blob.text();
assert.doesNotThrow(
() => JSON.parse(body),
'expected requestBody to be in JSON format, but parsing failed'
);
});
});

describe('when sendBeacon is not available', function () {
beforeEach(function () {
// fake sendBeacon not being available
(window.navigator as any).sendBeacon = false;
it('should successfully send data using fetch', async function () {
// arrange
const stubFetch = sinon
.stub(window, 'fetch')
.resolves(new Response('', { status: 200 }));
const tracerProvider = new BasicTracerProvider({
spanProcessors: [new SimpleSpanProcessor(new OTLPTraceExporter())],
});

it('should successfully send data using fetch', async function () {
// arrange
const stubFetch = sinon
.stub(window, 'fetch')
.resolves(new Response('', { status: 200 }));
const tracerProvider = new BasicTracerProvider({
spanProcessors: [new SimpleSpanProcessor(new OTLPTraceExporter())],
});

// act
tracerProvider.getTracer('test-tracer').startSpan('test-span').end();
await tracerProvider.shutdown();

// assert
const request = new Request(...stubFetch.args[0]);
const body = await request.text();
assert.doesNotThrow(
() => JSON.parse(body),
'expected requestBody to be in JSON format, but parsing failed'
);
});
// act
tracerProvider.getTracer('test-tracer').startSpan('test-span').end();
await tracerProvider.shutdown();

// assert
const request = new Request(...stubFetch.args[0]);
const body = await request.text();
assert.doesNotThrow(
() => JSON.parse(body),
'expected requestBody to be in JSON format, but parsing failed'
);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -36,56 +36,26 @@ describe('OTLPTraceExporter', () => {
});

describe('export', function () {
describe('when sendBeacon is available', function () {
it('should successfully send data using sendBeacon', async function () {
// arrange
const stubBeacon = sinon.stub(navigator, 'sendBeacon');
const tracerProvider = new BasicTracerProvider({
spanProcessors: [new SimpleSpanProcessor(new OTLPTraceExporter())],
});

// act
tracerProvider.getTracer('test-tracer').startSpan('test-span').end();
await tracerProvider.shutdown();

// assert
const args = stubBeacon.args[0];
const blob: Blob = args[1] as unknown as Blob;
const body = await blob.text();
assert.throws(
() => JSON.parse(body),
'expected requestBody to be in protobuf format, but parsing as JSON succeeded'
);
});
});

describe('when sendBeacon is not available', function () {
beforeEach(function () {
// fake sendBeacon not being available
(window.navigator as any).sendBeacon = false;
it('should successfully send data using fetch', async function () {
// arrange
const stubFetch = sinon
.stub(window, 'fetch')
.resolves(new Response('', { status: 200 }));
const tracerProvider = new BasicTracerProvider({
spanProcessors: [new SimpleSpanProcessor(new OTLPTraceExporter())],
});

it('should successfully send data using fetch', async function () {
// arrange
const stubFetch = sinon
.stub(window, 'fetch')
.resolves(new Response('', { status: 200 }));
const tracerProvider = new BasicTracerProvider({
spanProcessors: [new SimpleSpanProcessor(new OTLPTraceExporter())],
});

// act
tracerProvider.getTracer('test-tracer').startSpan('test-span').end();
await tracerProvider.shutdown();

// assert
const request = new Request(...stubFetch.args[0]);
const body = await request.text();
assert.throws(
() => JSON.parse(body),
'expected request body to be in protobuf format, but parsing as JSON succeeded'
);
});
// act
tracerProvider.getTracer('test-tracer').startSpan('test-span').end();
await tracerProvider.shutdown();

// assert
const request = new Request(...stubFetch.args[0]);
const body = await request.text();
assert.throws(
() => JSON.parse(body),
'expected request body to be in protobuf format, but parsing as JSON succeeded'
);
});
});
});
Loading
Loading