membership-attribute-service/app/monitoring/CloudWatch.scala (28 lines of code) (raw):

package monitoring import com.amazonaws.handlers.AsyncHandler import com.amazonaws.services.cloudwatch.AmazonCloudWatchAsync import com.amazonaws.services.cloudwatch.model._ import com.gu.monitoring.SafeLogging class CloudWatch(stage: String, application: String, service: String, cloudwatch: AmazonCloudWatchAsync) extends SafeLogging { private lazy val stageDimension = new Dimension().withName("Stage").withValue(stage) private lazy val servicesDimension = new Dimension().withName("Services").withValue(service) private val mandatoryDimensions = Seq(stageDimension, servicesDimension) protected[monitoring] def put(name: String, count: Double, unit: StandardUnit): Unit = { val metric = new MetricDatum() .withValue(count) .withMetricName(name) .withUnit(unit) .withDimensions(mandatoryDimensions: _*) val request = new PutMetricDataRequest().withNamespace(application).withMetricData(metric) cloudwatch.putMetricDataAsync(request, LoggingAsyncHandler) } } object LoggingAsyncHandler extends AsyncHandler[PutMetricDataRequest, PutMetricDataResult] with SafeLogging { def onError(exception: Exception): Unit = { logger.errorNoPrefix(scrub"CloudWatch PutMetricDataRequest error: ${exception.getMessage}}") } def onSuccess(request: PutMetricDataRequest, result: PutMetricDataResult): Unit = { logger.debug("CloudWatch PutMetricDataRequest - success") } }