Event emitted when an admin command has errored.

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

Hierarchy (view full)

Constructors

Properties

_propagationState: PropagationState
duration: number

The duration of the command, in milliseconds.

error: Error

The error that occurred.

Typically, some DevOpsAPIError, commonly a DevOpsAPIResponseError or sometimes a DevOpsUnexpectedStateError

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' });
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}`);