Parcourir la source

Hot framework integration

Damien Solimando il y a 9 ans
Parent
commit
a500948d3f

+ 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

+ 126 - 0
frameworks/Groovy/hot/shows/example.show.groovy

@@ -0,0 +1,126 @@
+import org.apache.commons.lang.StringEscapeUtils
+
+def mongo = show.dbs.mongo
+//def mysql = dbs.mysql
+
+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.Fortunes.find().promise().then { fortunes ->
+		fortunes << [_id:-1, message:'Additional fortune added at request time.']
+	}.then { fortunes ->
+		fortunes[0].message = StringEscapeUtils.escapeHtml("<script>alert(\"${fortunes[0].message}\")</script>")
+		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 ->
+		promise = promise.then { 
+			mongo.World.findOne(_id:generate()).promise()
+		}.then { world ->
+			println "Old random number ${world.randomNumber}"
+			world.randomNumber = generate()
+			mongo.World.update([_id:generate()],[$set:[randomNumber:generate()]])
+		}.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)
+}
+
+/**rest.get('/db-mysql').then {
+	mysql.World.findOne([id:mongo.ObjectId(generate())]).promise()
+}**/
+
+/**rest.get('/db-mongo-setup').then {
+
+	def deferred = show.Deferred()
+	(1..10000).each { 
+		i -> deferred.then { mongo.World.insert([_id:i, randomNumber: generate()]) }
+	}
+	deferred.resolve()
+}**/
+
+

+ 42 - 0
frameworks/Groovy/hot/www/index.html

@@ -0,0 +1,42 @@
+<!DOCTYPE html> 
+<html> 
+<head> 
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8"> 
+  <title>Welcome to the Hot framework</title> 
+  
+  <style type='text/css'> 
+body {
+    
+    background-color:#000;
+    margin:0;
+    color:#fff;
+    font-family: -apple-system, "Helvetica Neue", "Lucida Grande";
+    font-size:72px;
+    font-weight:lighter;
+}
+
+#welcome {
+    margin-top:25%;
+    width:50%;
+    margin-left:auto;
+    margin-right:auto;
+    text-align:center;
+}
+
+a {
+    margin-top:20px;
+    color:#F015BB;
+    font-size:48px;
+    width:50%;
+    margin-left:auto;
+    margin-right:auto;
+    text-align:center;
+    display:block;
+}
+  </style> 
+</head> 
+<body> 
+  	<div id="welcome">Welcome to the Hot framework</div>
+	<a href="https://github.com/dsolimando/Hot/wiki">Getting started</a>
+</body> 
+</html> 

+ 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.9.0-SNAPSHOT"
+HOT_HOME=$IROOT/hot-$VERSION
+
+fw_get -O https://github.com/dsolimando/Hot/releases/download/v0.9.0/hot-0.9.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