def aggregatePointsPerNamespaceMatches()

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 }
    }
  }