def aggregatePoint()

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


  def aggregatePoint(points: List[MetricDataPoint]): Unit = {
    if (points.isEmpty) {
      logger.debug(s"No metrics sent to cloudwatch")
    } else {
      logger.debug(s"Sending metrics to cloudwatch")
      val metricsPerNameSpaceMatches = aggregatePointsPerNamespaceMatches(points)

      val metricsCount = metricsPerNameSpaceMatches.foldLeft(0) { case (sum, (_, batch)) => sum + batch.size }
      val batchesCount = metricsPerNameSpaceMatches.size
      val namespacesCount = metricsPerNameSpaceMatches.map(_._1).toSet

      try {
        metricsPerNameSpaceMatches.foreach {
          case (namespace, awsMetricsBatch) =>
            val metricRequest = new PutMetricDataRequest()
            metricRequest.setNamespace(s"$stage/$namespace")
            metricRequest.setMetricData(awsMetricsBatch.asJavaCollection)
            cloudWatch.putMetricData(metricRequest)
        }
        logger.info(s"Sent metrics to cloudwatch. " +
          s"Data points: ${points.size}, " +
          s"Metrics: $metricsCount, " +
          s"Namespaces: $namespacesCount, " +
          s"Batches: $batchesCount")
      } catch {
        case e: Exception => sys.error(s"Unable to send metrics to cloud ${e.getMessage}")
      }
    }
  }