media-api/app/lib/MediaApiMetrics.scala (31 lines of code) (raw):

package lib import org.apache.pekko.actor.ActorSystem import com.amazonaws.services.cloudwatch.model.Dimension import com.gu.mediaservice.lib.auth.{ApiAccessor, Syndication} import com.gu.mediaservice.lib.metrics.CloudWatchMetrics import play.api.inject.ApplicationLifecycle import scala.concurrent.ExecutionContext class MediaApiMetrics(config: MediaApiConfig, actorSystem: ActorSystem, applicationLifecycle: ApplicationLifecycle)(implicit ec: ExecutionContext) extends CloudWatchMetrics(s"${config.stage}/MediaApi", config, actorSystem, applicationLifecycle) { val searchQueries = new TimeMetric("ElasticSearch") def searchTypeDimension(value: String): Dimension = new Dimension().withName("SearchType").withValue(value) sealed trait DownloadType { val metricName: String } case object OriginalDownloadType extends DownloadType { val metricName = "OriginalImageDownload" } case object OptimisedDownloadType extends DownloadType { val metricName = "OptimisedImageDownload" } def incrementImageDownload(apiKey: ApiAccessor, downloadType: DownloadType) = { val metric = new CountMetric(apiKey.tier.toString) // CW Metrics have a maximum of 10 dimensions per metric. // Create a separate dimension per syndication partner and group other Tier types together. val dimensionValue: String = apiKey.tier match { case Syndication => apiKey.identity case _ => apiKey.tier.toString } val dimension = new Dimension().withName(downloadType.metricName).withValue(dimensionValue) metric.increment(List(dimension)) } }