Browse Source

upped version of fintrospect , retweaked JVM parameters, and removed dead code

David Denton 8 years ago
parent
commit
a69fe00e15

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

@@ -15,10 +15,8 @@ com.github.retronym.SbtOneJar.oneJarSettings
 mainClass in(Compile, run) := Some("FintrospectBenchmarkServer")
 
 libraryDependencies ++= Seq(
-  "io.fintrospect" %% "fintrospect-core" % "13.7.0",
-  "io.fintrospect" %% "fintrospect-circe" % "13.7.0",
-  "io.fintrospect" %% "fintrospect-mustache" % "13.7.0",
-  "com.twitter" %% "finagle-mysql" % "6.37.0"
+  "io.fintrospect" %% "fintrospect-core" % "13.11.0",
+  "io.fintrospect" %% "fintrospect-json4s" % "13.11.0"
   )
 
 resolvers += Resolver.sonatypeRepo("snapshots")

+ 0 - 3
frameworks/Scala/fintrospect/source_code

@@ -1,5 +1,2 @@
 fintrospect/src/main/scala/
-fintrospect/src/main/scala/Fortunes.scala
-fintrospect/src/main/scala/JsonHelloWorld.scala
-fintrospect/src/main/scala/PlainTextHelloWorld.scala
 fintrospect/src/main/scala/FintrospectBenchmarkServer.scala

+ 26 - 16
frameworks/Scala/fintrospect/src/main/scala/FintrospectBenchmarkServer.scala

@@ -1,36 +1,46 @@
 import java.time.ZonedDateTime._
 import java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME
 
+import com.twitter.finagle.http.Method.Get
+import com.twitter.finagle.http.Request
+import com.twitter.finagle.http.Status._
 import com.twitter.finagle.http.path.Root
-import com.twitter.finagle.http.{Request, Response}
 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.renderers.simplejson.SimpleJson
+import com.twitter.finagle.{Http, Service}
+import com.twitter.io.Buf
+import com.twitter.util.Await
+import io.fintrospect.formats.Json4sJackson.JsonFormat._
+import io.fintrospect.{ModuleSpec, RouteSpec}
 
 object FintrospectBenchmarkServer extends App {
 
-  val addServerAndDate = Filter.mk[Request, Response, Request, Response] { (req, svc) =>
-    svc(req).map(resp => {
-      resp.headerMap("Server") = "Example"
-      resp.headerMap("Date") = RFC_1123_DATE_TIME.format(now())
-      resp
-    })
+  val preAllocatedHelloWorldText = Buf.Utf8("Hello, World!")
+
+  val plainTextHelloWorld = {
+    import io.fintrospect.formats.PlainText.ResponseBuilder.implicits._
+    Service.mk { r: Request =>
+      Ok(preAllocatedHelloWorldText)
+        .withHeaders("Server" -> "Example", "Date" -> RFC_1123_DATE_TIME.format(now()))
+    }
+  }
+
+  val jsonHelloWorld = {
+    import io.fintrospect.formats.Json4sJackson.ResponseBuilder.implicits._
+    Service.mk { r: Request => Ok(obj("message" -> string("Hello, World!")))
+      .withHeaders("Server" -> "Example", "Date" -> RFC_1123_DATE_TIME.format(now()))
+    }
   }
 
-  val module = ModuleSpec(Root, SimpleJson(), addServerAndDate)
-    .withRoute(JsonHelloWorld.route)
-    .withRoute(PlainTextHelloWorld.route)
-    .withRoute(Fortunes.route)
+  val module = ModuleSpec(Root)
+    .withRoute(RouteSpec().at(Get) / "plaintext" bindTo plainTextHelloWorld)
+    .withRoute(RouteSpec().at(Get) / "json" bindTo jsonHelloWorld)
 
   Await.ready(
     Http.server
       .withCompressionLevel(0)
       .withStatsReceiver(NullStatsReceiver)
       .withTracer(NullTracer)
-      .withMonitor(NullMonitor)
       .serve(":9000", module.toService)
   )
 }

+ 0 - 52
frameworks/Scala/fintrospect/src/main/scala/Fortunes.scala

@@ -1,52 +0,0 @@
-import com.twitter.finagle.client.DefaultPool.Param
-import com.twitter.finagle.http.Method.Get
-import com.twitter.finagle.http.Request
-import com.twitter.finagle.mysql.{IntValue, Result, ResultSet, StringValue}
-import com.twitter.finagle.stats.NullStatsReceiver
-import com.twitter.finagle.tracing.NullTracer
-import com.twitter.finagle.{Mysql, Service}
-import com.twitter.util.Duration.fromSeconds
-import com.twitter.util.NullMonitor
-import io.fintrospect.RouteSpec
-import io.fintrospect.formats.Html
-import io.fintrospect.templating.MustacheTemplates.CachingClasspath
-import io.fintrospect.templating.{RenderView, View}
-
-case class Fortune(id: Int, message: String)
-
-case class FortunesList(items: Seq[Fortune]) extends View
-
-object Fortunes {
-  private val toFortunes: PartialFunction[Result, Seq[Fortune]] = {
-    case rs: ResultSet => rs.rows
-      .map(row => {
-        val IntValue(id) = row("id").get
-        val StringValue(message) = row("message").get
-        Fortune(id, message)
-      })
-    case _ => Seq.empty
-  }
-
-  private val dbClient = Mysql.client
-    .withCredentials("benchmarkdbuser", "benchmarkdbpass")
-    .withDatabase("hello_world")
-    .configured(Param(low = 0, high = 10, idleTime = fromSeconds(5 * 60), bufferSize = 0, maxWaiters = Int.MaxValue))
-    .withStatsReceiver(NullStatsReceiver)
-    .withMonitor(NullMonitor)
-    .withTracer(NullTracer)
-    .withMaxConcurrentPrepareStatements(256)
-    .newRichClient("localhost:3306")
-
-  private val statement = dbClient.prepare("SELECT * FROM Fortune")
-
-  private val service = new RenderView(Html.ResponseBuilder, CachingClasspath()).andThen(
-    Service.mk {
-      r: Request =>
-        statement().map(toFortunes).map(f => {
-          val sortedFortunes = (Fortune(-1, "Additional fortune added at request time.") +: f).sortBy(_.message)
-          FortunesList(sortedFortunes)
-        })
-    })
-
-  val route = RouteSpec().at(Get) / "fortunes" bindTo Fortunes.service
-}

+ 0 - 14
frameworks/Scala/fintrospect/src/main/scala/JsonHelloWorld.scala

@@ -1,14 +0,0 @@
-import com.twitter.finagle.Service
-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.formats.json.Circe.JsonFormat.{obj, string}
-import io.fintrospect.formats.json.Circe.ResponseBuilder.implicits._
-
-object JsonHelloWorld {
-
-  private val service = Service.mk { r: Request => Ok(obj("message" -> string("Hello, World!"))) }
-
-  val route = RouteSpec().at(Get) / "json" bindTo JsonHelloWorld.service
-}

+ 0 - 16
frameworks/Scala/fintrospect/src/main/scala/PlainTextHelloWorld.scala

@@ -1,16 +0,0 @@
-import com.twitter.finagle.Service
-import com.twitter.finagle.http.Method.Get
-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.formats.PlainText.ResponseBuilder.implicits._
-
-object PlainTextHelloWorld {
-
-  private val preallocatedMsgForPlainText = Buf.Utf8("Hello, World!")
-
-  private val service = Service.mk { r: Request => Ok(preallocatedMsgForPlainText) }
-
-  val route = RouteSpec().at(Get) / "plaintext" bindTo service
-}