Event emitted when the Data API returned a warning for some command.

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

Hierarchy (view full)

Constructors

Properties

_propagationState: PropagationState
command: Record<string, any>

The command object. Equal to the response body of the HTTP request.

Note that this is the actual raw command object; it's not necessarily 1:1 with methods called on the collection/db.

Example

{
  insertOne: { document: { name: 'John' } }
}
commandName: string

The command name.

This is the key of the command object. For example, if the command object is { insertOne: { document: { name: 'John' } } }, the command name is insertOne.

extraLogInfo: undefined | Record<string, any>

Any extra information that may be useful for debugging.

keyspace: null | string

The keyspace the command is being run in.

name: string

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

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

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' });
source?: string

The table/collection the command is being run on, if applicable.

The target of the command.

timestamp: Date

The timestamp of when the event was created.

url: string

The URL the command is being sent to.

The warnings that occurred.

formatVerboseTransientKeys: (keyof CommandEvent)[] = ...

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