statistics method

Future statistics({
  1. required int startEpoch,
  2. required int stopEpoch,
  3. required StatisticsParams statisticsType,
})

Implementation

Future<dynamic> statistics(
    {required int startEpoch,
    required int stopEpoch,
    required StatisticsParams statisticsType}) async {
  try {
    dynamic data = await getStats(
        startEpoch: startEpoch,
        stopEpoch: stopEpoch,
        statisticsType: statisticsType);
    switch (statisticsType) {
      case StatisticsParams.histogram_burn_rate:
        return List.from(data[StatisticsParams.histogram_burn_rate.name])
            .map((burnRate) => BurnRate.fromJson(burnRate))
            .toList();
      case StatisticsParams.histogram_data_request_composition:
        return List.from(data[
                StatisticsParams.histogram_data_request_composition.name])
            .map((drComposition) => DrComposition.fromJson(drComposition))
            .toList();
      case StatisticsParams.histogram_data_request_lie_rate:
        return List.from(
                data[StatisticsParams.histogram_data_request_lie_rate.name])
            .map((lieRate) => DrLieRate.fromJson(lieRate))
            .toList();
      case StatisticsParams.histogram_data_requests:
        return List.from(data[StatisticsParams.histogram_data_requests.name])
            .map((drHistory) => DrHistory.fromJson(drHistory))
            .toList();
      case StatisticsParams.histogram_value_transfers:
        return data[StatisticsParams.histogram_value_transfers.name];
      case StatisticsParams.list_rollbacks:
        return List.from(data[StatisticsParams.list_rollbacks.name])
            .map((rollback) => Rollback.fromJson(rollback))
            .toList();
      case StatisticsParams.num_unique_data_request_solvers:
        int uniqueDrSolvers =
            data[StatisticsParams.num_unique_data_request_solvers.name];
        return uniqueDrSolvers;
      case StatisticsParams.num_unique_miners:
        int uniqueMiners = data[StatisticsParams.num_unique_miners.name];
        return uniqueMiners;
      case StatisticsParams.percentile_staking_balances:
        List<int> stakingBalances =
            List.from(data['staking']['ars']).map((e) => e as int).toList();
        return stakingBalances;
      case StatisticsParams.top_100_miners:
        List<Miner> topMiners =
            List.from(data[StatisticsParams.top_100_miners.name])
                .map((miner) => Miner.fromJson(miner))
                .toList();
        return topMiners;
      case StatisticsParams.top_100_data_request_solvers:
        List<DrSolver> topDrSolvers = List.from(
                data[StatisticsParams.top_100_data_request_solvers.name])
            .map((miner) => DrSolver.fromJson(miner))
            .toList();
        return topDrSolvers;
    }
  } on ExplorerException catch (e) {
    throw ExplorerException(
        code: e.code, message: '{"statistics": "${e.message}"}');
  }
}