Oliver Mannion 7 년 전
부모
커밋
4b0ad301bc

+ 1 - 0
.travis.yml

@@ -80,6 +80,7 @@ env:
      - "TESTDIR=Java/wicket"
      - "TESTDIR=Java/wildfly-ee7"
      - "TESTDIR=Java/wizzardo-http"
+     - "TESTDIR=Scala/cask"
      - "TESTLANG=JavaScript"
      - "TESTLANG=Kotlin"
      - "TESTLANG=Lua"

+ 20 - 0
frameworks/Scala/cask/README.md

@@ -0,0 +1,20 @@
+# cask Benchmarking Test
+
+### Test Type Implementation Source Code
+
+* [JSON](src/main/scala/example/Main.scala)
+* [PLAINTEXT](src/main/scala/example/Main.scala)
+
+## Important Libraries
+The tests were run with:
+* [cask](https://github.com/lihaoyi/cask)
+* [jsoniter-scala](https://github.com/plokhotnyuk/jsoniter-scala)
+
+## Test URLs
+### JSON
+
+http://localhost:8080/json
+
+### PLAINTEXT
+
+http://localhost:8080/plaintext

+ 26 - 0
frameworks/Scala/cask/benchmark_config.json

@@ -0,0 +1,26 @@
+{
+  "framework": "cask",
+  "tests": [
+    {
+      "default": {
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
+        "port": 8080,
+        "approach": "Realistic",
+        "classification": "Micro",
+        "database": "None",
+        "framework": "cask",
+        "language": "Scala",
+        "flavor": "None",
+        "orm": "None",
+        "platform": "Undertow",
+        "webserver": "None",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "cask",
+        "notes": "",
+        "versus": "Undertow"
+      }
+    }
+  ]
+}

+ 10 - 0
frameworks/Scala/cask/build.sbt

@@ -0,0 +1,10 @@
+name := """cask-example"""
+
+version := "1.0"
+
+scalaVersion := "2.12.5"
+
+libraryDependencies ++= Seq(
+  "com.lihaoyi" %% "cask" % "0.1.1",
+  "com.github.plokhotnyuk.jsoniter-scala" %% "macros" % "0.21.6"
+)

+ 7 - 0
frameworks/Scala/cask/cask.dockerfile

@@ -0,0 +1,7 @@
+FROM hseeberger/scala-sbt:8u151-2.12.5-1.1.2
+WORKDIR /cask
+COPY project project
+COPY src src
+COPY build.sbt build.sbt
+RUN sbt assembly -batch
+CMD ["java", "-server", "-Xms1g", "-Xmx1g", "-XX:NewSize=512m", "-XX:MaxNewSize=512m", "-XX:+UseParallelGC", "-XX:+AggressiveOpts", "-XX:+UseNUMA", "-XX:-UseBiasedLocking", "-XX:+AlwaysPreTouch", "-jar", "target/scala-2.12/cask-example-assembly-1.0.jar"]

+ 1 - 0
frameworks/Scala/cask/project/build.properties

@@ -0,0 +1 @@
+sbt.version=1.1.2

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

@@ -0,0 +1 @@
+addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.6")

+ 43 - 0
frameworks/Scala/cask/src/main/scala/example/Main.scala

@@ -0,0 +1,43 @@
+package example
+
+import com.github.plokhotnyuk.jsoniter_scala.core._
+import com.github.plokhotnyuk.jsoniter_scala.macros._
+import io.undertow.{Undertow, UndertowOptions}
+
+case class Message(message: String)
+
+object Main extends cask.MainRoutes {
+
+  implicit val codec: JsonValueCodec[Message] = JsonCodecMaker.make[Message](CodecMakerConfig())
+
+  override def main(args: Array[String]): Unit = {
+    val server = Undertow.builder
+      .addHttpListener(8080, "0.0.0.0")
+      // increase io thread count as per https://github.com/TechEmpower/FrameworkBenchmarks/pull/4008
+      .setIoThreads(Runtime.getRuntime().availableProcessors() * 2)
+      // In HTTP/1.1, connections are persistent unless declared otherwise.
+      // Adding a "Connection: keep-alive" header to every response would only
+      // add useless bytes.
+      .setServerOption[java.lang.Boolean](UndertowOptions.ALWAYS_SET_KEEP_ALIVE, false)
+      .setHandler(defaultHandler)
+      .build
+    server.start()
+  }
+
+  @cask.get("/plaintext")
+  def plaintext() = {
+    cask.Response(data = "Hello, World!",
+      headers = Seq("Server" -> "cask", "Content-Type" -> "text/plain")
+    )
+
+  }
+
+  @cask.get("/json")
+  def json(request: cask.Request) = {
+    cask.Response(data = writeToArray(Message("Hello, World!")),
+      headers = Seq("Server" -> "cask", "Content-Type" -> "application/json")
+    )
+  }
+
+  initialize()
+}