getWorkerPoolStats method
Returns a Dart-side snapshot of worker pool routing and health counters.
Implementation
AsyncWorkerPoolStats getWorkerPoolStats() {
var activeRequests = 0;
var pendingRequests = 0;
var totalRouted = 0;
var completedRequests = 0;
var failedRequests = 0;
var timeouts = 0;
var fallbacksToBlocking = 0;
var cancelAttempts = 0;
var cancelSucceeded = 0;
var cancelUnsupported = 0;
var latencyTotalMicros = 0;
var latencyMaxMicros = 0;
var queueWaitTotalMicros = 0;
var queueWaitMaxMicros = 0;
var executionTotalMicros = 0;
var executionMaxMicros = 0;
final workers = List<AsyncWorkerStats>.generate(
_workers.length,
(index) {
final worker = _workers[index];
activeRequests += worker.activeRequests;
pendingRequests += worker.pendingRequests.length;
totalRouted += worker.totalRouted;
completedRequests += worker.completedRequests;
failedRequests += worker.failedRequests;
timeouts += worker.timeouts;
fallbacksToBlocking += worker.fallbacksToBlocking;
cancelAttempts += worker.cancelAttempts;
cancelSucceeded += worker.cancelSucceeded;
cancelUnsupported += worker.cancelUnsupported;
latencyTotalMicros += worker.latencyTotalMicros;
if (worker.latencyMaxMicros > latencyMaxMicros) {
latencyMaxMicros = worker.latencyMaxMicros;
}
queueWaitTotalMicros += worker.queueWaitTotalMicros;
if (worker.queueWaitMaxMicros > queueWaitMaxMicros) {
queueWaitMaxMicros = worker.queueWaitMaxMicros;
}
executionTotalMicros += worker.executionTotalMicros;
if (worker.executionMaxMicros > executionMaxMicros) {
executionMaxMicros = worker.executionMaxMicros;
}
return _statsForWorker(worker);
},
growable: false,
);
final completed = completedRequests + failedRequests;
return AsyncWorkerPoolStats(
workerCount: workerCount,
activeRequests: activeRequests,
pendingRequests: pendingRequests,
totalRouted: totalRouted,
completedRequests: completedRequests,
failedRequests: failedRequests,
timeouts: timeouts,
fallbacksToBlocking: fallbacksToBlocking,
cancelAttempts: cancelAttempts,
cancelSucceeded: cancelSucceeded,
cancelUnsupported: cancelUnsupported,
latencyAvgMicros: completed == 0 ? 0 : latencyTotalMicros ~/ completed,
latencyP95Micros: _aggregateP95(_WorkerMetricSample.latency),
latencyMaxMicros: latencyMaxMicros,
queueWaitAvgMicros:
completed == 0 ? 0 : queueWaitTotalMicros ~/ completed,
queueWaitP95Micros: _aggregateP95(_WorkerMetricSample.queueWait),
queueWaitMaxMicros: queueWaitMaxMicros,
executionAvgMicros:
completed == 0 ? 0 : executionTotalMicros ~/ completed,
executionP95Micros: _aggregateP95(_WorkerMetricSample.execution),
executionMaxMicros: executionMaxMicros,
workers: workers,
);
}