getStatistics method

SubscriptionStatistics getStatistics()

Get subscription statistics.

Implementation

SubscriptionStatistics getStatistics() {
  final subscriptions = _activeSubscriptions.values.toList();

  if (subscriptions.isEmpty) {
    return SubscriptionStatistics(
      totalSubscriptions: 0,
      totalEventCount: 0,
      averageEventsPerSubscription: 0,
      oldestSubscriptionAgeSeconds: 0,
      newestSubscriptionAgeSeconds: 0,
    );
  }

  final now = DateTime.now();
  final totalEvents =
      subscriptions.fold<int>(0, (sum, sub) => sum + sub.eventCount);
  final ages = subscriptions
      .map((sub) => now.difference(sub.createdAt).inSeconds)
      .toList();

  return SubscriptionStatistics(
    totalSubscriptions: subscriptions.length,
    totalEventCount: totalEvents,
    averageEventsPerSubscription: totalEvents / subscriptions.length,
    oldestSubscriptionAgeSeconds: ages.reduce((a, b) => a > b ? a : b),
    newestSubscriptionAgeSeconds: ages.reduce((a, b) => a < b ? a : b),
  );
}