
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
// Copyright (c) 2021, 2022, Oracle and/or its affiliates.
//-----------------------------------------------------------------------------
//
// You may not use the identified files except in compliance with the Apache
// License, Version 2.0 (the "License.")
//
// You may obtain a copy of the License at
// http://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.
//
//-----------------------------------------------------------------------------
'use strict';
//-----------------------------------------------------------------------------
// class PoolStatistics
// collection of statistics metrics for Pool object
//-----------------------------------------------------------------------------
class PoolStatistics {
constructor(pool) {
let averageTimeInQueue = 0;
if (pool._totalRequestsEnqueued !== 0) {
averageTimeInQueue = Math.round(pool._totalTimeInQueue /
pool._totalRequestsEnqueued);
}
this.gatheredDate = Date.now ();
this.upTime = this.gatheredDate - pool._createdDate;
this.upTimeSinceReset = this.gatheredDate - pool._timeOfReset;
this.connectionRequests = pool._totalConnectionRequests;
this.requestsEnqueued = pool._totalRequestsEnqueued;
this.requestsDequeued = pool._totalRequestsDequeued;
this.failedRequests = pool._totalFailedRequests;
this.rejectedRequests = pool._totalRequestsRejected;
this.requestTimeouts = pool._totalRequestTimeouts;
this.maximumQueueLength = pool._maximumQueueLength;
this.currentQueueLength = pool._connRequestQueue.length;
this.timeInQueue = pool._totalTimeInQueue;
this.minimumTimeInQueue = pool._minTimeInQueue;
this.maximumTimeInQueue = pool._maxTimeInQueue;
this.averageTimeInQueue = averageTimeInQueue;
this.connectionsInUse = pool.connectionsInUse;
this.connectionsOpen = pool.connectionsOpen;
this.connectString = pool.connectString;
this.edition = pool.edition;
this.events = pool.events;
this.externalAuth = pool.externalAuth;
this.homogeneous = pool.homogeneous;
this.poolAlias = pool.poolAlias;
this.poolIncrement = pool.poolIncrement;
this.poolMax = pool.poolMax;
this.poolMaxPerShard = pool.poolMaxPerShard;
this.poolMin = pool.poolMin;
this.poolPingInterval = pool.poolPingInterval;
this.poolTimeout = pool.poolTimeout;
this.queueMax = pool.queueMax;
this.queueTimeout = pool.queueTimeout;
this.sodaMetaDataCache = pool.sodaMetaDataCache;
this.stmtCacheSize = pool.stmtCacheSize;
this.user = pool.user;
this.threadPoolSize = process.env.UV_THREADPOOL_SIZE;
}
//---------------------------------------------------------------------------
// logStatistics()
// To print the statistics metrics of the pool
//---------------------------------------------------------------------------
logStatistics() {
console.log('\nPool statistics:');
console.log('...gathered at:', new Date(this.gatheredDate).toISOString());
console.log('...up time (milliseconds):', this.upTime);
console.log('...up time from last reset (milliseconds)',
this.upTimeSinceReset);
console.log('...connection requests:', this.connectionRequests);
console.log('...requests enqueued:', this.requestsEnqueued);
console.log('...requests dequeued:', this.requestsDequeued);
console.log('...requests failed:', this.failedRequests);
console.log('...requests exceeding queueMax:', this.rejectedRequests);
console.log('...requests exceeding queueTimeout:', this.requestTimeouts);
console.log('...current queue length:', this.currentQueueLength);
console.log('...maximum queue length:', this.maximumQueueLength);
console.log('...sum of time in queue (milliseconds):', this.timeInQueue);
console.log('...minimum time in queue (milliseconds):',
this.minimumTimeInQueue);
console.log('...maximum time in queue (milliseconds):',
this.maximumTimeInQueue);
console.log('...average time in queue (milliseconds):',
this.averageTimeInQueue);
console.log('...pool connections in use:', this.connectionsInUse);
console.log('...pool connections open:', this.connectionsOpen);
console.log('Pool attributes:');
console.log('...connectString:', this.connectString);
console.log('...edition:', this.edition);
console.log('...events:', this.events);
console.log('...externalAuth:', this.externalAuth);
console.log('...homogeneous:', this.homogeneous);
console.log('...poolAlias:', this.poolAlias);
console.log('...poolIncrement:', this.poolIncrement);
console.log('...poolMax:', this.poolMax);
console.log('...poolMaxPerShard:', this.poolMaxPerShard);
console.log('...poolMin:', this.poolMin);
console.log('...poolPingInterval (seconds):', this.poolPingInterval);
console.log('...poolTimeout (seconds):', this.poolTimeout);
console.log('...queueMax:', this.queueMax);
console.log('...queueTimeout (milliseconds):', this.queueTimeout);
console.log('...sessionCallback:', this.sessionCallback);
console.log('...sodaMetaDataCache:', this.sodaMetaDataCache);
console.log('...stmtCacheSize:', this.stmtCacheSize);
console.log('...user:', this.user);
console.log('Related environment variables:');
console.log('...UV_THREADPOOL_SIZE:', this.threadPoolSize);
}
}
module.exports = PoolStatistics;