def aggregatePointsPerMetric()

in src/main/scala/com/gu/mobile/content/notifications/metrics/MetricsActor.scala [36:57]


  def aggregatePointsPerMetric(metricPoints: List[MetricDataPoint], metricName: String): MetricDatum = {
    val (sum, min, max) = metricPoints.foldLeft((0d, Double.MaxValue, Double.MinValue)) {
      case ((aggSum, aggMin, aggMax), dataPoint) =>
        (aggSum + dataPoint.value, aggMin.min(dataPoint.value), aggMax.max(dataPoint.value))
    }

    val statSet = new StatisticSet
    statSet.setMaximum(max)
    statSet.setMinimum(min)
    statSet.setSum(sum)
    statSet.setSampleCount(metricPoints.size.toDouble)

    val unit = metricPoints.headOption.map(_.unit).getOrElse(StandardUnit.None)

    val metric = new MetricDatum()
    metric.setMetricName(metricName)
    metric.setUnit(unit)
    metric.setStatisticValues(statSet)

    metric

  }