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