Skip to content

Commit

Permalink
Remove uses of Akka agent
Browse files Browse the repository at this point in the history
Agent has been deprecated for a while.

DurationMetric was never used, so deleted.
  • Loading branch information
davidfurey committed Jan 24, 2024
1 parent 49b25dc commit 71e0949
Show file tree
Hide file tree
Showing 6 changed files with 9 additions and 91 deletions.
25 changes: 0 additions & 25 deletions app/metrics/FrontendMetrics.scala
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,9 @@ package metrics

import java.util.concurrent.atomic.AtomicLong

import akka.agent.Agent
import com.amazonaws.services.cloudwatch.model.StandardUnit
import org.joda.time.DateTime

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import scala.util.Try

sealed trait DataPoint {
Expand Down Expand Up @@ -64,25 +61,3 @@ case class CountMetric(name: String, description: String) extends FrontendMetric
def increment(): Unit = record()
def isEmpty: Boolean = count.get() == 0L
}

case class DurationMetric(name: String, metricUnit: StandardUnit) extends FrontendMetric {

private val dataPoints: Agent[List[DataPoint]] = Agent(List[DurationDataPoint]())

def getDataPoints: List[DataPoint] = dataPoints.get()

def getDataFuture: Future[List[DataPoint]] = dataPoints.future()

def getAndResetDataPoints: List[DataPoint] = {
val points = dataPoints.get()
dataPoints.alter(_.diff(points))
points
}

def putDataPoints(points: List[DataPoint]): Unit = dataPoints.alter(points ::: _)

def record(dataPoint: DurationDataPoint): Unit = dataPoints.alter(dataPoint :: _)

def recordDuration(timeInMillis: Long): Unit = record(DurationDataPoint(timeInMillis, Option(DateTime.now)))
def isEmpty: Boolean = dataPoints.get().isEmpty
}
2 changes: 1 addition & 1 deletion app/metrics/metrics.scala
Original file line number Diff line number Diff line change
Expand Up @@ -165,5 +165,5 @@ class CloudWatchApplicationMetrics(appName: String, stage: String, cloudWatch: C
}

logger.info("Starting cloudwatch metrics")
scheduler.schedule(initialDelay = 1.seconds, interval = 1.minute) { report() }
scheduler.scheduleWithFixedDelay(initialDelay = 1.seconds, delay = 1.minute) { () => report() }
}
13 changes: 6 additions & 7 deletions app/services/ConfigAgent.scala
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package services

import akka.agent.Agent
import java.util.concurrent.atomic.AtomicReference
import com.gu.facia.api.models.CollectionConfig
import com.gu.facia.client.models.{FrontJson, ConfigJson => Config}
import com.gu.facia.client.models.{ConfigJson => Config}
import conf.ApplicationConfiguration
import logging.Logging
import permissions.{EditionsPermission, PermissionsPriority}

import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
Expand All @@ -14,8 +13,8 @@ import scala.util.{Failure, Success}
case class CollectionConfigWithId(id: String, config: CollectionConfig)

class ConfigAgent(val config: ApplicationConfiguration, val frontsApi: FrontsApi) extends Logging {
private lazy val configAgent = Agent[Option[Config]](None)

private val configAgent: AtomicReference[Option[Config]] = new AtomicReference(None)
def get = configAgent.get()

def refresh() = {
Expand All @@ -24,16 +23,16 @@ class ConfigAgent(val config: ApplicationConfiguration, val frontsApi: FrontsApi
case Success(config) => logger.info(s"Successfully got config")
case Failure(t) => logger.error(s"Getting config failed with $t", t)
}
futureConfig.map(Option.apply).map(configAgent.send)
futureConfig.map(Option.apply).map(configAgent.set)
}

def refreshWith(config: Config): Unit = {
configAgent.send(Option(config))
configAgent.set(Option(config))
}

def refreshAndReturn(): Future[Option[Config]] =
frontsApi.amazonClient.config
.flatMap(config => configAgent.alter{_ => Option(config)})
.map { config => configAgent.set(Option(config)); Option(config) }
.recover{case err =>
logger.warn("Falling back to current ConfigAgent contents on refreshAndReturn", err)
configAgent.get()}
Expand Down
4 changes: 2 additions & 2 deletions app/switchboard/Switchboard.scala
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class Lifecycle(conf: SwitchboardConfiguration, scheduler: Scheduler) extends Lo
lazy val client: S3client = new S3client(conf, conf.endpoint)

logger.info("Starting switchboard cache")
scheduler.schedule(0.seconds, 1.minute) { refreshSwitches() }
scheduler.scheduleOnce(1.seconds) { refreshSwitches() }
scheduler.scheduleWithFixedDelay(0.seconds, 1.minute) { () => refreshSwitches() }
scheduler.scheduleWithFixedDelay(0.seconds, 1.seconds) { () => refreshSwitches() }

def refreshSwitches(): Unit = {
logger.info("Refreshing switches from switchboard")
Expand Down
2 changes: 0 additions & 2 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ ThisBuild / scalaVersion := "2.13.5"

import com.gu.riffraff.artifact.BuildInfo
import sbt.Resolver
import sbt.io.Path._

debianPackageDependencies := Seq("openjdk-8-jre-headless")

Expand Down Expand Up @@ -78,7 +77,6 @@ libraryDependencies ++= Seq(
filters,
evolutions,
jdbc,
"com.typesafe.akka" %% "akka-agent" % "2.5.23",
"com.amazonaws" % "aws-java-sdk-rds" % awsVersion,
"com.amazonaws" % "aws-java-sdk-core" % awsVersion,
"com.amazonaws" % "aws-java-sdk-cloudwatch" % awsVersion,
Expand Down
54 changes: 0 additions & 54 deletions test/metrics/DurationMetricTest.scala

This file was deleted.

0 comments on commit 71e0949

Please sign in to comment.