getWorkerPoolStats method

AsyncWorkerPoolStats getWorkerPoolStats()
inherited

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