diff --git a/app/conf/Configuration.scala b/app/conf/Configuration.scala index 05971f5..0fa4888 100644 --- a/app/conf/Configuration.scala +++ b/app/conf/Configuration.scala @@ -16,7 +16,7 @@ import play.api.{Configuration => PlayConfiguration} import story_packages.services.Logging import scala.language.reflectiveCalls -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ class BadConfigurationException(msg: String) extends RuntimeException(msg) diff --git a/app/story_packages/metrics/CloudWatch.scala b/app/story_packages/metrics/CloudWatch.scala index 9d358b9..03d983b 100644 --- a/app/story_packages/metrics/CloudWatch.scala +++ b/app/story_packages/metrics/CloudWatch.scala @@ -7,7 +7,7 @@ import com.amazonaws.services.cloudwatch.model._ import conf.ApplicationConfiguration import story_packages.services.Logging -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ class CloudWatch(config: ApplicationConfiguration) extends Logging { diff --git a/app/story_packages/metrics/FrontendMetrics.scala b/app/story_packages/metrics/FrontendMetrics.scala index 9c9be9f..93c7deb 100644 --- a/app/story_packages/metrics/FrontendMetrics.scala +++ b/app/story_packages/metrics/FrontendMetrics.scala @@ -26,7 +26,7 @@ case class FrontendStatisticSet(metric: FrontendMetric, datapoints: List[DataPoi lazy val sampleCount: Double = datapoints.size lazy val maximum: Double = Try(datapoints.maxBy(_.value).value).getOrElse(0L).toDouble lazy val minimum: Double = Try(datapoints.minBy(_.value).value).getOrElse(0L).toDouble - lazy val sum: Double = datapoints.map(_.value).sum + lazy val sum: Double = datapoints.map(_.value).sum.toDouble lazy val average: Double = Try(sum / sampleCount).toOption.getOrElse(0L) diff --git a/app/story_packages/metrics/metrics.scala b/app/story_packages/metrics/metrics.scala index 96fe76e..b896148 100644 --- a/app/story_packages/metrics/metrics.scala +++ b/app/story_packages/metrics/metrics.scala @@ -11,6 +11,7 @@ import story_packages.services.Logging import scala.concurrent.ExecutionContext.Implicits.global import scala.concurrent.duration._ import scala.jdk.CollectionConverters._ +import scala.collection.mutable.Buffer object SystemMetrics { @@ -22,17 +23,17 @@ object SystemMetrics { def gcCount: Double = { val totalGcCount = bean.getCollectionCount - totalGcCount - lastGcCount.getAndSet(totalGcCount) + (totalGcCount - lastGcCount.getAndSet(totalGcCount)).toDouble } def gcTime: Double = { val totalGcTime = bean.getCollectionTime - totalGcTime - lastGcTime.getAndSet(totalGcTime) + (totalGcTime - lastGcTime.getAndSet(totalGcTime)).toDouble } } - lazy val garbageCollectors: Seq[GcRateMetric] = ManagementFactory.getGarbageCollectorMXBeans.asScala.map(new GcRateMetric(_)) + lazy val garbageCollectors: Seq[GcRateMetric] = ManagementFactory.getGarbageCollectorMXBeans.asScala.map(new GcRateMetric(_)).toSeq // divide by 1048576 to convert bytes to MB diff --git a/app/story_packages/services/Database.scala b/app/story_packages/services/Database.scala index fdae3a0..310f357 100644 --- a/app/story_packages/services/Database.scala +++ b/app/story_packages/services/Database.scala @@ -14,7 +14,7 @@ import conf.ApplicationConfiguration import story_packages.updates.ReindexPage import story_packages.util.Identity._ -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ import scala.concurrent.Future import scala.util.{Failure, Success, Try} diff --git a/app/story_packages/services/DynamoReindexJobs.scala b/app/story_packages/services/DynamoReindexJobs.scala index 4bbd0bb..48a1766 100644 --- a/app/story_packages/services/DynamoReindexJobs.scala +++ b/app/story_packages/services/DynamoReindexJobs.scala @@ -9,7 +9,7 @@ import story_packages.metrics.ReindexMetrics import conf.ApplicationConfiguration import story_packages.updates._ -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ class DynamoReindexJobs(config: ApplicationConfiguration) extends Logging { private lazy val client = diff --git a/app/story_packages/updates/AuditingUpdates.scala b/app/story_packages/updates/AuditingUpdates.scala index 0ffe2d3..eafb7dc 100644 --- a/app/story_packages/updates/AuditingUpdates.scala +++ b/app/story_packages/updates/AuditingUpdates.scala @@ -5,7 +5,7 @@ import play.api.libs.json.Json import conf.ApplicationConfiguration import story_packages.services.Logging -import scala.collection.JavaConverters._ +import scala.jdk.CollectionConverters._ class AuditingUpdates(config: ApplicationConfiguration) extends Logging { diff --git a/app/story_packages/util/ContentUpgrade.scala b/app/story_packages/util/ContentUpgrade.scala index 7b23951..fc23d43 100644 --- a/app/story_packages/util/ContentUpgrade.scala +++ b/app/story_packages/util/ContentUpgrade.scala @@ -46,8 +46,8 @@ object ContentUpgrade { def upgradeItem(json: JValue): JValue = { Try({ val jsonString = JsonMethods.compact(JsonMethods.render(json)) - val maybeParsedJson: Option[Json] = parser.parse(jsonString).right.toOption - val maybeCapiContent: Option[Content] = maybeParsedJson.flatMap(json => json.as[Content].right.toOption) + val maybeParsedJson: Option[Json] = parser.parse(jsonString).toOption + val maybeCapiContent: Option[Content] = maybeParsedJson.flatMap(json => json.as[Content].toOption) (json, maybeCapiContent) match { case (jsObject: JObject, Some(content)) => diff --git a/app/story_packages/util/Enumerators.scala b/app/story_packages/util/Enumerators.scala deleted file mode 100644 index 1951d1e..0000000 --- a/app/story_packages/util/Enumerators.scala +++ /dev/null @@ -1,14 +0,0 @@ -package story_packages.util - -import play.api.libs.iteratee.Enumerator - -import scala.concurrent.ExecutionContext.Implicits.global -import scala.concurrent.Future - -object Enumerators { - /** Sequentially enumerate the results of applying f to each element of as */ - def enumerate[A, B](as: Seq[A])(f: A => Future[B]) = Enumerator.unfoldM(as) { - case first :: rest => f(first) map { b => Some(rest -> b) } - case Nil => Future.successful(None) - } -} diff --git a/app/story_packages/util/SanitizeInput.scala b/app/story_packages/util/SanitizeInput.scala index 93cb461..af8fb17 100644 --- a/app/story_packages/util/SanitizeInput.scala +++ b/app/story_packages/util/SanitizeInput.scala @@ -10,7 +10,7 @@ object SanitizeInput { def fromString(s: String) = sanitizeRegex.replaceAllIn(s, "") def fromConfigSeo(config: ConfigJson): ConfigJson = { - config.copy(fronts = config.fronts.mapValues(sanitizeSeoInputFromFront)) + config.copy(fronts = config.fronts.view.mapValues(sanitizeSeoInputFromFront).toMap) } private def sanitizeSeoInputFromFront(front: FrontJson): FrontJson = front.copy( diff --git a/build.sbt b/build.sbt index c660a93..4ec6e12 100644 --- a/build.sbt +++ b/build.sbt @@ -10,7 +10,7 @@ packageSummary := "Story packages" packageDescription := "Guardian story packages editor" -scalaVersion := "2.12.16" +scalaVersion := "2.13.14" import sbt.Resolver @@ -28,7 +28,7 @@ Universal / javaOptions ++= Seq( s"-J-Xloggc:/var/log/${packageName.value}/gc.log" ) -scalacOptions := Seq("-unchecked", "-deprecation", "-target:jvm-1.8", +scalacOptions := Seq("-unchecked", "-deprecation", "-release:8", "-Xcheckinit", "-encoding", "utf8", "-feature", "-Xfatal-warnings") Compile / doc / sources := Seq.empty @@ -75,12 +75,11 @@ libraryDependencies ++= jacksonOverrides ++ Seq( "com.gu" %% "fapi-client-play28" % "4.0.4", "com.gu" %% "pan-domain-auth-play_2-8" % "4.0.0", "com.gu" %% "story-packages-model" % "2.2.0", - "com.gu" %% "thrift-serializer" % "4.0.0", + "com.gu" %% "thrift-serializer" % "4.0.2", "org.json4s" %% "json4s-native" % json4sVersion, "org.json4s" %% "json4s-jackson" % json4sVersion, "net.logstash.logback" % "logstash-logback-encoder" % "7.2", "com.typesafe.play" %% "play-json" % "2.9.4", - "com.typesafe.play" %% "play-iteratees" % "2.6.1", "org.julienrf" %% "play-json-derived-codecs" % "10.1.0", "org.scalatest" %% "scalatest" % "3.2.15" % "test" ) diff --git a/conf/routes b/conf/routes index 7075da7..b731f98 100644 --- a/conf/routes +++ b/conf/routes @@ -23,7 +23,7 @@ GET /editorial controllers.ViewsController GET /training controllers.ViewsController.collectionEditor() GET /collection/*collectionId controllers.FaciaToolController.getCollection(collectionId) -POST /edits controllers.FaciaToolController.collectionEdits +POST /edits controllers.FaciaToolController.collectionEdits() GET /defaults controllers.DefaultsController.configuration() GET /story-package/*id controllers.StoryPackagesController.getPackage(id) diff --git a/test/package.scala b/test/package.scala index 4da92de..1c7e99a 100644 --- a/test/package.scala +++ b/test/package.scala @@ -4,6 +4,5 @@ import org.scalatest.Suites class FaciaToolTestSuite extends Suites ( new story_packages.metrics.DurationMetricTest, - new story_packages.util.EnumeratorsTest, new story_packages.util.RichFutureTest, new story_packages.util.SanitizeInputTest) {} diff --git a/test/story_packages/util/EnumeratorsTest.scala b/test/story_packages/util/EnumeratorsTest.scala deleted file mode 100644 index d3a1626..0000000 --- a/test/story_packages/util/EnumeratorsTest.scala +++ /dev/null @@ -1,26 +0,0 @@ -package story_packages.util - -import org.scalatest.concurrent.ScalaFutures -import org.scalatest.flatspec.AnyFlatSpec -import org.scalatest.matchers.should.Matchers -import play.api.libs.iteratee.Iteratee -import story_packages.util.Enumerators._ - -import scala.concurrent.ExecutionContext.Implicits.global -import scala.concurrent.Future - -class EnumeratorsTest extends AnyFlatSpec with Matchers with ScalaFutures { - "enumerate" should "simply enumerate the list if the function applied lifts the value into a Future" in { - enumerate(List(1, 2, 3))(Future.successful).run(Iteratee.getChunks).futureValue should equal(List( - 1, 2, 3 - )) - } - - it should "transform the enumerator with the given function" in { - enumerate(List(1, 2, 3)) { n => - Future { - n * n - } - }.run(Iteratee.getChunks).futureValue should equal(List(1, 4, 9)) - } -}