Skip to content

Commit

Permalink
Merge branch 'main' into instrumentation_http_alloc
Browse files Browse the repository at this point in the history
  • Loading branch information
pichlermarc authored Mar 29, 2024
2 parents bd85347 + 9a5688e commit 2f1f83a
Show file tree
Hide file tree
Showing 25 changed files with 424 additions and 229 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ For experimental package changes, see the [experimental CHANGELOG](experimental/

### :rocket: (Enhancement)

* perf(sdk-trace-base): do not allocate arrays if resource has no pending async attributes

### :bug: (Bug Fix)

* fix(sdk-metrics): increase the depth of the output to the console such that objects in the metric are printed fully to the console [#4522](https://github.com/open-telemetry/opentelemetry-js/pull/4522) @JacksonWeber
Expand Down
6 changes: 6 additions & 0 deletions experimental/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,15 @@ All notable changes to experimental packages in this project will be documented
* was used internally to keep track of the service client used by the exporter, as a side effect it allowed end-users to modify the gRPC service client that was used
* `compression`
* was used internally to keep track of the compression to use but was unintentionally exposed to the users. It allowed to read and write the value, writing, however, would have no effect.
* feat(api-events)!: removed domain from the Events API [#4569](https://github.com/open-telemetry/opentelemetry-js/pull/4569)
* fix(events-api)!: renamed EventEmitter to EventLogger in the Events API [#4569](https://github.com/open-telemetry/opentelemetry-js/pull/4568)

### :rocket: (Enhancement)

* feat(opentelemetry-instrumentation-xhr): optionally ignore network events [#4571](https://github.com/open-telemetry/opentelemetry-js/pull/4571/) @mustafahaddara
* refactor(instr-http): use exported strings for semconv. [#4573](https://github.com/open-telemetry/opentelemetry-js/pull/4573/) @JamieDanielson
* perf(instrumentation-http): remove obvious temp allocations [#4576](https://github.com/open-telemetry/opentelemetry-js/pull/4576) @Samuron
* feat(sdk-node): add `HostDetector` as default resource detector

### :bug: (Bug Fix)

Expand All @@ -33,6 +37,8 @@ All notable changes to experimental packages in this project will be documented

### :books: (Refine Doc)

* docs(instr-http): document semantic conventions and attributes in use. [#4587](https://github.com/open-telemetry/opentelemetry-js/pull/4587/) @JamieDanielson

### :house: (Internal)

## 0.49.1
Expand Down
18 changes: 9 additions & 9 deletions experimental/packages/api-events/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,18 +28,18 @@ If you are writing an instrumentation library, or prefer to call the API methods
```javascript
const api = require("@opentelemetry/api-events");

/* A specific implementation of EventEmitterProvider comes from an SDK */
const eventEmitterProvider = createEventEmitterProvider();
/* A specific implementation of EventLoggerProvider comes from an SDK */
const eventLoggerProvider = createEventLoggerProvider();

/* Initialize EventEmitterProvider */
api.events.setGlobalEventEmitterProvider(eventEmitterProvider);
/* returns eventEmitterProvider (no-op if a working provider has not been initialized) */
api.events.getEventEmitterProvider();
/* returns an event emitter from the registered global event emitter provider (no-op if a working provider has not been initialized) */
const eventEmitter = api.events.getEventEmitter(name, version);
/* Initialize EventLoggerProvider */
api.events.setGlobalEventLoggerProvider(eventLoggerProvider);
/* returns eventLoggerProvider (no-op if a working provider has not been initialized) */
api.events.getEventLoggerProvider();
/* returns an event logger from the registered global event logger provider (no-op if a working provider has not been initialized) */
const eventLogger = api.events.getEventLogger(name, version);

// logging an event in an instrumentation library
eventEmitter.emit({ name: 'event-name', domain: 'event-domain' });
eventLogger.emit({ name: 'event-name' });
```

## Useful links
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@
* limitations under the License.
*/

import { EventEmitter } from './types/EventEmitter';
import { EventLogger } from './types/EventLogger';
import { Event } from './types/Event';

export class NoopEventEmitter implements EventEmitter {
export class NoopEventLogger implements EventLogger {
emit(_event: Event): void {}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,19 @@
* limitations under the License.
*/

import { EventEmitterProvider } from './types/EventEmitterProvider';
import { EventEmitter } from './types/EventEmitter';
import { EventEmitterOptions } from './types/EventEmitterOptions';
import { NoopEventEmitter } from './NoopEventEmitter';
import { EventLoggerProvider } from './types/EventLoggerProvider';
import { EventLogger } from './types/EventLogger';
import { EventLoggerOptions } from './types/EventLoggerOptions';
import { NoopEventLogger } from './NoopEventLogger';

export class NoopEventEmitterProvider implements EventEmitterProvider {
getEventEmitter(
export class NoopEventLoggerProvider implements EventLoggerProvider {
getEventLogger(
_name: string,
_domain: string,
_version?: string | undefined,
_options?: EventEmitterOptions | undefined
): EventEmitter {
return new NoopEventEmitter();
_options?: EventLoggerOptions | undefined
): EventLogger {
return new NoopEventLogger();
}
}

export const NOOP_EVENT_EMITTER_PROVIDER = new NoopEventEmitterProvider();
export const NOOP_EVENT_LOGGER_PROVIDER = new NoopEventLoggerProvider();
48 changes: 21 additions & 27 deletions experimental/packages/api-events/src/api/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ import {
_global,
makeGetter,
} from '../internal/global-utils';
import { EventEmitterProvider } from '../types/EventEmitterProvider';
import { NOOP_EVENT_EMITTER_PROVIDER } from '../NoopEventEmitterProvider';
import { EventEmitter } from '../types/EventEmitter';
import { EventEmitterOptions } from '../types/EventEmitterOptions';
import { EventLoggerProvider } from '../types/EventLoggerProvider';
import { NOOP_EVENT_LOGGER_PROVIDER } from '../NoopEventLoggerProvider';
import { EventLogger } from '../types/EventLogger';
import { EventLoggerOptions } from '../types/EventLoggerOptions';

export class EventsAPI {
private static _instance?: EventsAPI;
Expand All @@ -38,54 +38,48 @@ export class EventsAPI {
return this._instance;
}

public setGlobalEventEmitterProvider(
provider: EventEmitterProvider
): EventEmitterProvider {
public setGlobalEventLoggerProvider(
provider: EventLoggerProvider
): EventLoggerProvider {
if (_global[GLOBAL_EVENTS_API_KEY]) {
return this.getEventEmitterProvider();
return this.getEventLoggerProvider();
}

_global[GLOBAL_EVENTS_API_KEY] = makeGetter<EventEmitterProvider>(
_global[GLOBAL_EVENTS_API_KEY] = makeGetter<EventLoggerProvider>(
API_BACKWARDS_COMPATIBILITY_VERSION,
provider,
NOOP_EVENT_EMITTER_PROVIDER
NOOP_EVENT_LOGGER_PROVIDER
);

return provider;
}

/**
* Returns the global event emitter provider.
* Returns the global event logger provider.
*
* @returns EventEmitterProvider
* @returns EventLoggerProvider
*/
public getEventEmitterProvider(): EventEmitterProvider {
public getEventLoggerProvider(): EventLoggerProvider {
return (
_global[GLOBAL_EVENTS_API_KEY]?.(API_BACKWARDS_COMPATIBILITY_VERSION) ??
NOOP_EVENT_EMITTER_PROVIDER
NOOP_EVENT_LOGGER_PROVIDER
);
}

/**
* Returns a event emitter from the global event emitter provider.
* Returns a event logger from the global event logger provider.
*
* @returns EventEmitter
* @returns EventLogger
*/
public getEventEmitter(
public getEventLogger(
name: string,
domain: string,
version?: string,
options?: EventEmitterOptions
): EventEmitter {
return this.getEventEmitterProvider().getEventEmitter(
name,
domain,
version,
options
);
options?: EventLoggerOptions
): EventLogger {
return this.getEventLoggerProvider().getEventLogger(name, version, options);
}

/** Remove the global event emitter provider */
/** Remove the global event logger provider */
public disable(): void {
delete _global[GLOBAL_EVENTS_API_KEY];
}
Expand Down
6 changes: 3 additions & 3 deletions experimental/packages/api-events/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
* limitations under the License.
*/

export * from './types/EventEmitter';
export * from './types/EventEmitterProvider';
export * from './types/EventLogger';
export * from './types/EventLoggerProvider';
export * from './types/Event';
export * from './types/EventEmitterOptions';
export * from './types/EventLoggerOptions';

import { EventsAPI } from './api/events';
export const events = EventsAPI.getInstance();
4 changes: 2 additions & 2 deletions experimental/packages/api-events/src/internal/global-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
* limitations under the License.
*/

import { EventEmitterProvider } from '../types/EventEmitterProvider';
import { EventLoggerProvider } from '../types/EventLoggerProvider';
import { _globalThis } from '../platform';

export const GLOBAL_EVENTS_API_KEY = Symbol.for(
Expand All @@ -23,7 +23,7 @@ export const GLOBAL_EVENTS_API_KEY = Symbol.for(

type Get<T> = (version: number) => T;
type OtelGlobal = Partial<{
[GLOBAL_EVENTS_API_KEY]: Get<EventEmitterProvider>;
[GLOBAL_EVENTS_API_KEY]: Get<EventLoggerProvider>;
}>;

export const _global = _globalThis as OtelGlobal;
Expand Down
40 changes: 0 additions & 40 deletions experimental/packages/api-events/src/types/EventEmitterProvider.ts

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import { Event } from './Event';

export interface EventEmitter {
export interface EventLogger {
/**
* Emit an event. This method should only be used by instrumentations emitting events.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import { Attributes } from '@opentelemetry/api';

export interface EventEmitterOptions {
export interface EventLoggerOptions {
/**
* The schemaUrl of the tracer or instrumentation library
* @default ''
Expand Down
38 changes: 38 additions & 0 deletions experimental/packages/api-events/src/types/EventLoggerProvider.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* 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 { EventLogger } from './EventLogger';
import { EventLoggerOptions } from './EventLoggerOptions';

/**
* A registry for creating named {@link EventLogger}s.
*/
export interface EventLoggerProvider {
/**
* Returns an EventLogger, creating one if one with the given name, version, and
* schemaUrl pair is not already created.
*
* @param name The name of the event logger or instrumentation library.
* @param version The version of the event logger or instrumentation library.
* @param options The options of the event logger or instrumentation library.
* @returns EventLogger An event logger with the given name and version.
*/
getEventLogger(
name: string,
version?: string,
options?: EventLoggerOptions
): EventLogger;
}
Loading

0 comments on commit 2f1f83a

Please sign in to comment.