Browse Source

Add benchmarks for the VSGI platform (#2778)

Use 'fw_depends' for installing dependencies from 'apt-get'.
Guillaume Poirier-Morency 8 years ago
parent
commit
881046bd50

+ 1 - 0
.travis.yml

@@ -201,6 +201,7 @@ env:
     - "TESTDIR=Scala/finch"
     - "TESTDIR=Scala/finch"
     - "TESTDIR=Swift/vapor"
     - "TESTDIR=Swift/vapor"
     - "TESTDIR=Ur/urweb"
     - "TESTDIR=Ur/urweb"
+    - "TESTDIR=Vala/vsgi"
     - "TESTDIR=Vala/valum"
     - "TESTDIR=Vala/valum"
 
 
 before_script:
 before_script:

+ 2 - 1
frameworks/Vala/valum/benchmark_config.json

@@ -16,7 +16,8 @@
       "webserver": "Soup",
       "webserver": "Soup",
       "os": "Linux",
       "os": "Linux",
       "database_os": "Linux",
       "database_os": "Linux",
-      "display_name": "Valum"
+      "display_name": "Valum",
+      "versus": "vsgi"
     }
     }
   }]
   }]
 }
 }

+ 1 - 3
frameworks/Vala/valum/setup.sh

@@ -1,8 +1,6 @@
 #!/bin/bash
 #!/bin/bash
 
 
-fw_depends meson vala valum
-
-sudo apt-get install -y libjson-glib-dev
+fw_depends meson vala valum libjson-glib-dev
 
 
 rm -rf build
 rm -rf build
 meson --buildtype=release build
 meson --buildtype=release build

+ 15 - 0
frameworks/Vala/vsgi/README.md

@@ -0,0 +1,15 @@
+# VSGI Benchmarking Test
+
+VSGI is currently part of [Valum](http://valum-framework.org/) and act as an
+abstraction layer over various network protocols.
+
+## Test URLs
+
+### JSON Encoding Test
+
+http://localhost:3003/json
+
+### Plaintext Test
+
+http://localhost:3003/plaintext
+

+ 33 - 0
frameworks/Vala/vsgi/app.vala

@@ -0,0 +1,33 @@
+using GLib;
+using VSGI;
+
+public class App : Handler
+{
+	public override bool handle (Request req, Response res) throws Error
+	{
+		res.headers.replace ("Server", "VSGI/0.3");
+		switch (req.uri.path)
+		{
+			case "/json":
+				res.headers.set_content_type ("application/json", null);
+				var builder = new Json.Builder ();
+
+				builder.begin_object ();
+				builder.set_member_name ("message");
+				builder.add_string_value ("Hello, World!");
+				builder.end_object ();
+
+				var gen = new Json.Generator ();
+				gen.root = builder.get_root ();
+
+				return res.expand (gen.to_data (null).data);
+			case "/plaintext":
+				res.headers.set_content_type ("text/plain", null);
+				return res.expand ("Hello, World!".data);
+			default:
+				return false;
+		}
+	}
+}
+
+Server.new ("http", handler: new App ()).run ();

+ 23 - 0
frameworks/Vala/vsgi/benchmark_config.json

@@ -0,0 +1,23 @@
+{
+  "framework": "vsgi",
+  "tests": [{
+    "default": {
+        "setup_file": "setup",
+        "json_url": "/json",
+        "plaintext_url": "/plaintext",
+        "port": 3003,
+        "approach": "Realistic",
+        "classification": "Platform",
+        "database": "MySQL",
+        "framework": "VSGI",
+        "language": "Vala",
+        "orm": "Raw",
+        "platform": "GLib",
+        "webserver": "Soup",
+        "os": "Linux",
+        "database_os": "Linux",
+        "display_name": "VSGI"
+    }
+  }]
+}
+

+ 11 - 0
frameworks/Vala/vsgi/meson.build

@@ -0,0 +1,11 @@
+project('VSGI TechEmpower Benchmark', 'c', 'vala')
+
+glib_dep = dependency('glib-2.0')
+gobject_dep = dependency('gobject-2.0')
+gio_dep = dependency('glib-2.0')
+soup_dep = dependency('libsoup-2.4')
+vsgi_dep = dependency('vsgi-0.3')
+json_glib_dep = dependency('json-glib-1.0')
+
+executable('app', 'app.vala',
+           dependencies: [glib_dep, gobject_dep, gio_dep, soup_dep, vsgi_dep, json_glib_dep])

+ 9 - 0
frameworks/Vala/vsgi/setup.sh

@@ -0,0 +1,9 @@
+#!/bin/bash
+
+fw_depends meson vala valum libjson-glib-dev
+
+rm -rf build
+meson --buildtype=release build
+ninja -C build
+
+build/app --forks=$(nproc --ignore=1) &