Class AdminCommandStartedEvent

Event emitted when an admin command is started. This is emitted before the initial HTTP request is made.

See AdminCommandEvent for more information about all the common properties available on this event.

Hierarchy (view full)

Constructors

Properties

_propagationState: PropagationState
extraLogInfo: undefined | Record<string, any>

Any extra information that may be useful for debugging.

longRunning: boolean

Whether the command is long-running or not, i.e. requires polling.

method: "GET" | "POST" | "DELETE"

The HTTP method for the request.

methodName: string

The method which invoked the request

name: string

The name of the event (e.g., 'CommandStarted', 'CommandFailed').

params?: Record<string, any>

The query parameters, if any.

path: string

The path for the request, not including the Base URL.

Poor man's sealed class. See BaseClientEvent.permits for more info.

reqBody?: Record<string, any>

The request body, if any.

requestId: string
Overview

A unique identifier for the request that triggered this event.

It helps correlate multiple events occurring within the same request lifecycle.

Disclaimer

High-level operations, such as collection.insertMany(...), may generate multiple requests internally. Each of these requests will have its own unique requestId.

Example

As an example, a CommandStarted event may be emitted when a command is started, and a CommandSucceeded event may be emitted when the command has succeeded. Both of these events will have the same requestId.

If logged to a file (e.g. winston with a file transport and json format), you could then filter all events with the same requestId to see the entire lifecycle of a single command.

Example

// Set up event listeners on the collection
collection.on('commandStarted', (e) => {
console.log(`Command started with requestId: ${e.requestId}`);
});
collection.on('commandSucceeded', (e) => {
console.log(`Command succeeded with requestId: ${e.requestId}`);
});

// Logs:
// - Command started with requestId: dac0d3ba-79e8-4886-87b9-20237c507eba
// - Command succeeded with requestId: dac0d3ba-79e8-4886-87b9-20237c507eba
await collection.insertOne({ name: 'Alice' });

// Logs:
// - Command started with requestId: 1fe46a92-8187-4eaa-a3c2-80a964b68eba
// - Command succeeded with requestId: 1fe46a92-8187-4eaa-a3c2-80a964b68eba
await collection.insertOne({ name: 'Bob' });
timeout: Partial<TimeoutDescriptor>

The timeout for the request, in milliseconds.

timestamp: Date

The timestamp of when the event was created.

formatVerboseTransientKeys: string[]

Methods

  • Overview

    Converts the event to a verbose JSON format, as it would be logged to stdout:verbose/stderr:verbose (if enabled).

    Useful for debugging. The output is pretty-printed JSON with newlines, so perhaps not ideal for structured logging though.

    Returns string

    A JSON string with full event details.

  • Overview

    Stops the event from bubbling up to the parent listener (e.g. CollectionDbDataAPIClient) and prevents any further listeners from being called.

    Returns void

    Example

    db.on('commandStarted', (e) => {
    console.log('Command started (db listener)');
    });

    collection.on('commandStarted', (e) => {
    console.log('Command started (collection listener #1)');
    e.stopImmediatePropagation();
    });

    collection.on('commandStarted', (e) => {
    console.log('Command started (collection listener #2)');
    });

    // Logs:
    // - Command started (collection listener #1)
    collection.insertOne({ name: 'Alice' });

    See

    stopPropagation

  • Overview

    Stops the event from bubbling up to the parent listener (e.g. CollectionDbDataAPIClient).

    Returns void

    Example

    client.on('commandStarted', (e) => {
    console.log('Command started (client listener)');
    });

    db.on('commandStarted', (e) => {
    console.log('Command started (db listener)');
    e.stopPropagation();
    });

    collection.on('commandStarted', (e) => {
    console.log('Command started (collection listener)');
    });

    // Logs:
    // - Command started (collection listener)
    // - Command started (db) listener
    collection.insertOne({ name: 'Alice' });

    See

    stopImmediatePropagation

  • Overview

    Sets the default formatter for all events.

    Useful especially if you want to change the format of events as they're logged to stdout/stderr (see LoggingOutputs).

    See EventFormatter for much more info.

    Disclaimer

    This method sets a static property on the class, so it will affect all instances of BaseClientEvent, regardless of the class. Be careful when using this method in a shared environment.

    Parameters

    • formatter: EventFormatter

      A function that transforms an event into a log string.

    Returns void

    Example

    BaseClientEvent.setDefaultFormatter((event, msg) => `[${event.name}] ${msg}`);