ソースを参照

Merge branch 'round-13' into round-14

Damien Solimando 9 年 前
コミット
89ce53a728

+ 45 - 0
frameworks/Groovy/hot/benchmark_config.json

@@ -0,0 +1,45 @@
+{
+  "framework": "Hot-Groovy",
+  "tests": [{
+    "default": {
+      "setup_file": "setup",
+      "json_url": "/rest/json",
+      "plaintext_url": "/rest/plaintext",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "None",
+      "framework": "Hot",
+      "language": "Groovy",
+      "orm": "Raw",
+      "platform": "Jetty",
+      "webserver": "Jetty",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "Hot",
+      "notes": "",
+      "versus": ""
+    },
+    "mongodb" : {
+      "setup_file": "setup",
+      "db_url": "/rest/db/mongodb",
+      "query_url": "/rest/queries/mongodb?queries=",
+      "fortune_url": "/rest/fortunes/mongodb",
+      "update_url": "/rest/updates/mongodb?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Platform",
+      "database": "MongoDB",
+      "framework": "Hot",
+      "language": "Groovy",
+      "orm": "Raw",
+      "platform": "Jetty",
+      "webserver": "Jetty",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "Hot",
+      "notes": "",
+      "versus": ""
+    }
+  }]
+}

+ 14 - 0
frameworks/Groovy/hot/config.json

@@ -0,0 +1,14 @@
+{
+  "name" : "techempower",
+  "version" : "0.1",
+  "devMode" : false,
+  "dataSources" : [ {
+    "name" : "mongo",
+    "engine" : "MONGODB",
+    "hostname" : "localhost",
+    "port" : 27017,
+    "database" : "hello_world",
+    "username" : "",
+    "password" : ""
+  } ]
+}

+ 5 - 0
frameworks/Groovy/hot/setup.sh

@@ -0,0 +1,5 @@
+#!/bin/bash
+
+fw_depends java hot
+
+${HOT_HOME}/hot run

+ 106 - 0
frameworks/Groovy/hot/shows/benchmark.show.groovy

@@ -0,0 +1,106 @@
+import org.apache.commons.lang.StringEscapeUtils
+
+def mongo = show.dbs.mongo
+
+def generator = new Random ()
+
+def generate = {
+	Math.max(generator.nextInt(10000),1)
+}
+
+def templateHeader = """<!DOCTYPE html><html><head><title>Fortunes</title></head><body><table><tr><th>id</th><th>message</th></tr>"""
+
+def templateTail = """</table></body></html>"""
+
+def validateNumQueries = {
+	Integer numQueries
+
+	if (!it) numQueries = 1
+
+	try {
+		numQueries = it[0] as Integer
+	} catch (e) {
+		numQueries = 1
+	}
+	numQueries = Math.max(1,Math.min(500,numQueries))
+}
+
+rest.get("/json").then {
+	[message:'Hello, World!']
+}
+
+rest.get('/db/mongodb').then {
+	mongo.World.findOne([_id:generate()]).promise()
+}
+
+rest.get('/queries/mongodb').then { req ->
+	
+	def numQueries = validateNumQueries(req?.requestParams?.queries)
+	def deferred = show.Deferred()
+	def promise = deferred.promise()
+	def results = []
+
+	(1..numQueries).each { i ->
+		promise = promise.then { 
+			mongo.World.findOne(_id:generate()).promise()
+		}.then { world ->
+			results << world
+			results
+		}
+	}
+	deferred.resolve()
+	promise
+}
+
+rest.get('/fortunes/mongodb').then {
+
+	mongo.Fortune.find().promise().then { fortunes ->
+		
+		fortunes << [_id:'0.', message:'Additional fortune added at request time.']
+		fortunes.each {
+			it._id = Float.parseFloat(it._id) as Integer
+			if (it.message.contains('<script>'))
+				it.message = StringEscapeUtils.escapeHtml(it.message)
+		}
+		fortunes.sort { it.message }
+		
+		def response = templateHeader
+		fortunes.each {
+			response += "<tr><td>${it._id}</td><td>${it.message}</td></tr>"
+		}
+		response += templateTail
+		new hot.Response(200,['Content-Type':'text/html'], response)
+	}
+}
+
+rest.get('/updates/mongodb').then { req ->
+	
+	def numQueries = validateNumQueries(req?.requestParams?.queries)
+	
+	def deferred = show.Deferred()
+	def promise = deferred.promise()
+	def results = []
+
+	(1..numQueries).each { i ->
+		def genId = generate()
+
+		promise = promise.then { 
+			mongo.World.findOne(_id:genId).promise()
+		}.then { world ->
+			world.randomNumber = generate()
+			mongo.World.update([_id:genId],[$set:[randomNumber:world.randomNumber]]).then {
+				world
+			}
+		}.then { world ->
+			results << world
+			results
+		}
+	}
+	deferred.resolve()
+	promise
+}
+
+def hello = 'Hello, World!'
+rest.get('/plaintext').then {
+	new hot.Response(200,['Content-Type':'text/plain'],hello)
+}

+ 17 - 0
toolset/setup/linux/frameworks/hot.sh

@@ -0,0 +1,17 @@
+#!/bin/bash
+
+RETCODE=$(fw_exists ${IROOT}/hot.installed)
+[ ! "$RETCODE" == 0 ] || { \
+  source $IROOT/hot.installed
+  return 0; }
+
+VERSION="0.10.0-SNAPSHOT"
+HOT_HOME=$IROOT/hot-$VERSION
+
+fw_get -O https://github.com/dsolimando/Hot/releases/download/0.10.0-SNAPSHOT/hot-0.10.0-SNAPSHOT.tar.gz
+fw_untar hot-$VERSION.tar.gz
+
+echo "export HOT_HOME=${HOT_HOME}" > $IROOT/hot.installed
+echo -e "export PATH=\$HOT_HOME:\$PATH" >> $IROOT/hot.installed
+
+source $IROOT/hot.installed