Эх сурвалжийг харах

Merge pull request #2410 from daviddenton/round-14

Round 14: Updated Fintrospect to latest version and perf upgrades
knewmanTE 8 жил өмнө
parent
commit
489acf922e

+ 4 - 4
frameworks/Scala/fintrospect/build.sbt

@@ -1,6 +1,6 @@
 name := """techempower-benchmarks-fintrospect"""
 
-version := "0.0.7"
+version := "0.0.8"
 
 scalaVersion := "2.11.8"
 
@@ -15,9 +15,9 @@ com.github.retronym.SbtOneJar.oneJarSettings
 mainClass in(Compile, run) := Some("FintrospectBenchmarkServer")
 
 libraryDependencies ++= Seq(
-  "io.fintrospect" %% "fintrospect-core" % "13.13.0",
-  "io.fintrospect" %% "fintrospect-json4s" % "13.13.0",
-  "io.fintrospect" %% "fintrospect-mustache" % "13.13.0",
+  "io.fintrospect" %% "fintrospect-core" % "13.17.0",
+  "io.fintrospect" %% "fintrospect-jackson" % "13.17.0",
+  "io.fintrospect" %% "fintrospect-mustache" % "13.17.0",
   "com.twitter" %% "finagle-mysql" % "6.40.0"
 )
 

+ 6 - 9
frameworks/Scala/fintrospect/src/main/scala/DatabaseRoutes.scala

@@ -1,3 +1,4 @@
+import com.fasterxml.jackson.databind.JsonNode
 import com.twitter.finagle.Service
 import com.twitter.finagle.http.Method.Get
 import com.twitter.finagle.http.Status.{NotFound, Ok}
@@ -5,21 +6,17 @@ import com.twitter.finagle.http.{Request, Response}
 import com.twitter.finagle.mysql.Parameter.wrap
 import com.twitter.finagle.mysql.{Client, IntValue, Result, ResultSet}
 import com.twitter.util.Future.collect
-import io.fintrospect.RouteSpec.RequestValidation
-import io.fintrospect.RouteSpec.RequestValidation.none
-import io.fintrospect.formats.Json4sJackson.JsonFormat.{array, number, obj}
-import io.fintrospect.formats.Json4sJackson.ResponseBuilder.implicits._
-import io.fintrospect.parameters.ParameterSpec.int
+import io.fintrospect.formats.Jackson.JsonFormat.{array, number, obj}
+import io.fintrospect.formats.Jackson.ResponseBuilder.implicits._
 import io.fintrospect.parameters.{ParameterSpec, Query}
 import io.fintrospect.{RouteSpec, ServerRoutes}
