Browse Source

Adding Curacao to benchmark test suite

Mark Kolich 11 years ago
parent
commit
1d1f2dbabb

+ 6 - 0
curacao/.gitignore

@@ -0,0 +1,6 @@
+/project/.*
+/project/target
+/target
+/.project
+/.classpath
+/.cache

+ 3 - 0
curacao/.sbtrc

@@ -0,0 +1,3 @@
+alias start = ;container:start
+alias stop = ;container:stop
+alias war = ;package

+ 24 - 0
curacao/README.md

@@ -0,0 +1,24 @@
+# Curacao Benchmarking Test
+
+This is the Curacao portion of TechEmpower's [benchmarking test suite](../) comparing a variety of web development platforms.
+
+## Versions
+
+Curacao 2.0-M10 (https://github.com/markkolich/curacao)
+
+## Tests
+
+### JSON Serialization
+
+Uses [Google's GSON](https://code.google.com/p/google-gson/) under-the-hood.
+
+See the `json` method in (src/benchmark/Benchmarks.java)
+
+    http://localhost:8080/json
+
+### Plaintext
+
+See the `plainText` method in (src/benchmark/Benchmarks.java)
+
+    http://localhost:8080/plaintext
+

+ 0 - 0
curacao/__init__.py


+ 24 - 0
curacao/benchmark_config

@@ -0,0 +1,24 @@
+{
+  "framework" : "curacao",
+  "tests" : [{
+    "default" : {
+      "setup_file" : "setup",
+      "json_url" : "/json",
+      "plaintext_url": "/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Micro",
+      "database": "None",
+      "framework": "curacao",
+      "language": "Java",
+      "orm": "Raw",
+      "platform": "Curacao",
+      "webserver": "None",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "curacao",
+      "notes": "",
+      "versus": ""
+    }
+  }]
+}

+ 26 - 0
curacao/build.sbt

@@ -0,0 +1,26 @@
+name := "curacao-benchmark"
+
+organization := "com.kolich"
+
+scalaVersion := "2.10.2"
+
+version := "1.0"
+
+resolvers ++= Seq(
+  "markkolich.github.io repo" at "http://markkolich.github.io/repo"
+)
+
+libraryDependencies ++= Seq(
+  "com.kolich.curacao" % "curacao" % "2.0-M10",
+  "com.kolich.curacao" % "curacao-gson" % "2.0-M10",
+  "org.eclipse.jetty" % "jetty-webapp" % "9.1.1.v20140108" % "container",
+  "org.eclipse.jetty" % "jetty-plus" % "9.1.1.v20140108" % "container",
+  "javax.servlet" % "javax.servlet-api" % "3.0.1" % "provided",
+  "org.slf4j" % "slf4j-api" % "1.7.2" % "compile",
+  "ch.qos.logback" % "logback-core" % "1.0.7" % "compile",
+  "ch.qos.logback" % "logback-classic" % "1.0.7" % "compile"
+)
+
+classDirectory in Compile <<= baseDirectory(new File(_, "target/classes"))
+
+seq(webSettings :_*)

+ 1 - 0
curacao/project/build.properties

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

+ 3 - 0
curacao/project/plugins.sbt

@@ -0,0 +1,3 @@
+addSbtPlugin("com.earldouglas" % "xsbt-web-plugin" % "0.7.0")
+
+addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.5.2")

+ 30 - 0
curacao/setup.py

@@ -0,0 +1,30 @@
+
+import subprocess
+import sys
+import time
+import os
+
+def start(args, logfile, errfile):
+  if os.name == 'nt':
+    subprocess.check_call('"..\\sbt\\sbt.bat" ";start;shell"', shell=True, cwd="curacao", stderr=errfile, stdout=logfile)
+  else:
+    subprocess.check_call('"../sbt/sbt ";start;shell"', shell=True, cwd="curacao", stderr=errfile, stdout=logfile)
+    
+  time.sleep(5)
+  return 0
+
+def stop(logfile, errfile):
+  if os.name == 'nt':
+    subprocess.check_call("wmic process where \"CommandLine LIKE '%curacao-benchmark%'\" call terminate", stderr=errfile, stdout=logfile)
+  else:
+    p = subprocess.Popen(['ps', 'aux'], stdout=subprocess.PIPE)
+    out, err = p.communicate()
+    for line in out.splitlines():
+      if 'curacao-benchmark' in line:
+        try:
+          pid = int(line.split(None, 2)[1])
+          os.kill(pid, 15)
+        except OSError:
+          pass
+  
+  return 0

+ 4 - 0
curacao/source_code

@@ -0,0 +1,4 @@
+./curacao/src/main/java/benchmark
+./curacao/src/main/java/benchmark/Benchmarks.java
+./curacao/src/main/java/benchmark/entities
+./curacao/src/main/java/benchmark/entities/HelloWorld.java

+ 20 - 0
curacao/src/main/java/benchmark/Benchmarks.java

@@ -0,0 +1,20 @@
+package benchmark;
+
+import benchmark.entities.HelloWorld;
+import com.kolich.curacao.annotations.Controller;
+import com.kolich.curacao.annotations.methods.GET;
+
+@Controller
+public final class Benchmarks {
+
+    @GET("/json")
+    public final HelloWorld json() {
+        return new HelloWorld("Hello, World!");
+    }
+
+    @GET("/plaintext")
+    public final String plainText() {
+        return "Hello, World!";
+    }
+
+}

+ 21 - 0
curacao/src/main/java/benchmark/entities/HelloWorld.java

@@ -0,0 +1,21 @@
+package benchmark.entities;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.annotations.SerializedName;
+import com.kolich.curacao.gson.GsonAppendableCuracaoEntity;
+
+public final class HelloWorld extends GsonAppendableCuracaoEntity {
+
+    private static final Gson gson__ =
+        new GsonBuilder().serializeNulls().create();
+
+    @SerializedName("message")
+    private final String message_;
+
+    public HelloWorld(final String message) {
+        super(gson__);
+        message_ = message;
+    }
+
+}

+ 12 - 0
curacao/src/main/resources/application.conf

@@ -0,0 +1,12 @@
+curacao {
+
+  boot-package = "benchmark"
+
+  ## Never timeout
+  async-context-timeout = 0
+
+  ## Both the request and response thread pools are 'unbounded'
+  pools.request.size = 0
+  pools.response.size = 0
+
+}

+ 23 - 0
curacao/src/main/resources/logback.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <target>System.out</target>
+        <encoder>
+            <pattern>%date{MM/dd HH:mm:ss.SSS} %-5level[%.15thread] %logger{1} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="org.reflections" additivity="false" level="WARN">
+        <appender-ref ref="CONSOLE"/>
+    </logger>
+
+    <logger name="com.kolich.curacao" additivity="false" level="WARN">
+        <appender-ref ref="CONSOLE"/>
+    </logger>
+
+    <root level="INFO">
+        <appender-ref ref="CONSOLE"/>
+    </root>
+
+</configuration>

+ 21 - 0
curacao/src/main/webapp/WEB-INF/web.xml

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
+         version="3.0">
+
+    <display-name>curacao-benchmark</display-name>
+    <description>Curacao benchmark for TechEmpower Framework Benchmarks.</description>
+
+    <servlet>
+        <servlet-name>CuracaoDispatcherServlet</servlet-name>
+        <servlet-class>com.kolich.curacao.CuracaoDispatcherServlet</servlet-class>
+        <load-on-startup>1</load-on-startup>
+        <async-supported>true</async-supported>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>CuracaoDispatcherServlet</servlet-name>
+        <url-pattern>/*</url-pattern>
+    </servlet-mapping>
+
+</web-app>