You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

155 lines
3.7 KiB

'use strict';
/**
* The base class for all monitoring events published from the connection pool
*
* @property {number} time A timestamp when the event was created
* @property {string} address The address (host/port pair) of the pool
*/
class ConnectionPoolMonitoringEvent {
constructor(pool) {
this.time = new Date();
this.address = pool.address;
}
}
/**
* An event published when a connection pool is created
*
* @property {Object} options The options used to create this connection pool
*/
class ConnectionPoolCreatedEvent extends ConnectionPoolMonitoringEvent {
constructor(pool) {
super(pool);
this.options = pool.options;
}
}
/**
* An event published when a connection pool is closed
*/
class ConnectionPoolClosedEvent extends ConnectionPoolMonitoringEvent {
constructor(pool) {
super(pool);
}
}
/**
* An event published when a connection pool creates a new connection
*
* @property {number} connectionId A monotonically increasing, per-pool id for the newly created connection
*/
class ConnectionCreatedEvent extends ConnectionPoolMonitoringEvent {
constructor(pool, connection) {
super(pool);
this.connectionId = connection.id;
}
}
/**
* An event published when a connection is ready for use
*
* @property {number} connectionId The id of the connection
*/
class ConnectionReadyEvent extends ConnectionPoolMonitoringEvent {
constructor(pool, connection) {
super(pool);
this.connectionId = connection.id;
}
}
/**
* An event published when a connection is closed
*
* @property {number} connectionId The id of the connection
* @property {string} reason The reason the connection was closed
*/
class ConnectionClosedEvent extends ConnectionPoolMonitoringEvent {
constructor(pool, connection, reason) {
super(pool);
this.connectionId = connection.id;
this.reason = reason || 'unknown';
}
}
/**
* An event published when a request to check a connection out begins
*/
class ConnectionCheckOutStartedEvent extends ConnectionPoolMonitoringEvent {
constructor(pool) {
super(pool);
}
}
/**
* An event published when a request to check a connection out fails
*
* @property {string} reason The reason the attempt to check out failed
*/
class ConnectionCheckOutFailedEvent extends ConnectionPoolMonitoringEvent {
constructor(pool, reason) {
super(pool);
this.reason = reason;
}
}
/**
* An event published when a connection is checked out of the connection pool
*
* @property {number} connectionId The id of the connection
*/
class ConnectionCheckedOutEvent extends ConnectionPoolMonitoringEvent {
constructor(pool, connection) {
super(pool);
this.connectionId = connection.id;
}
}
/**
* An event published when a connection is checked into the connection pool
*
* @property {number} connectionId The id of the connection
*/
class ConnectionCheckedInEvent extends ConnectionPoolMonitoringEvent {
constructor(pool, connection) {
super(pool);
this.connectionId = connection.id;
}
}
/**
* An event published when a connection pool is cleared
*/
class ConnectionPoolClearedEvent extends ConnectionPoolMonitoringEvent {
constructor(pool) {
super(pool);
}
}
const CMAP_EVENT_NAMES = [
'connectionPoolCreated',
'connectionPoolClosed',
'connectionCreated',
'connectionReady',
'connectionClosed',
'connectionCheckOutStarted',
'connectionCheckOutFailed',
'connectionCheckedOut',
'connectionCheckedIn',
'connectionPoolCleared'
];
module.exports = {
CMAP_EVENT_NAMES,
ConnectionPoolCreatedEvent,
ConnectionPoolClosedEvent,
ConnectionCreatedEvent,
ConnectionReadyEvent,
ConnectionClosedEvent,
ConnectionCheckOutStartedEvent,
ConnectionCheckOutFailedEvent,
ConnectionCheckedOutEvent,
ConnectionCheckedInEvent,
ConnectionPoolClearedEvent
};