in src/main/scala/com/gu/mobile/content/notifications/metrics/MetricsActor.scala [59:77]
def aggregatePointsPerNamespaceMatches(points: List[MetricDataPoint]): List[(String, List[MetricDatum])] = {
val pointsPerMetric = points.groupBy { point => (point.namespage, point.name) }.toList
val allAwsMetrics = pointsPerMetric.map {
case ((namespace, metricName), metricPoints) =>
namespace -> aggregatePointsPerMetric(metricPoints, metricName)
}
val metricsPerNamespace = allAwsMetrics.foldLeft(Map.empty[String, List[MetricDatum]]) {
case (aggregate, (namespace, awsPoint)) =>
val points = aggregate.getOrElse(namespace, Nil)
aggregate + (namespace -> (awsPoint :: points))
}
metricsPerNamespace.toList.flatMap {
case (namespace, awsMetrics) =>
val awsMetricsBatches = awsMetrics.grouped(20)
awsMetricsBatches.map { batch => namespace -> batch }
}
}