-import org.json4s.JValue
 
 import scala.language.reflectiveCalls
 import scala.util.{Random, Try}
 
 object DatabaseRoutes {
 
-  private val toJson: PartialFunction[Result, Option[JValue]] = {
+  private val toJson: PartialFunction[Result, Option[JsonNode]] = {
     case rs: ResultSet => rs.rows.headOption
       .map(row => {
         val IntValue(id) = row("id").get
@@ -35,8 +32,8 @@ object DatabaseRoutes {
     val getStatement = database.prepare("SELECT id, randomNumber FROM world WHERE id = ?")
     val updateStatement = database.prepare("UPDATE world SET randomNumber = ? WHERE id = ?")
 
-    val queryRoute = RouteSpec(validation = none).at(Get) / "db" bindTo Service.mk {
-      r: Request => getStatement(generateRandomNumber)
+    val queryRoute = RouteSpec().at(Get) / "db" bindTo Service.mk {
+      _: Request => getStatement(generateRandomNumber)
         .map(toJson)
         .map(_.map(Ok(_)).getOrElse(NotFound()).build())
     }

+ 2 - 2
frameworks/Scala/fintrospect/src/main/scala/FintrospectBenchmarkServer.scala

@@ -6,7 +6,7 @@ import com.twitter.finagle.stats.NullStatsReceiver
 import com.twitter.finagle.tracing.NullTracer
 import com.twitter.finagle.{Filter, Http}
 import com.twitter.util.{Await, NullMonitor}
-import io.fintrospect.ModuleSpec
+import io.fintrospect.RouteModule
 import io.fintrospect.configuration.Host
 import io.fintrospect.renderers.simplejson.SimpleJson
 import org.apache.commons.lang.time.FastDateFormat.getInstance
@@ -28,7 +28,7 @@ object FintrospectBenchmarkServer extends App {
   val dbHost = Properties.envOrNone("DBHOST").map(Host(_)).getOrElse(Host.localhost)
   val database = Database(dbHost)
 
-  val module = ModuleSpec(Root, SimpleJson())
+  val module = RouteModule(Root, SimpleJson())
     .withRoute(JsonRoute())
     .withRoute(PlainTextRoute())
     .withRoute(FortunesRoute(database))

+ 2 - 3
frameworks/Scala/fintrospect/src/main/scala/FortunesRoute.scala

@@ -1,9 +1,8 @@
 import com.twitter.finagle.Service
 import com.twitter.finagle.http.Method.Get
 import com.twitter.finagle.http.Request
-import com.twitter.finagle.mysql.{Client, IntValue, Result, ResultSet, StringValue}
+import com.twitter.finagle.mysql._
 import io.fintrospect.RouteSpec
-import io.fintrospect.RouteSpec.RequestValidation.none
 import io.fintrospect.formats.Html
 import io.fintrospect.templating.MustacheTemplates.CachingClasspath
 import io.fintrospect.templating.{RenderView, View}
@@ -37,6 +36,6 @@ object FortunesRoute {
           })
       })
 
-    RouteSpec(validation = none).at(Get) / "fortunes" bindTo service
+    RouteSpec().at(Get) / "fortunes" bindTo service
   }
 }

+ 4 - 5
frameworks/Scala/fintrospect/src/main/scala/JsonRoute.scala

@@ -3,13 +3,12 @@ import com.twitter.finagle.http.Method.Get
 import com.twitter.finagle.http.Request
 import com.twitter.finagle.http.Status.Ok
 import io.fintrospect.RouteSpec
-import io.fintrospect.RouteSpec.RequestValidation.none
-import io.fintrospect.formats.Json4sJackson.JsonFormat.{obj, string}
-import io.fintrospect.formats.Json4sJackson.ResponseBuilder.implicits._
+import io.fintrospect.formats.Jackson.JsonFormat.{encodeToBuf, obj, string}
+import io.fintrospect.formats.Jackson.ResponseBuilder.implicits._
 
 object JsonRoute {
 
-  private val service = Service.mk { r: Request => Ok(obj("message" -> string("Hello, World!"))) }
+  private val service = Service.mk { _: Request => Ok(encodeToBuf(obj("message" -> string("Hello, World!")))) }
 
-  def apply() = RouteSpec(validation = none).at(Get) / "json" bindTo service
+  def apply() = RouteSpec().at(Get) / "json" bindTo service
 }

+ 2 - 3
frameworks/Scala/fintrospect/src/main/scala/PlainTextRoute.scala

@@ -4,14 +4,13 @@ import com.twitter.finagle.http.Request
 import com.twitter.finagle.http.Status.Ok
 import com.twitter.io.Buf
 import io.fintrospect.RouteSpec
-import io.fintrospect.RouteSpec.RequestValidation.none
 import io.fintrospect.formats.PlainText.ResponseBuilder.implicits._
 
 object PlainTextRoute {
 
   private val preallocatedMsgForPlainText = Buf.Utf8("Hello, World!")
 
-  private val service = Service.mk { r: Request => Ok(preallocatedMsgForPlainText) }
+  private val service = Service.mk { _: Request => Ok(preallocatedMsgForPlainText) }
 
-  def apply() = RouteSpec(validation = none).at(Get) / "plaintext" bindTo service
+  def apply() = RouteSpec().at(Get) / "plaintext" bindTo service
 }