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

Merge pull request #1944 from daviddenton/master

Add benchmark for Fintrospect (Scala)
ssmith-techempower 9 жил өмнө
parent
commit
5b88d70a09

+ 1 - 0
.travis.yml

@@ -179,6 +179,7 @@ env:
     - "TESTDIR=Scala/akka-http"
     - "TESTDIR=Scala/colossus"
     - "TESTDIR=Scala/finagle"
+    - "TESTDIR=Scala/fintrospect"
     - "TESTDIR=Scala/lift-stateless"
     - "TESTDIR=Scala/plain"
     - "TESTDIR=Scala/play2-scala"

+ 11 - 0
frameworks/Scala/fintrospect/.gitignore

@@ -0,0 +1,11 @@
+target/
+project/target
+bin/
+logs/
+.idea/
+.cache
+.classpath
+.project
+/bin/
+tools/
+sbt

+ 22 - 0
frameworks/Scala/fintrospect/README.md

@@ -0,0 +1,22 @@
+#fintrospect Benchmarking Test
+
+## Infrastructure Software Versions
+The tests were run with:
+
+* [Java Oracle 1.8.0_25](http://www.oracle.com/technetwork/java/javase)
+* [fintrospect 12.4.0](https://github.com/daviddenton/fintrospect)
+* [finagle 6.33.0](https://github.com/twitter/finagle)
+
+## Test URLs
+
+### JSON Encoding Test
+http://localhost:9000/json
+
+### Plaintext Test
+http://localhost:9000/plaintext
+
+## How to run
+sbt 'oneJar'
+
+`java -jar target/scala-2.11/*fintrospect*one-jar.jar`
+

+ 23 - 0
frameworks/Scala/fintrospect/benchmark_config.json

@@ -0,0 +1,23 @@
+{
+  "framework": "fintrospect",
+  "tests": [{
+    "default": {
+      "orm": "Raw",
+      "database_os": "Linux",
+      "setup_file": "setup",
+      "json_url": "/json",
+      "plaintext_url": "/plaintext",
+      "port": 9000,
+      "approach": "Realistic",
+      "classification": "Micro",
+      "database": "None",
+      "framework": "fintrospect",
+      "language": "Scala",
+      "platform": "Netty",
+      "webserver": "None",
+      "os": "Linux",
+      "display_name": "fintrospect",
+      "notes": ""
+    }
+  }]
+}

+ 21 - 0
frameworks/Scala/fintrospect/build.sbt

@@ -0,0 +1,21 @@
+name := """techempower-benchmarks-fintrospect"""
+
+version := "0.0.1"
+
+scalaVersion := "2.11.7"
+
+resolvers += "JCenter" at "https://jcenter.bintray.com"
+
+com.github.retronym.SbtOneJar.oneJarSettings
+
+mainClass in(Compile, run) := Some("FintrospectBenchmarkServer")
+
+libraryDependencies ++= Seq(
+  "com.twitter" %% "finagle-http" % "6.33.0",
+  "io.github.daviddenton" %% "fintrospect" % "12.4.0",
+  "io.circe" %% "circe-core" % "0.3.0",
+  "io.circe" %% "circe-parser" % "0.3.0",
+  "io.circe" %% "circe-generic" % "0.3.0"
+)
+
+resolvers += Resolver.sonatypeRepo("snapshots")

+ 4 - 0
frameworks/Scala/fintrospect/project/build.properties

@@ -0,0 +1,4 @@
+#Activator-generated Properties
+#Wed Feb 25 16:26:13 CET 2015
+template.uuid=6a24da4f-6985-4cd1-a841-205d69ced830
+sbt.version=0.13.7

+ 1 - 0
frameworks/Scala/fintrospect/project/plugins.sbt

@@ -0,0 +1 @@
+addSbtPlugin("org.scala-sbt.plugins" % "sbt-onejar" % "0.8")

+ 7 - 0
frameworks/Scala/fintrospect/setup.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+fw_depends java sbt
+
+sbt 'oneJar' -batch
+
+java -jar target/scala-2.11/*fintrospect*one-jar.jar &

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

@@ -0,0 +1,52 @@
+import java.time.ZonedDateTime._
+import java.time.format.DateTimeFormatter
+import java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME
+import java.time.{ZonedDateTime, ZoneId}
+import javax.swing.text.DateFormatter
+
+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.stats.NullStatsReceiver
+import com.twitter.finagle.tracing.NullTracer
+import com.twitter.finagle.{Http, Service}
+import com.twitter.util.Await
+import io.circe._
+import io.circe.generic.auto._
+import io.circe.parser._
+import io.circe.syntax._
+import io.fintrospect.formats.json.Circe.ResponseBuilder._
+import io.fintrospect.formats.json.Circe.JsonFormat._
+import io.fintrospect.formats.json.Circe.ResponseBuilder._
+import io.fintrospect.{ModuleSpec, RouteSpec}
+
+object FintrospectBenchmarkServer extends App {
+
+  def plainTextHelloWorld() = {
+    import io.fintrospect.formats.PlainText.ResponseBuilder._
+    Service.mk { r: Request => Ok("Hello, World!")
+      .withHeaders("Server" -> "Example", "Date" -> RFC_1123_DATE_TIME.format(now()))
+    }
+  }
+
+  def jsonHelloWorld() = {
+    case class Message(message: String)
+
+    Service.mk { r: Request => Ok(encode(Message("Hello, World!")))
+      .withHeaders("Server" -> "Example", "Date" -> RFC_1123_DATE_TIME.format(now()))
+    }
+  }
+
+  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)
+      .serve(":9000", module.toService)
+  )
+}