Эх сурвалжийг харах

Merge pull request #3492 from michaelhixson/master

Put the docker branch into the master branch
Mike Smith 7 жил өмнө
parent
commit
e99d22fdd6
100 өөрчлөгдсөн 1162 нэмэгдсэн , 1026 устгасан
  1. 195 219
      .travis.yml
  2. 22 0
      Dockerfile
  3. 33 13
      README.md
  4. 0 33
      benchmark.cfg.example
  5. 11 59
      deployment/vagrant/bootstrap.sh
  6. 5 7
      deployment/vagrant/core.rb
  7. 0 2
      frameworks/C++/cpoll_cppsp/.gitignore
  8. 2 2
      frameworks/C++/cpoll_cppsp/Makefile
  9. 0 4
      frameworks/C++/cpoll_cppsp/benchmark_config.json
  10. 24 0
      frameworks/C++/cpoll_cppsp/cpoll_cppsp-base.dockerfile
  11. 3 0
      frameworks/C++/cpoll_cppsp/cpoll_cppsp-postgres-raw-threadpool.dockerfile
  12. 3 0
      frameworks/C++/cpoll_cppsp/cpoll_cppsp-postgres-raw.dockerfile
  13. 3 0
      frameworks/C++/cpoll_cppsp/cpoll_cppsp-raw.dockerfile
  14. 3 0
      frameworks/C++/cpoll_cppsp/cpoll_cppsp.dockerfile
  15. 0 8
      frameworks/C++/cpoll_cppsp/setup.sh
  16. 0 5
      frameworks/C++/cpoll_cppsp/setup_mysql.sh
  17. 0 5
      frameworks/C++/cpoll_cppsp/setup_postgresql.sh
  18. 1 1
      frameworks/C++/cpoll_cppsp/www/connectioninfo.H
  19. 0 4
      frameworks/C++/cppcms/.gitignore
  20. 0 3
      frameworks/C++/cppcms/benchmark_config.json
  21. 20 0
      frameworks/C++/cppcms/config-direct-mysql.json
  22. 19 0
      frameworks/C++/cppcms/config-nginx-mysql.json
  23. 4 4
      frameworks/C++/cppcms/config-nginx-postgresql.json
  24. 46 0
      frameworks/C++/cppcms/cppcms-base.dockerfile
  25. 3 0
      frameworks/C++/cppcms/cppcms-direct.dockerfile
  26. 3 0
      frameworks/C++/cppcms/cppcms-postgres.dockerfile
  27. 3 0
      frameworks/C++/cppcms/cppcms.dockerfile
  28. 1 0
      frameworks/C++/cppcms/nginx.conf
  29. 0 6
      frameworks/C++/cppcms/setup-direct-mysql.sh
  30. 0 6
      frameworks/C++/cppcms/setup-nginx-mysql.sh
  31. 0 6
      frameworks/C++/cppcms/setup-nginx-postgresql.sh
  32. 0 42
      frameworks/C++/cppcms/setup.sh
  33. 0 29
      frameworks/C++/cutelyst/CMakeLists.txt
  34. 18 73
      frameworks/C++/cutelyst/benchmark_config.json
  35. 0 79
      frameworks/C++/cutelyst/config.sh
  36. 19 0
      frameworks/C++/cutelyst/cutelyst-benchmark-app.dockerfile
  37. 19 0
      frameworks/C++/cutelyst/cutelyst-deps.dockerfile
  38. 14 0
      frameworks/C++/cutelyst/cutelyst-framework.dockerfile
  39. 12 0
      frameworks/C++/cutelyst/cutelyst-nginx-base.dockerfile
  40. 16 0
      frameworks/C++/cutelyst/cutelyst-nginx-my.dockerfile
  41. 16 0
      frameworks/C++/cutelyst/cutelyst-nginx-pg.dockerfile
  42. 13 0
      frameworks/C++/cutelyst/cutelyst-nginx.dockerfile
  43. 18 0
      frameworks/C++/cutelyst/cutelyst-pf-my-nodelay.dockerfile
  44. 17 0
      frameworks/C++/cutelyst/cutelyst-pf-my.dockerfile
  45. 14 0
      frameworks/C++/cutelyst/cutelyst-pf-nodelay.dockerfile
  46. 18 0
      frameworks/C++/cutelyst/cutelyst-pf-pg-nodelay.dockerfile
  47. 16 0
      frameworks/C++/cutelyst/cutelyst-pf-pg.dockerfile
  48. 17 0
      frameworks/C++/cutelyst/cutelyst-thread-my-nodelay.dockerfile
  49. 16 0
      frameworks/C++/cutelyst/cutelyst-thread-my.dockerfile
  50. 14 0
      frameworks/C++/cutelyst/cutelyst-thread-nodelay.dockerfile
  51. 17 0
      frameworks/C++/cutelyst/cutelyst-thread-pg-nodelay.dockerfile
  52. 16 0
      frameworks/C++/cutelyst/cutelyst-thread-pg.dockerfile
  53. 13 0
      frameworks/C++/cutelyst/cutelyst-thread.dockerfile
  54. 13 0
      frameworks/C++/cutelyst/cutelyst.dockerfile
  55. 0 10
      frameworks/C++/cutelyst/setup_pf.sh
  56. 0 11
      frameworks/C++/cutelyst/setup_pf_epoll.sh
  57. 0 10
      frameworks/C++/cutelyst/setup_pf_my.sh
  58. 0 11
      frameworks/C++/cutelyst/setup_pf_my_epoll.sh
  59. 0 10
      frameworks/C++/cutelyst/setup_pf_pg.sh
  60. 0 11
      frameworks/C++/cutelyst/setup_pf_pg_epoll.sh
  61. 0 10
      frameworks/C++/cutelyst/setup_thread.sh
  62. 0 11
      frameworks/C++/cutelyst/setup_thread_epoll.sh
  63. 0 11
      frameworks/C++/cutelyst/setup_thread_epoll_half.sh
  64. 0 10
      frameworks/C++/cutelyst/setup_thread_my.sh
  65. 0 11
      frameworks/C++/cutelyst/setup_thread_my_epoll.sh
  66. 0 10
      frameworks/C++/cutelyst/setup_thread_pg.sh
  67. 0 11
      frameworks/C++/cutelyst/setup_thread_pg_epoll.sh
  68. 0 11
      frameworks/C++/cutelyst/setup_thread_pg_epoll_half.sh
  69. 0 10
      frameworks/C++/cutelyst/setup_uwsgi_nginx.sh
  70. 0 10
      frameworks/C++/cutelyst/setup_uwsgi_nginx_my.sh
  71. 0 10
      frameworks/C++/cutelyst/setup_uwsgi_nginx_pg.sh
  72. 0 1
      frameworks/C++/cutelyst/source_code
  73. 26 0
      frameworks/C++/cutelyst/src/CMakeLists.txt
  74. 0 117
      frameworks/C++/ffead-cpp/benchmark_config.json
  75. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp-apache-mongo.dockerfile
  76. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp-apache-mysql.dockerfile
  77. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp-apache-postgresql.dockerfile
  78. 37 0
      frameworks/C++/ffead-cpp/ffead-cpp-base.dockerfile
  79. 20 0
      frameworks/C++/ffead-cpp/ffead-cpp-emb-base.dockerfile
  80. 6 12
      frameworks/C++/ffead-cpp/ffead-cpp-framework.sh
  81. 9 0
      frameworks/C++/ffead-cpp/ffead-cpp-httpd.dockerfile
  82. 7 13
      frameworks/C++/ffead-cpp/ffead-cpp-httpd.sh
  83. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp-mysql.dockerfile
  84. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp-nginx-mongo.dockerfile
  85. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp-nginx-mysql.dockerfile
  86. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp-nginx-postgresql.dockerfile
  87. 21 0
      frameworks/C++/ffead-cpp/ffead-cpp-nginx.dockerfile
  88. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp-postgresql.dockerfile
  89. 22 0
      frameworks/C++/ffead-cpp/ffead-cpp.dockerfile
  90. 112 0
      frameworks/C++/ffead-cpp/removed.txt
  91. 6 7
      frameworks/C++/ffead-cpp/server.sh
  92. 0 7
      frameworks/C++/ffead-cpp/setup-apache-mongo.sh
  93. 0 7
      frameworks/C++/ffead-cpp/setup-apache-mysql.sh
  94. 0 7
      frameworks/C++/ffead-cpp/setup-apache-postgresql.sh
  95. 0 9
      frameworks/C++/ffead-cpp/setup-mongo.sh
  96. 0 9
      frameworks/C++/ffead-cpp/setup-mysql.sh
  97. 0 13
      frameworks/C++/ffead-cpp/setup-nginx-mongo.sh
  98. 0 14
      frameworks/C++/ffead-cpp/setup-nginx-mysql.sh
  99. 0 13
      frameworks/C++/ffead-cpp/setup-nginx-postgresql.sh
  100. 0 9
      frameworks/C++/ffead-cpp/setup-postgresql.sh

+ 195 - 219
.travis.yml

@@ -3,241 +3,217 @@
 #
 
 sudo: required
+group: deprecated-2017-Q4
 dist: trusty
-group: deprecated-2017Q2
 language: generic
 python:
   - "2.7"
+services:
+  - docker
 
 env:
   matrix:
-    - "TESTDIR=C/duda"
-    - "TESTDIR=C/facil.io"
-    - "TESTDIR=C/onion"
-    - "TESTDIR=C/h2o"
-    - "TESTDIR=C/octane"
-    - "TESTDIR=C/libreactor"
-    - "TESTDIR=CSharp/aspnet"
-    - "TESTDIR=CSharp/aspnetcore"
-    ## - "TESTDIR=CSharp/aspnet-stripped"
-    - "TESTDIR=CSharp/evhttp-sharp"
-    ## - "TESTDIR=CSharp/HttpListener"
-    - "TESTDIR=CSharp/nancy"
-    - "TESTDIR=CSharp/revenj"
-    - "TESTDIR=CSharp/servicestack"
-    - "TESTDIR=C++/cppcms"
-    - "TESTDIR=C++/ffead-cpp"
-    - "TESTDIR=C++/cpoll_cppsp"
-    - "TESTDIR=C++/cutelyst"
-    - "TESTDIR=C++/silicon"
-    - "TESTDIR=C++/treefrog"
-    - "TESTDIR=C++/ulib"
-    - "TESTDIR=C++/wt"
-    - "TESTDIR=C++/poco"
-    - "TESTDIR=C++/luna"
-    - "TESTDIR=Clojure/compojure"
-    - "TESTDIR=Clojure/http-kit"
-    - "TESTDIR=Clojure/luminus"
-    - "TESTDIR=Clojure/macchiato"
-    - "TESTDIR=Clojure/pedestal"
-    - "TESTDIR=Clojure/aleph"
-    - "TESTDIR=Clojure/reitit"
-    - "TESTDIR=Crystal/amber"
-    - "TESTDIR=Crystal/crystal"
-    - "TESTDIR=Crystal/kemal"
-    - "TESTDIR=D/vibed"
-    - "TESTDIR=D/hunt"
-    - "TESTDIR=D/collie"
-    - "TESTDIR=Dart/dart-raw"
-    - "TESTDIR=Dart/redstone"
-    - "TESTDIR=Dart/start"
-    - "TESTDIR=Dart/stream"
-    - "TESTDIR=Elixir/phoenix"
-    - "TESTDIR=Elixir/cowboy"
-    - "TESTDIR=Erlang/chicagoboss"
-    - "TESTDIR=Erlang/cowboy"
-    - "TESTDIR=Erlang/elli"
-    - "TESTDIR=Erlang/mochiweb"
-    - "TESTDIR=Go/aah"
-    - "TESTDIR=Go/beego"
-    - "TESTDIR=Go/echo"
-    - "TESTDIR=Go/falcore"
-    - "TESTDIR=Go/fasthttp"
-    - "TESTDIR=Go/gin"
-    - "TESTDIR=Go/goji"
-    - "TESTDIR=Go/go-std"
-    - "TESTDIR=Go/revel"
-    - "TESTDIR=Go/webgo"
-    - "TESTDIR=Groovy/grails"
-    - "TESTDIR=Groovy/hot"
-    - "TESTDIR=Haskell/snap"
-    - "TESTDIR=Haskell/wai"
-    - "TESTDIR=Haskell/yesod"
-    - "TESTDIR=Haskell/servant"
-    - "TESTDIR=Haskell/spock"
-    - "TESTDIR=Java/act"
-    - "TESTDIR=Java/activeweb"
-    - "TESTDIR=Java/baratine"
-    - "TESTDIR=Java/bayou"
-    - "TESTDIR=Java/blade"
-    - "TESTDIR=Java/comsat"
-    - "TESTDIR=Java/curacao"
-    - "TESTDIR=Java/dropwizard"
-    - "TESTDIR=Java/gemini"
-    - "TESTDIR=Java/grizzly-bm"
-    - "TESTDIR=Java/jawn"
-    - "TESTDIR=Java/jetty"
-    - "TESTDIR=Java/jlhttp"
-    - "TESTDIR=Java/jooby"
-    - "TESTDIR=Java/light-java"
-    - "TESTDIR=Java/minijax"
-    - "TESTDIR=Java/netty"
-    - "TESTDIR=Java/ninja-standalone"
-    - "TESTDIR=Java/play1"
-    - "TESTDIR=Java/play2-java"
-    - "TESTDIR=Java/proteus"
-    - "TESTDIR=Java/rapidoid"
-    - "TESTDIR=Java/restexpress"
-    - "TESTDIR=Java/revenj-jvm"
-    - "TESTDIR=Java/servlet"
-    - "TESTDIR=Java/spark"
-    - "TESTDIR=Java/spring"
-    - "TESTDIR=Java/tapestry"
-    - "TESTDIR=Java/undertow"
-    - "TESTDIR=Java/undertow-jersey"
-    - "TESTDIR=Java/vertx"
-    - "TESTDIR=Java/vertx-web"
-    - "TESTDIR=Java/wicket"
-    - "TESTDIR=Java/wildfly-ee7"
-    - "TESTDIR=JavaScript/express"
-    - "TESTDIR=JavaScript/hapi"
-    - "TESTDIR=JavaScript/koa"
-    - "TESTDIR=JavaScript/nodejs"
-    - "TESTDIR=JavaScript/ringojs"
-    - "TESTDIR=JavaScript/sailsjs"
-    - "TESTDIR=Kotlin/hexagon"
-    - "TESTDIR=Kotlin/http4k"
-    - "TESTDIR=Kotlin/ktor"
-    - "TESTDIR=Kotlin/pronghorn"
-    - "TESTDIR=Lua/lapis"
-    - "TESTDIR=Lua/octopus"
-    - "TESTDIR=Lua/openresty"
-    - "TESTDIR=Nim/jester"
-    - "TESTDIR=Perl/dancer"
-    - "TESTDIR=Perl/kelp"
-    - "TESTDIR=Perl/mojolicious"
-    - "TESTDIR=Perl/plack"
-    - "TESTDIR=Perl/web-simple"
-    - "TESTDIR=PHP/cakephp"
-    - "TESTDIR=PHP/hhvm"
-    - "TESTDIR=PHP/php"
-    - "TESTDIR=PHP/cygnite"
-    - "TESTDIR=PHP/codeigniter"
-    - "TESTDIR=PHP/clancats"
-    - "TESTDIR=PHP/fat-free"
-    - "TESTDIR=PHP/fuel"
-    - "TESTDIR=PHP/kohana"
-    - "TESTDIR=PHP/kumbiaphp"
-    - "TESTDIR=PHP/laravel"
-    - "TESTDIR=PHP/limonade"
-    - "TESTDIR=PHP/lithium"
-    - "TESTDIR=PHP/lumen"
-    - "TESTDIR=PHP/peachpie"
-    - "TESTDIR=PHP/phalcon"
-    - "TESTDIR=PHP/phalcon-micro"
-    - "TESTDIR=PHP/phpixie"
-    - "TESTDIR=PHP/silex"
-    - "TESTDIR=PHP/silex-orm"
-    - "TESTDIR=PHP/slim"
-    - "TESTDIR=PHP/symfony"
-    - "TESTDIR=PHP/workerman"
-    - "TESTDIR=PHP/yaf"
-    - "TESTDIR=PHP/yii2"
-    - "TESTDIR=PHP/zend"
-    - "TESTDIR=PHP/zend1"
-    - "TESTDIR=PHP/phreeze"
-    - "TESTDIR=Python/aiohttp"
-    - "TESTDIR=Python/apistar"
-    - "TESTDIR=Python/api_hour"
-    - "TESTDIR=Python/bottle"
-    - "TESTDIR=Python/cherrypy"
-    - "TESTDIR=Python/django"
-    - "TESTDIR=Python/falcon"
-    - "TESTDIR=Python/flask"
-    - "TESTDIR=Python/japronto"
-    - "TESTDIR=Python/klein"
-    - "TESTDIR=Python/morepath"
-    - "TESTDIR=Python/pyramid"
-    - "TESTDIR=Python/sanic"
-    - "TESTDIR=Python/tornado"
-    - "TESTDIR=Python/turbogears"
-    - "TESTDIR=Python/uvicorn"
-    - "TESTDIR=Python/uwsgi"
-    - "TESTDIR=Python/web2py"
-    - "TESTDIR=Python/webware"
-    - "TESTDIR=Python/weppy"
-    - "TESTDIR=Python/wheezyweb"
-    - "TESTDIR=Python/wsgi"
-    - "TESTDIR=Ruby/grape"
-    - "TESTDIR=Ruby/h2o_mruby"
-    - "TESTDIR=Ruby/hanami"
-    - "TESTDIR=Ruby/ngx_mruby"
-    - "TESTDIR=Ruby/padrino"
-    - "TESTDIR=Ruby/rack"
-    - "TESTDIR=Ruby/rack-sequel"
-    - "TESTDIR=Ruby/rails"
-    - "TESTDIR=Ruby/roda-sequel"
-    - "TESTDIR=Ruby/sinatra"
-    - "TESTDIR=Ruby/sinatra-sequel"
-    - "TESTDIR=Rust/iron"
-    - "TESTDIR=Rust/nickel"
-    - "TESTDIR=Rust/hyper"
-    - "TESTDIR=Rust/tokio-minihttp"
-    - "TESTDIR=Rust/rouille"
-    - "TESTDIR=Rust/actix"
-    - "TESTDIR=Scala/akka-http"
-    - "TESTDIR=Scala/blaze"
-    - "TESTDIR=Scala/colossus"
-    - "TESTDIR=Scala/finagle"
-    - "TESTDIR=Scala/finatra"
-    - "TESTDIR=Scala/fintrospect"
-    - "TESTDIR=Scala/play2-scala"
-    - "TESTDIR=Scala/scruffy"
-    - "TESTDIR=Scala/spray"
-    - "TESTDIR=Scala/s-server"
-    - "TESTDIR=Scala/http4s"
-    - "TESTDIR=Scala/finch"
-    - "TESTDIR=Swift/vapor"
-    - "TESTDIR=Ur/urweb"
-    - "TESTDIR=Vala/vsgi"
-    - "TESTDIR=Vala/valum"
+     - "TESTLANG=C"
+     - "TESTDIR=CSharp/aspnet"
+     - "TESTDIR=CSharp/aspnetcore"
+     - "TESTDIR=CSharp/evhttp-sharp"
+     - "TESTDIR=CSharp/nancy"
+     - "TESTDIR=CSharp/revenj"
+     - "TESTDIR=CSharp/servicestack"
+     - "TESTDIR=C++/cppcms"
+     - "TESTDIR=C++/ffead-cpp"
+     - "TESTDIR=C++/cpoll_cppsp"
+     - "TESTDIR=C++/cutelyst"
+     - "TESTDIR=C++/silicon"
+     - "TESTDIR=C++/treefrog"
+     - "TESTDIR=C++/ulib"
+     - "TESTDIR=C++/wt"
+     - "TESTDIR=C++/poco"
+     - "TESTDIR=C++/luna"
+     - "TESTDIR=Clojure/aleph"
+     - "TESTDIR=Clojure/compojure"
+     - "TESTDIR=Clojure/http-kit"
+     - "TESTDIR=Clojure/luminus"
+     - "TESTDIR=Clojure/macchiato"
+     - "TESTDIR=Clojure/pedestal"
+     - "TESTDIR=Clojure/reitit"
+     - "TESTDIR=Crystal/amber"
+     - "TESTDIR=Crystal/crystal"
+     - "TESTDIR=Crystal/kemal"
+     - "TESTDIR=D/vibed"
+     - "TESTDIR=D/hunt"
+     - "TESTDIR=D/collie"
+     - "TESTDIR=Dart/dart"
+     - "TESTDIR=Dart/redstone"
+     - "TESTDIR=Dart/start"
+     - "TESTDIR=Dart/stream"
+     - "TESTDIR=Elixir/phoenix"
+     - "TESTDIR=Elixir/cowboy"
+     - "TESTDIR=Erlang/chicagoboss"
+     - "TESTDIR=Erlang/cowboy"
+     - "TESTDIR=Erlang/elli"
+     - "TESTDIR=Erlang/mochiweb"
+     - "TESTDIR=Go/aah"
+     - "TESTDIR=Go/beego"
+     - "TESTDIR=Go/echo"
+     - "TESTDIR=Go/falcore"
+     - "TESTDIR=Go/fasthttp"
+     - "TESTDIR=Go/gin"
+     - "TESTDIR=Go/goji"
+     - "TESTDIR=Go/go-std"
+     - "TESTDIR=Go/revel"
+     - "TESTDIR=Go/webgo"
+     - "TESTDIR=Groovy/grails"
+     - "TESTDIR=Groovy/hot"
+     - "TESTDIR=Haskell/snap"
+     - "TESTDIR=Haskell/wai"
+     - "TESTDIR=Haskell/yesod"
+     - "TESTDIR=Haskell/servant"
+     - "TESTDIR=Haskell/spock"
+     - "TESTDIR=Java/act"
+     - "TESTDIR=Java/activeweb"
+     - "TESTDIR=Java/baratine"
+     - "TESTDIR=Java/bayou"
+     - "TESTDIR=Java/blade"
+     - "TESTDIR=Java/comsat"
+     - "TESTDIR=Java/curacao"
+     - "TESTDIR=Java/dropwizard"
+     - "TESTDIR=Java/gemini"
+     - "TESTDIR=Java/grizzly"
+     - "TESTDIR=Java/grizzly-jersey"
+     - "TESTDIR=Java/jawn"
+     - "TESTDIR=Java/jetty"
+     - "TESTDIR=Java/jlhttp"
+     - "TESTDIR=Java/jooby"
+     - "TESTDIR=Java/light-java"
+     - "TESTDIR=Java/minijax"
+     - "TESTDIR=Java/netty"
+     - "TESTDIR=Java/ninja-standalone"
+     - "TESTDIR=Java/play1"
+     - "TESTDIR=Java/play2-java"
+     - "TESTDIR=Java/proteus"
+     - "TESTDIR=Java/rapidoid"
+     - "TESTDIR=Java/restexpress"
+     - "TESTDIR=Java/revenj-jvm"
+     - "TESTDIR=Java/servlet"
+     - "TESTDIR=Java/spark"
+     - "TESTDIR=Java/spring"
+     - "TESTDIR=Java/tapestry"
+     - "TESTDIR=Java/undertow"
+     - "TESTDIR=Java/undertow-jersey"
+     - "TESTDIR=Java/vertx"
+     - "TESTDIR=Java/vertx-web"
+     - "TESTDIR=Java/wicket"
+     - "TESTDIR=Java/wildfly-ee7"
+     - "TESTLANG=JavaScript"
+     - "TESTDIR=Kotlin/hexagon"
+     - "TESTDIR=Kotlin/http4k"
+     - "TESTDIR=Kotlin/ktor"
+     - "TESTDIR=Kotlin/pronghorn"
+     - "TESTDIR=Lua/lapis"
+     - "TESTDIR=Lua/octopus"
+     - "TESTDIR=Lua/openresty"
+     - "TESTDIR=Nim/jester"
+     - "TESTDIR=Perl/dancer"
+     - "TESTDIR=Perl/kelp"
+     - "TESTDIR=Perl/mojolicious"
+     - "TESTDIR=Perl/plack"
+     - "TESTDIR=Perl/web-simple"
+     - "TESTDIR=PHP/cakephp"
+     - "TESTDIR=PHP/hhvm"
+     - "TESTDIR=PHP/php"
+     - "TESTDIR=PHP/codeigniter"
+     - "TESTDIR=PHP/cygnite"
+     - "TESTDIR=PHP/clancats"
+     - "TESTDIR=PHP/fat-free"
+     - "TESTDIR=PHP/fuel"
+     - "TESTDIR=PHP/kohana"
+     - "TESTDIR=PHP/kumbiaphp"
+     - "TESTDIR=PHP/laravel"
+     - "TESTDIR=PHP/limonade"
+     - "TESTDIR=PHP/lithium"
+     - "TESTDIR=PHP/lumen"
+     - "TESTDIR=PHP/peachpie"
+     - "TESTDIR=PHP/phalcon"
+     - "TESTDIR=PHP/phpixie"
+     - "TESTDIR=PHP/silex"
+     - "TESTDIR=PHP/slim"
+     - "TESTDIR=PHP/symfony"
+     - "TESTDIR=PHP/workerman"
+     - "TESTDIR=PHP/yii2"
+     - "TESTDIR=PHP/zend"
+     - "TESTDIR=PHP/zend1"
+     - "TESTDIR=PHP/phreeze"
+     - "TESTDIR=Python/aiohttp"
+     - "TESTDIR=Python/apistar"
+     - "TESTDIR=Python/api_hour"
+     - "TESTDIR=Python/bottle"
+     - "TESTDIR=Python/cherrypy"
+     - "TESTDIR=Python/django"
+     - "TESTDIR=Python/falcon"
+     - "TESTDIR=Python/flask"
+     - "TESTDIR=Python/japronto"
+     - "TESTDIR=Python/klein"
+     - "TESTDIR=Python/morepath"
+     - "TESTDIR=Python/pyramid"
+     - "TESTDIR=Python/sanic"
+     - "TESTDIR=Python/tornado"
+     - "TESTDIR=Python/turbogears"
+     - "TESTDIR=Python/uvicorn"
+     - "TESTDIR=Python/uwsgi"
+     - "TESTDIR=Python/web2py"
+     - "TESTDIR=Python/webware"
+     - "TESTDIR=Python/weppy"
+     - "TESTDIR=Python/wheezyweb"
+     - "TESTDIR=Python/wsgi"
+     - "TESTDIR=Ruby/grape"
+     - "TESTDIR=Ruby/h2o_mruby"
+     - "TESTDIR=Ruby/hanami"
+     - "TESTDIR=Ruby/padrino"
+     - "TESTDIR=Ruby/rack"
+     - "TESTDIR=Ruby/rack-sequel"
+     - "TESTDIR=Ruby/rails"
+     - "TESTDIR=Ruby/roda-sequel"
+     - "TESTDIR=Ruby/sinatra"
+     - "TESTDIR=Ruby/sinatra-sequel"
+     - "TESTDIR=Rust/iron"
+     - "TESTDIR=Rust/nickel"
+     - "TESTDIR=Rust/hyper"
+     - "TESTDIR=Rust/may-minihttp"
+     - "TESTDIR=Rust/tokio-minihttp"
+     - "TESTDIR=Rust/rouille"
+     - "TESTDIR=Rust/actix"
+     - "TESTDIR=Scala/akka-http"
+     - "TESTDIR=Scala/blaze"
+     - "TESTDIR=Scala/colossus"
+     - "TESTDIR=Scala/finagle"
+     - "TESTDIR=Scala/finatra"
+     - "TESTDIR=Scala/finch"
+     - "TESTDIR=Scala/fintrospect"
+     - "TESTDIR=Scala/http4s"
+     - "TESTDIR=Scala/play2-scala"
+     - "TESTDIR=Swift/vapor"
+     - "TESTDIR=Ur/urweb"
+     - "TESTDIR=Vala/vsgi"
+     - "TESTDIR=Vala/valum"
+
 
 before_script:
 
   # Runs travis_diff, printing the output to the terminal, and searches for travis-diff-continue
   # to determine if the suite should be installed and the current $TESTDIR test should run.
-  - export CONTINUE_TEST=`./toolset/travis/travis_diff.py | tee /dev/tty | grep -q "travis-diff-continue" && echo 1`
-  # travis_clean.sh takes care of some services that are baked into the travis
-  # build. Using language: generic gets us an ubuntu build with fewer services,
-  # but includes database installs, ruby and rvm installs, and others that interfere
-  # with running the suite in a clean ubuntu install.
-  - if [ $CONTINUE_TEST ]; then source ./toolset/travis/travis_clean.sh; else echo 'Skipping travis_clean.sh'; fi
+  - export RUN_TESTS=`./toolset/travis/travis_diff.py | tee /dev/tty | grep -oP "travis-run-tests \K(.*)"`
+
+  - if [ "$RUN_TESTS" ]; then docker pull techempower/tfb.wrk; fi
+  - if [ "$RUN_TESTS" ]; then docker pull techempower/tfb; fi
 
-  # travis_setup.sh runs all the same commands you would run if you were setting up
-  # a development environment via:
-  # http://frameworkbenchmarks.readthedocs.io/en/latest/Development/Installation-Guide/
-  - if [ $CONTINUE_TEST ]; then source ./toolset/travis/travis_setup.sh; else echo 'Skipping travis_setup.sh'; fi
+  # Stop services that would claim ports we may need
+  - sudo service mysql stop
+  - sudo service postgresql stop
 
 script:
 
   # run-ci.py runs the diffing to see if travis needs to test this framework. Ideally/eventually,
   # we'd like to try and do the diffing before travis_clean & setup.
   # This will run the tests exactly as you would in your own vm:
-  # ./toolset/run-tests.py --mode verify --test (all the valid tests for this framework)
-  - if [ $CONTINUE_TEST ]; then tfb --mode verify --test-dir "$TESTDIR"; else echo 'Skipping test verification.'; fi
-  # - tfb --mode verify --test
-
-cache:
-  directories:
-    - $HOME/.m2/repository
-    - $HOME/.cache/pip
+  - if [ "$RUN_TESTS" ]; then docker network create tfb > /dev/null 2>&1 && docker run --network=tfb -v /var/run/docker.sock:/var/run/docker.sock --mount type=bind,source=`pwd`,target=/FrameworkBenchmarks techempower/tfb --mode verify --test-dir $RUN_TESTS; else echo 'Skipping test verification.'; fi

+ 22 - 0
Dockerfile

@@ -0,0 +1,22 @@
+FROM ubuntu:16.04
+
+# One -q produces output suitable for logging (mostly hides
+# progress indicators)
+RUN apt-get -yq update
+
+# WARNING: DONT PUT A SPACE AFTER ANY BACKSLASH OR APT WILL BREAK
+RUN apt-get -qqy install -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" \
+  git-core \
+  cloc dstat                    `# Collect resource usage statistics` \
+  python-dev \
+  python-pip \
+  python-software-properties \
+  libmysqlclient-dev            `# Needed for MySQL-python` \
+  libpq-dev                     `# Needed for psycopg2`
+
+RUN pip install colorama==0.3.1 requests MySQL-python psycopg2-binary pymongo docker==3.1.0
+
+ENV PYTHONPATH /FrameworkBenchmarks
+ENV FWROOT /FrameworkBenchmarks
+
+ENTRYPOINT ["python", "/FrameworkBenchmarks/toolset/run-tests.py"]

+ 33 - 13
README.md

@@ -9,7 +9,7 @@ If you're new to the project, welcome! Please feel free to ask questions [here](
 
 This project provides representative performance measures across a wide field of web application frameworks. With much help from the community, coverage is quite broad and we are happy to broaden it further with contributions. The project presently includes frameworks on many languages including `Go`, `Python`, `Java`, `Ruby`, `PHP`, `C#`, `Clojure`, `Groovy`, `Dart`, `JavaScript`, `Erlang`, `Haskell`, `Scala`, `Perl`, `Lua`, `C`, and others.  The current tests exercise plaintext responses, JSON seralization, database reads and writes via the object-relational mapper (ORM), collections, sorting, server-side templates, and XSS counter-measures. Future tests will exercise other components and greater computation.
 
-[Read more and see the results of our tests on cloud and physical hardware](http://www.techempower.com/benchmarks/). 
+[Read more and see the results of our tests on Amazon EC2 and physical hardware](http://www.techempower.com/benchmarks/). 
 For descriptions of the test types that we run, see the 
 [test requirements section](https://frameworkbenchmarks.readthedocs.org/en/latest/Project-Information/Framework-Tests/).
 
@@ -25,25 +25,45 @@ required.
 
         $ git clone https://github.com/TechEmpower/FrameworkBenchmarks.git
 
-2. Move into the vagrant-development directory.
+2. Change directories
 
         $ cd FrameworkBenchmarks/deployment/vagrant
 
-3. Turn on the VM (takes at least 20 minutes).
+3. Create the TFB Docker virtual network
 
-        $ vagrant up
+        $ docker network create tfb
 
-4. Enter the VM.
+4. Run a test.
 
-        $ vagrant ssh
+        $ docker run -it --network=tfb -v /var/run/docker.sock:/var/run/docker.sock --mount type=bind,source=[ABS PATH TO THIS DIR],target=/FrameworkBenchmarks techempower/tfb --mode verify --test gemini
 
-5. Move into the FrameworkBenchmarks directory in the vm.
+### Explanation of the run script
 
-        vagrant@TFB-all:~$ cd ~/FrameworkBenchmarks
-        
-6. Run a test.
+That run script is pretty wordy, but each and every flag is required. Unfortunately, because of the way that Docker runs processes, you **cannot** put this inside of a shell script without breaking how `ctrl+c` and `SIGTERM` work (the shell script would receive the signal, do nothing with the underlying python suite running, and exit, orphaning the toolset to continue running).
 
-        vagrant@TFB-all:~/FrameworkBenchmarks$ tfb --mode verify --test beego
+- `-it` tells docker to run this in 'interactive' mode and simulate a TTY, so that `ctrl+c` is propagated.
+- `--network=tfb` tells the container to join the 'tfb' Docker virtual network
+- `-v` specifies which Docker socket path to mount as a volume in the running container. This allows docker commands run inside this container to use the host container's docker to create/run/stop/remove containers.
+- `--mount` mounts the FrameworkBenchmarks source directory as a volume to share with the container so that rebuilding the toolset image is unnecessary and any changes you make on the host system are available in the running toolset container.
+- `techempower/tfb` is the name of toolset container to run
+- `--mode verify --test gemini` are the command to pass to the toolset.
+
+#### A note on Linux:
+
+You may not want to call step 4 from above every time. You can add an `alias` to your `~/.bash_aliases` file to shorten it since it will not change once configured:
+
+`$ alias tfb="docker run -it --network=tfb -v /var/run/docker.sock:/var/run/docker.sock --mount type=bind,source=[ABS PATH TO THIS DIR],target=/FrameworkBenchmarks techempower/tfb"`
+
+`$ source ~/.bash_aliases`
+
+Now you can run the toolset via `tfb`:
+
+`$ tfb --mode verify --test gemini`
+
+#### A note on Windows:
+
+- Docker expects Linux-style paths. If you cloned on your `C:\` drive, then `[ABS PATH TO THIS DIR]` would be `/c/FrameworkBenchmarks`.
+- [Docker for Windows](https://www.docker.com/docker-windows) understands `/var/run/docker.sock` even though that is not a valid path on Windows. [Docker Toolbox](https://docs.docker.com/toolbox/toolbox_install_windows/) **may** not - use at your own risk.
 
 ## Add a New Test
 
@@ -65,10 +85,10 @@ If you find any errors or areas for improvement within the docs, feel free to ei
 Results of continuous benchmarking runs are available in real time [here](https://tfb-status.techempower.com/).
 
 #### Data Visualization
-If you have a `results.json` file that you would like to visualize, you can [do that here](https://www.techempower.com/benchmarks/#section=test). You can also attach a `runid` parameter to that url where `runid` is a run listed on [tfb-status](https://tfb-status.techempower.com) like so: https://www.techempower.com/benchmarks/#section=test&runid=fd07b64e-47ce-411e-8b9b-b13368e988c6
+If you have a `results.json` file that you would like to visualize, you can [do that here](https://www.techempower.com/benchmarks/#section=test)(these will be visualized using the metadata from the last known round; if you are adding a new test, it will not visualize anything). You can also attach a `runid` parameter to that url where `runid` is a run listed on [tfb-status](https://tfb-status.techempower.com) like so: https://www.techempower.com/benchmarks/#section=test&runid=fd07b64e-47ce-411e-8b9b-b13368e988c6
 
 ## Contributing
 
 The community has consistently helped in making these tests better, and we welcome any and all changes. Reviewing our contribution practices and guidelines will help to keep us all on the same page. The [contribution guide](https://frameworkbenchmarks.readthedocs.org/en/latest/Development/Contributing-Guide/) can be found in the [TFB documentation](https://frameworkbenchmarks.readthedocs.org/).
 
-Join in the conversation on our [mailing list](https://groups.google.com/forum/?fromgroups=#!forum/framework-benchmarks), on [Twitter](https://twitter.com/tfbenchmarks), or chat with us on [Freenode](https://webchat.freenode.net/) at `#techempower-fwbm`. 
+Join in the conversation at our [Google Group](https://groups.google.com/forum/?fromgroups=#!forum/framework-benchmarks), or chat with us on [Freenode](https://webchat.freenode.net/) at `#techempower-fwbm`. 

+ 0 - 33
benchmark.cfg.example

@@ -1,33 +0,0 @@
-[Defaults]
-# Available Keys:
-os=linux
-server_host=TFB-server
-client_host=TFB-client
-client_identity_file=/home/techempower/.ssh/id_rsa
-client_user=techempower
-database_host=TFB-database
-database_identity_file=/home/techempower/.ssh/id_rsa
-database_os=linux
-database_user=techempower
-duration=15
-exclude=None
-install=server
-install_error_action=continue
-install_strategy=unified
-install_only=False
-list_tests=False
-concurrency_levels=[16, 32, 64, 128, 256, 512]
-pipeline_concurrency_levels=[256,1024,4096,16384]
-query_levels=[1,5,10,15,20]
-cached_query_levels=[1,10,20,50,100]
-mode=benchmark
-sleep=60
-test=None
-type=all
-verbose=True
-clean=False
-clean_all=False
-ulimit=200000
-#results_name=My Benchmarking Run %%Y-%%m-%%d %%H:%%M:%%S
-#results_environment=My Server Environment
-#results_upload_uri=https://example.com/uploads

+ 11 - 59
deployment/vagrant/bootstrap.sh

@@ -9,68 +9,18 @@ if [ ! -e "~/.firstboot" ]; then
   echo "grub-pc grub-pc/install_devices multiselect     /dev/sda" | sudo debconf-set-selections
 
   # Install prerequisite tools
-  echo "Installing prerequisites"
+  echo "Installing docker"
+  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+  sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
   sudo apt-get update
-  sudo apt-get install -y git
-  git config --global core.autocrlf input
+  sudo apt-get install -yqq docker-ce
 
-  # Setting up ssh & passwordless sudo
-  ssh-keygen -f /home/vagrant/.ssh/id_rsa -N '' -t rsa
-  cat /home/vagrant/.ssh/id_rsa.pub >> /home/vagrant/.ssh/authorized_keys
-  chmod og-wx /home/vagrant/.ssh/authorized_keys
-  echo "NoHostAuthenticationForLocalhost yes" | tee -a /home/vagrant/.ssh/config
-  chmod 600 ~/.ssh/config
+  # Setting up passwordless sudo
   echo "vagrant ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers
 
-  # Setting up hosts aliases
-  echo 127.0.0.1 TFB-database | sudo tee --append /etc/hosts
-  echo 127.0.0.1 TFB-client   | sudo tee --append /etc/hosts
-  echo 127.0.0.1 TFB-server   | sudo tee --append /etc/hosts
-
-  # Setting up new FWROOT
-  export FWROOT="/home/vagrant/FrameworkBenchmarks"
-  echo `export FWROOT="/home/vagrant/FrameworkBenchmarks"` >> ~/.bashrc
-
   sudo chown vagrant:vagrant ~/FrameworkBenchmarks
   cd ~/FrameworkBenchmarks
 
-  # Set up the benchmark.cfg for vagrant user
-cat <<EOF > benchmark.cfg
-[Defaults]
-# Available Keys:
-os=linux
-server_host=TFB-server
-client_host=TFB-client
-client_identity_file=/home/vagrant/.ssh/id_rsa
-client_user=vagrant
-database_host=TFB-database
-database_identity_file=/home/vagrant/.ssh/id_rsa
-database_os=linux
-database_user=vagrant
-duration=60
-exclude=None
-install=server
-install_error_action=continue
-install_strategy=unified
-install_only=False
-list_tests=False
-concurrency_levels=[8, 16, 32, 64, 128, 256]
-pipeline_concurrency_levels=[256,1024,4096,16384]
-query_levels=[1, 5,10,15,20]
-cached_query_levels=[1,10,20,50,100]
-threads=8
-mode=benchmark
-sleep=60
-test=None
-type=all
-verbose=True
-clean=False
-clean_all=False
-ulimit=200000
-EOF
-
-  source ./toolset/setup/linux/prerequisites.sh
-
   # Setup a nice welcome message for our guest
   echo "Setting up welcome message"
   sudo rm -f /etc/update-motd.d/51-cloudguest
@@ -79,9 +29,6 @@ EOF
   sudo cat <<EOF > motd
 Welcome to the FrameworkBenchmarks project!
 
-  To get started, perhaps try this:
-    $ cd FrameworkBenchmarks
-
   You can get lots of help:
     $ tfb --help
 
@@ -91,6 +38,11 @@ Welcome to the FrameworkBenchmarks project!
   This Vagrant environment is already setup and ready to go.
 EOF
 
-  sudo mv motd /etc/
+  cat <<EOF > /home/vagrant/.bash_aliases
+alias tfb="docker run -it --network=tfb -v /var/run/docker.sock:/var/run/docker.sock --mount type=bind,source=/home/vagrant/FrameworkBenchmarks,target=/FrameworkBenchmarks techempower/tfb"
+EOF
 
+  sudo mv motd /etc/
+  sudo chmod 777 /var/run/docker.sock
+  docker network create tfb
 fi

+ 5 - 7
deployment/vagrant/core.rb

@@ -11,9 +11,8 @@ end
 
 def provider_libvirt(config)
   config.vm.provider :libvirt do |virt, override|
-    virt.name = "TechEmpower Framework Benchmarks"
     override.vm.hostname = "TFB-all"
-    override.vm.box = "RX14/trusty64"
+    override.vm.box = "generic/ubuntu1604"
 
     unless ENV.fetch('TFB_SHOW_VM', false)
       virt.graphics_type = "none"
@@ -22,17 +21,16 @@ def provider_libvirt(config)
     virt.memory = ENV.fetch('TFB_KVM_MEM', 3022)
     virt.cpus = ENV.fetch('TFB_KVM_CPU', 2)
 
-    override.vm.synced_folder "../../toolset", "/home/vagrant/FrameworkBenchmarks/toolset", type: "nfs"
-    override.vm.synced_folder "../../frameworks", "/home/vagrant/FrameworkBenchmarks/frameworks", type: "nfs"
-    override.vm.synced_folder "../../results", "/home/vagrant/FrameworkBenchmarks/results", type: "nfs", create: true
+    override.vm.synced_folder "../../toolset", "/home/vagrant/FrameworkBenchmarks/toolset", type: "nfs", nfs_udp: false
+    override.vm.synced_folder "../../frameworks", "/home/vagrant/FrameworkBenchmarks/frameworks", type: "nfs", nfs_udp: false
+    override.vm.synced_folder "../../results", "/home/vagrant/FrameworkBenchmarks/results", type: "nfs", nfs_udp: false, create: true
   end
 end
 
 def provider_virtualbox(config)
   config.vm.provider :virtualbox do |vb, override|
-    vb.name = "TechEmpower Framework Benchmarks"
     override.vm.hostname = "TFB-all"
-    override.vm.box = "ubuntu/trusty64"
+    override.vm.box = "ubuntu/xenial64"
 
     if ENV.fetch('TFB_SHOW_VM', false)
       vb.gui = true

+ 0 - 2
frameworks/C++/cpoll_cppsp/.gitignore

@@ -1,2 +0,0 @@
-/www/*.so
-/www/*.txt

+ 2 - 2
frameworks/C++/cpoll_cppsp/Makefile

@@ -3,7 +3,7 @@ all: cppsp_0.2.3
 clean:
 	rm -f www/*.so www/*.txt
 	rm -f www/forcedynamic.cppsm.*
-	$(MAKE) -C $(IROOT)/cppsp_0.2.3 clean
+	$(MAKE) -C /installs/cppsp_0.2.3 clean
 
 cppsp_0.2.3:
-	$(MAKE) -C $(IROOT)/cppsp_0.2.3 all
+	$(MAKE) -C /installs/cppsp_0.2.3 all

+ 0 - 4
frameworks/C++/cpoll_cppsp/benchmark_config.json

@@ -2,7 +2,6 @@
   "framework": "cpoll_cppsp",
   "tests": [{
     "default": {
-      "setup_file": "setup",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
       "port": 16969,
@@ -22,7 +21,6 @@
       "versus": "cpoll_cppsp"
     },
     "raw": {
-      "setup_file": "setup_mysql",
       "db_url": "/db",
       "query_url": "/db?queries=",
       "fortune_url": "/fortune",
@@ -44,7 +42,6 @@
       "versus": "cpoll_cppsp"
     },
     "postgres-raw": {
-      "setup_file": "setup_postgresql",
       "db_url": "/db_pg_async",
       "query_url": "/db_pg_async?queries=", 
       "port": 16969,
@@ -64,7 +61,6 @@
       "versus": "cpoll_cppsp"
     },
     "postgres-raw-threadpool": {
-      "setup_file": "setup_postgresql",
       "db_url": "/db_pg_threadpool",
       "query_url": "/db_pg_threadpool?queries=", 
       "port": 16969,

+ 24 - 0
frameworks/C++/cpoll_cppsp/cpoll_cppsp-base.dockerfile

@@ -0,0 +1,24 @@
+FROM techempower/gcc-4.8:0.1
+
+WORKDIR /installs
+
+ENV VERSION=0.2.3
+ENV CPPSP_HOME=/installs/cppsp_$VERSION
+
+RUN wget -q http://downloads.sourceforge.net/project/cpollcppsp/CPPSP%200.2%20%28testing%29/cppsp_$VERSION.tar.xz
+RUN tar xf cppsp_$VERSION.tar.xz
+
+RUN mv cppsp_rel$VERSION/ $CPPSP_HOME
+
+RUN sed -i 's|CXX := .*|CXX := g++-4.8|g' $CPPSP_HOME/makefile
+RUN sed -i 's|-Wall|-w|g' $CPPSP_HOME/makefile
+
+RUN apt install -yqq postgresql-server-dev-9.5
+ENV CPLUS_INCLUDE_PATH=/usr/include/postgresql:/usr/include/postgresql/9.5/server:${CPLUS_INCLUDE_PATH}
+
+ADD ./ /cpoll_cppsp
+WORKDIR /cpoll_cppsp
+
+RUN make clean && make
+
+WORKDIR $CPPSP_HOME

+ 3 - 0
frameworks/C++/cpoll_cppsp/cpoll_cppsp-postgres-raw-threadpool.dockerfile

@@ -0,0 +1,3 @@
+FROM techempower/cpoll_cppsp-base:0.1
+
+CMD ./run_application /cpoll_cppsp/www -g g++-4.8 -m /forcedynamic.cppsm

+ 3 - 0
frameworks/C++/cpoll_cppsp/cpoll_cppsp-postgres-raw.dockerfile

@@ -0,0 +1,3 @@
+FROM techempower/cpoll_cppsp-base:0.1
+
+CMD ./run_application /cpoll_cppsp/www -g g++-4.8 -m /forcedynamic.cppsm

+ 3 - 0
frameworks/C++/cpoll_cppsp/cpoll_cppsp-raw.dockerfile

@@ -0,0 +1,3 @@
+FROM techempower/cpoll_cppsp-base:0.1
+
+CMD ./run_application /cpoll_cppsp/www -g g++-4.8 -m /forcedynamic.cppsm

+ 3 - 0
frameworks/C++/cpoll_cppsp/cpoll_cppsp.dockerfile

@@ -0,0 +1,3 @@
+FROM techempower/cpoll_cppsp-base:0.1
+
+CMD ./run_application /cpoll_cppsp/www -g g++-4.8 -m /forcedynamic.cppsm

+ 0 - 8
frameworks/C++/cpoll_cppsp/setup.sh

@@ -1,8 +0,0 @@
-#!/bin/bash
-
-fw_depends postgresql-server-dev-9.3 cppsp
-
-make clean
-make
-cd $CPPSP_HOME
-./run_application $TROOT/www -g g++-4.8 -m /forcedynamic.cppsm &

+ 0 - 5
frameworks/C++/cpoll_cppsp/setup_mysql.sh

@@ -1,5 +0,0 @@
-#!/bin/bash
-
-fw_depends mysql
-
-source ./setup.sh

+ 0 - 5
frameworks/C++/cpoll_cppsp/setup_postgresql.sh

@@ -1,5 +0,0 @@
-#!/bin/bash
-
-fw_depends postgresql
-
-source ./setup.sh

+ 1 - 1
frameworks/C++/cpoll_cppsp/www/connectioninfo.H

@@ -1,4 +1,4 @@
-#define BENCHMARK_DB_HOST "TFB-database"
+#define BENCHMARK_DB_HOST "tfb-database"
 #define MYSQL_MAX_CONNECTIONS 3000
 
 #include <stdexcept>

+ 0 - 4
frameworks/C++/cppcms/.gitignore

@@ -1,4 +0,0 @@
-mycppcms
-config.js
-fortunes_view.cpp
-

+ 0 - 3
frameworks/C++/cppcms/benchmark_config.json

@@ -2,7 +2,6 @@
   "framework": "cppcms",
   "tests": [{
     "default": {
-      "setup_file": "setup-nginx-mysql",
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/queries/",
@@ -26,7 +25,6 @@
       "notes": ""
     },
     "postgres": {
-      "setup_file": "setup-nginx-postgresql",
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/queries/",
@@ -50,7 +48,6 @@
       "notes": ""
     },
     "direct": {
-      "setup_file": "setup-direct-mysql",
       "json_url": "/json",
       "db_url": "/db",
       "query_url": "/queries/",

+ 20 - 0
frameworks/C++/cppcms/config-direct-mysql.json

@@ -0,0 +1,20 @@
+{
+    "service": {
+        "api": "http",
+        "ip": "0.0.0.0",
+        "port": 8080
+    },
+    "http": {
+        "script": "/"
+    },
+    "gzip": {
+        "enable": false
+    },
+    "app": {
+        "db_connection_string": "mysql:host=tfb-database;database=hello_world;user=benchmarkdbuser;password=benchmarkdbpass;set_charset_name=utf8;@pool_size=10"
+    },
+    "cache": {
+        "backend": "thread_shared",
+        "limit": 10000
+    }
+}

+ 19 - 0
frameworks/C++/cppcms/config-nginx-mysql.json

@@ -0,0 +1,19 @@
+{
+    "service": {
+        "api": "fastcgi",
+        "socket": "/var/tmp/cppcms.sock"
+    },
+    "http": {
+        "script": "/"
+    },
+    "gzip": {
+        "enable": false
+    },
+    "app": {
+        "db_connection_string": "mysql:host=tfb-database;database=hello_world;user=benchmarkdbuser;password=benchmarkdbpass;set_charset_name=utf8;@pool_size=10"
+    },
+    "cache": {
+        "backend": "thread_shared",
+        "limit": 10000
+    }
+}

+ 4 - 4
frameworks/C++/cppcms/config.js.tpl → frameworks/C++/cppcms/config-nginx-postgresql.json

@@ -1,7 +1,7 @@
 {
     "service": {
-        "api": "--api--",
-        --address--
+        "api": "fastcgi",
+        "socket": "/var/tmp/cppcms.sock"
     },
     "http": {
         "script": "/"
@@ -10,10 +10,10 @@
         "enable": false
     },
     "app": {
-        "db_connection_string": "--db--"
+        "db_connection_string": "postgresql:host=tfb-database;dbname=hello_world;user=benchmarkdbuser;password=benchmarkdbpass;@pool_size=10"
     },
     "cache": {
         "backend": "thread_shared",
         "limit": 10000
     }
-}
+}

+ 46 - 0
frameworks/C++/cppcms/cppcms-base.dockerfile

@@ -0,0 +1,46 @@
+FROM techempower/nginx:0.1
+
+RUN apt install -yqq libgcrypt11-dev cmake python
+
+WORKDIR /installs
+
+#http://cppcms.com/wikipp/en/page/cppcms_1x_build
+#note '-rc1' in the url
+ENV CPPCMS_VERSION=1.1.1
+ENV BACKNAME=cppcms
+ENV CPPCMS_HOME=/installs/$BACKNAME-$CPPCMS_VERSION
+ENV CPPCMSROOT=${CPPCMS_HOME}-install
+
+RUN wget -q https://download.sourceforge.net/project/cppcms/$BACKNAME/$CPPCMS_VERSION-rc1/$BACKNAME-$CPPCMS_VERSION.tar.bz2
+RUN tar xf $BACKNAME-$CPPCMS_VERSION.tar.bz2
+
+RUN cd $BACKNAME-$CPPCMS_VERSION && \
+    mkdir build && \
+    cd build && \
+    cmake -DCMAKE_INSTALL_PREFIX=${CPPCMSROOT} .. && \
+    make && make install
+
+ENV CPPCMS_HOME=${CPPCMSROOT}
+
+
+ENV CPPDB_VERSION=0.3.1
+ENV BACKNAME=cppdb
+ENV CPPDB_HOME=/installs/$BACKNAME-$CPPDB_VERSION
+ENV CPPDBROOT=${CPPDB_HOME}-install
+
+RUN wget -q https://download.sourceforge.net/project/cppcms/$BACKNAME/$CPPDB_VERSION/$BACKNAME-$CPPDB_VERSION.tar.bz2
+RUN tar xf $BACKNAME-$CPPDB_VERSION.tar.bz2
+
+RUN cd $BACKNAME-$CPPDB_VERSION && \
+    mkdir build && cd build && \
+    cmake -DCMAKE_INSTALL_PREFIX=${CPPDBROOT} .. && \
+    make && make install
+
+ENV CPPDB_HOME=${CPPDBROOT}
+
+ADD ./ /cppcms
+WORKDIR /cppcms
+
+ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CPPCMS_HOME}/lib:${CPPDB_HOME}/lib
+
+RUN make

+ 3 - 0
frameworks/C++/cppcms/cppcms-direct.dockerfile

@@ -0,0 +1,3 @@
+FROM techempower/cppcms-base:0.1
+
+CMD ./mycppcms -c config-direct-mysql.json

+ 3 - 0
frameworks/C++/cppcms/cppcms-postgres.dockerfile

@@ -0,0 +1,3 @@
+FROM techempower/cppcms-base:0.1
+
+CMD nginx -c /cppcms/nginx.conf && ./mycppcms -c config-nginx-postgresql.json

+ 3 - 0
frameworks/C++/cppcms/cppcms.dockerfile

@@ -0,0 +1,3 @@
+FROM techempower/cppcms-base:0.1
+
+CMD nginx -c /cppcms/nginx.conf && ./mycppcms -c config-nginx-mysql.json

+ 1 - 0
frameworks/C++/cppcms/nginx.conf

@@ -1,5 +1,6 @@
 # This file is based on /usr/local/nginx/conf/nginx.conf.default.
 
+user root;
 worker_processes auto;
 error_log stderr error;
 

+ 0 - 6
frameworks/C++/cppcms/setup-direct-mysql.sh

@@ -1,6 +0,0 @@
-#!/bin/bash
-
-DRIVER=mysql
-NGINX=
-
-source ${TROOT}/setup.sh

+ 0 - 6
frameworks/C++/cppcms/setup-nginx-mysql.sh

@@ -1,6 +0,0 @@
-#!/bin/bash
-
-DRIVER=mysql
-NGINX=1
-
-source ${TROOT}/setup.sh

+ 0 - 6
frameworks/C++/cppcms/setup-nginx-postgresql.sh

@@ -1,6 +0,0 @@
-#!/bin/bash
-
-DRIVER=postgresql
-NGINX=1
-
-source ${TROOT}/setup.sh

+ 0 - 42
frameworks/C++/cppcms/setup.sh

@@ -1,42 +0,0 @@
-#!/bin/bash
-
-fw_depends mysql postgresql
-
-cp config.js.tpl config.js
-
-fw_depends cppcms cppcms-cppdb
-export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${CPPCMS_HOME}/lib:${CPPDB_HOME}/lib
-
-make
-
-
-#Database
-#http://cppcms.com/sql/cppdb/connstr.html
-#http://cppcms.com/sql/cppdb/backendref.html
-if [ "${DRIVER}" == "mysql" ]; then
-    dbstring="mysql:host="$DBHOST";database=hello_world;user=benchmarkdbuser;password=benchmarkdbpass;set_charset_name=utf8;@pool_size=10"
-else
-    dbstring="postgresql:host="$DBHOST";dbname=hello_world;user=benchmarkdbuser;password=benchmarkdbpass;@pool_size=10"
-fi
-sed -i 's|\(.*\)--db--\(.*\)|\1'"$dbstring"'\2|g' config.js
-
-
-#http://cppcms.com/wikipp/en/page/cppcms_1x_tut_web_server_config#Nginx
-#configure Nginx
-if [ -n "${NGINX}" ]; then
-    fw_depends nginx
-    nginx -c ${TROOT}/nginx.conf
-
-    sed -i 's|\(.*\)--api--\(.*\)|\1'"fastcgi"'\2|g' config.js
-    sed -i 's|\(.*\)--address--\(.*\)|\1"socket" : "/var/tmp/cppcms.sock"\2|g' config.js
-    #for ip based connection
-    #sed -i 's|\(.*\)--address--\(.*\)|\1"ip": "127.0.0.1" , "port" : 8081\2|g' config.js
-else
-    sed -i 's|\(.*\)--api--\(.*\)|\1'"http"'\2|g' config.js
-    sed -i 's|\(.*\)--address--\(.*\)|\1"ip": "0.0.0.0", "port": 8080\2|g' config.js
-fi
-
-
-
-./mycppcms -c config.js
-

+ 0 - 29
frameworks/C++/cutelyst/CMakeLists.txt

@@ -1,29 +0,0 @@
-project(cutelyst_benchmarks)
-
-cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
-if (POLICY CMP0043)
-  cmake_policy(SET CMP0043 NEW)
-endif()
-
-find_package(Qt5 COMPONENTS Core Network Sql REQUIRED)
-find_package(CutelystQt5 REQUIRED)
-
-# Auto generate moc files
-set(CMAKE_AUTOMOC ON)
-
-# As moc files are generated in the binary dir, tell CMake
-# to always look for includes there:
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-
-# Enable C++11 features
-add_definitions(-std=c++11)
-
-include_directories(
-    ${CMAKE_SOURCE_DIR}
-    ${CMAKE_CURRENT_BINARY_DIR}
-    ${CutelystQt5_INCLUDE_DIR}
-)
-
-file(GLOB_RECURSE TEMPLATES_SRC root/*)
-
-add_subdirectory(src)

+ 18 - 73
frameworks/C++/cutelyst/benchmark_config.json

@@ -2,7 +2,6 @@
     "framework": "cutelyst",
     "tests": [{
             "default": {
-                "setup_file": "setup_pf",
                 "json_url": "/json",
                 "plaintext_url": "/plaintext",
                 "port": 8080,
@@ -20,8 +19,7 @@
                 "notes": "",
                 "versus": ""
             },
-            "pf-postgres": {
-                "setup_file": "setup_pf_pg",
+            "pf-pg": {
                 "db_url": "/db_postgres",
                 "query_url": "/query_postgres?queries=",
                 "update_url": "/updates_postgres?queries=",
@@ -41,8 +39,7 @@
                 "notes": "",
                 "versus": ""
             },
-            "pf-mysql": {
-                "setup_file": "setup_pf_my",
+            "pf-my": {
                 "db_url": "/db_mysql",
                 "query_url": "/query_mysql?queries=",
                 "update_url": "/updates_mysql?queries=",
@@ -63,7 +60,6 @@
                 "versus": ""
             },
             "thread": {
-                "setup_file": "setup_thread",
                 "json_url": "/json",
                 "plaintext_url": "/plaintext",
                 "port": 8080,
@@ -81,8 +77,7 @@
                 "notes": "",
                 "versus": ""
             },
-            "thread-postgres-raw": {
-                "setup_file": "setup_thread_pg",
+            "thread-pg": {
                 "db_url": "/db_postgres",
                 "query_url": "/query_postgres?queries=",
                 "update_url": "/updates_postgres?queries=",
@@ -102,8 +97,7 @@
                 "notes": "",
                 "versus": ""
             },
-            "thread-mysql-raw": {
-                "setup_file": "setup_thread_my",
+            "thread-my": {
                 "db_url": "/db_mysql",
                 "query_url": "/query_mysql?queries=",
                 "update_url": "/updates_mysql?queries=",
@@ -123,8 +117,7 @@
                 "notes": "",
                 "versus": ""
             },
-            "pf-epoll": {
-                "setup_file": "setup_pf_epoll",
+            "pf-nodelay": {
                 "json_url": "/json",
                 "plaintext_url": "/plaintext",
                 "port": 8080,
@@ -138,12 +131,11 @@
                 "webserver": "None",
                 "os": "Linux",
                 "database_os": "Linux",
-                "display_name": "cutelyst-pf-epoll",
+                "display_name": "cutelyst-pf-nodelay",
                 "notes": "",
                 "versus": ""
             },
-            "pf-postgres-epoll": {
-                "setup_file": "setup_pf_pg_epoll",
+            "pf-pg-nodelay": {
                 "db_url": "/db_postgres",
                 "query_url": "/query_postgres?queries=",
                 "update_url": "/updates_postgres?queries=",
@@ -159,12 +151,11 @@
                 "webserver": "None",
                 "os": "Linux",
                 "database_os": "Linux",
-                "display_name": "cutelyst-pf-pg-epoll",
+                "display_name": "cutelyst-pf-pg-nodelay",
                 "notes": "",
                 "versus": ""
             },
-            "pf-mysql-epoll": {
-                "setup_file": "setup_pf_my_epoll",
+            "pf-my-nodelay": {
                 "db_url": "/db_mysql",
                 "query_url": "/query_mysql?queries=",
                 "update_url": "/updates_mysql?queries=",
@@ -180,12 +171,11 @@
                 "webserver": "None",
                 "os": "Linux",
                 "database_os": "Linux",
-                "display_name": "cutelyst-pf-my-epoll",
+                "display_name": "cutelyst-pf-my-nodelay",
                 "notes": "",
                 "versus": ""
             },
-            "thread-epoll": {
-                "setup_file": "setup_thread_epoll",
+            "thread-nodelay": {
                 "json_url": "/json",
                 "plaintext_url": "/plaintext",
                 "port": 8080,
@@ -199,12 +189,11 @@
                 "webserver": "None",
                 "os": "Linux",
                 "database_os": "Linux",
-                "display_name": "cutelyst-thr-epoll",
+                "display_name": "cutelyst-thr-nodelay",
                 "notes": "",
                 "versus": ""
             },
-            "thread-postgres-epoll": {
-                "setup_file": "setup_thread_pg_epoll",
+            "thread-pg-nodelay": {
                 "db_url": "/db_postgres",
                 "query_url": "/query_postgres?queries=",
                 "update_url": "/updates_postgres?queries=",
@@ -220,12 +209,11 @@
                 "webserver": "None",
                 "os": "Linux",
                 "database_os": "Linux",
-                "display_name": "cutelyst-thr-pg-epoll",
+                "display_name": "cutelyst-thr-pg-nodelay",
                 "notes": "",
                 "versus": ""
             },
-            "thread-mysql-epoll": {
-                "setup_file": "setup_thread_my_epoll",
+            "thread-my-nodelay": {
                 "db_url": "/db_mysql",
                 "query_url": "/query_mysql?queries=",
                 "update_url": "/updates_mysql?queries=",
@@ -241,52 +229,11 @@
                 "webserver": "None",
                 "os": "Linux",
                 "database_os": "Linux",
-                "display_name": "cutelyst-thr-my-epoll",
-                "notes": "",
-                "versus": ""
-            },
-            "thread-epoll-half": {
-                "setup_file": "setup_thread_epoll_half",
-                "json_url": "/json",
-                "plaintext_url": "/plaintext",
-                "port": 8080,
-                "approach": "Realistic",
-                "classification": "Fullstack",
-                "database": "None",
-                "framework": "cutelyst",
-                "language": "C++",
-                "orm": "Raw",
-                "platform": "Qt",
-                "webserver": "None",
-                "os": "Linux",
-                "database_os": "Linux",
-                "display_name": "cutelyst-thr-epoll-half",
-                "notes": "",
-                "versus": ""
-            },
-            "thread-postgres-epoll-half": {
-                "setup_file": "setup_thread_pg_epoll_half",
-                "db_url": "/db_postgres",
-                "query_url": "/query_postgres?queries=",
-                "update_url": "/updates_postgres?queries=",
-                "fortune_url": "/fortunes_raw_postgres",
-                "port": 8080,
-                "approach": "Realistic",
-                "classification": "Fullstack",
-                "database": "Postgres",
-                "framework": "cutelyst",
-                "language": "C++",
-                "orm": "Raw",
-                "platform": "Qt",
-                "webserver": "None",
-                "os": "Linux",
-                "database_os": "Linux",
-                "display_name": "cutelyst-thr-pg-epoll-half",
+                "display_name": "cutelyst-thr-my-nodelay",
                 "notes": "",
                 "versus": ""
             },
             "nginx": {
-                "setup_file": "setup_uwsgi_nginx",
                 "json_url": "/json",
                 "plaintext_url": "/plaintext",
                 "port": 8080,
@@ -304,8 +251,7 @@
                 "notes": "",
                 "versus": ""
             },
-            "nginx-postgres-raw": {
-                "setup_file": "setup_uwsgi_nginx_pg",
+            "nginx-pg": {
                 "db_url": "/db_postgres",
                 "query_url": "/query_postgres?queries=",
                 "update_url": "/updates_postgres?queries=",
@@ -325,8 +271,7 @@
                 "notes": "",
                 "versus": ""
             },
-            "nginx-mysql-raw": {
-                "setup_file": "setup_uwsgi_nginx_my",
+            "nginx-my": {
                 "db_url": "/db_mysql",
                 "query_url": "/query_mysql?queries=",
                 "update_url": "/updates_mysql?queries=",

+ 0 - 79
frameworks/C++/cutelyst/config.sh

@@ -1,79 +0,0 @@
-#!/bin/bash
-
-fw_depends cutelyst
-
-# configure
-# DRIVER
-# UWSGI
-# NGINX
-# PROCESS_OR_THREAD
-# CUTELYST_EVENT_LOOP_EPOLL
-
-echo DRIVER=${DRIVER}
-echo UWSGI=${UWSGI}
-echo NGINX=${NGINX}
-echo QT_VERSION_MM=${QT_VERSION_MM}
-echo CUTELYST_EVENT_LOOP_EPOLL=${CUTELYST_EVENT_LOOP_EPOLL}
-echo C_PROCESSES=${C_PROCESSES}
-echo C_THREADS=${C_THREADS}
-echo CPU_AFFINITY=${CPU_AFFINITY}
-
-if [ "${DRIVER}" == "QMYSQL" ]; then
-  fw_depends mysql
-elif [ "${DRIVER}" == "QPSQL" ]; then
-  fw_depends postgresql
-fi
-
-CROOT=${IROOT}/cutelyst
-
-mkdir -p ${CROOT}/benchmarks || true
-cd ${CROOT}/benchmarks
-
-# build
-export CMAKE_PREFIX_PATH=/opt/qt${QT_VERSION_MM}:${CROOT}
-cmake $TROOT -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=$CROOT
-make -j $CPU_COUNT
-
-if [ -n "${UWSGI}" ]; then
-  cp -v ${TROOT}/config/config_socket.ini ${CROOT}/config.ini
-  SEND_DATE=true
-else
-  cp -v ${TROOT}/config/config.ini ${CROOT}/config.ini
-  SEND_DATE=false
-fi
-
-sed -i "s|Driver=.*|Driver=${DRIVER}|g" ${CROOT}/config.ini
-sed -i "s|DatabaseHostName=.*|DatabaseHostName=${DBHOST}|g" ${CROOT}/config.ini
-sed -i "s|SendDate=.*|SendDate=${SEND_DATE}|g" ${CROOT}/config.ini
-
-export LD_LIBRARY_PATH=/opt/qt${QT_VERSION_MM}/lib:${CROOT}/lib/x86_64-linux-gnu/
-
-if [ -n "${UWSGI}" ]; then
-  uwsgi \
-  --ini ${CROOT}/config.ini \
-  --plugin ${CROOT}/lib/uwsgi/plugins/cutelyst_plugin.so \
-  --cutelyst-app ${CROOT}/benchmarks/src/libcutelyst_benchmarks.so \
-  --processes=${C_PROCESSES} \
-  --threads=${C_THREADS} \
-  --cpu-affinity=${CPU_AFFINITY} \
-  --reuse-port \
-  &
-else
-  ${CROOT}/bin/cutelyst-wsgi \
-  --ini ${CROOT}/config.ini:uwsgi \
-  -a ${CROOT}/benchmarks/src/libcutelyst_benchmarks.so \
-  --processes=${C_PROCESSES} \
-  --threads=${C_THREADS} \
-  --cpu-affinity=${CPU_AFFINITY} \
-  --socket-timeout 0 \
-  --reuse-port \
-  &
-fi
-
-# configure Nginx
-if [ -n "${NGINX}" ]; then
-  fw_depends nginx
-  cp -v ${TROOT}/nginx.conf ${CROOT}/nginx.conf
-  sed -i "s|include .*/conf/uwsgi_params;|include ${NGINX_HOME}/conf/uwsgi_params;|g" ${CROOT}/nginx.conf
-  nginx -c ${CROOT}/nginx.conf
-fi

+ 19 - 0
frameworks/C++/cutelyst/cutelyst-benchmark-app.dockerfile

@@ -0,0 +1,19 @@
+FROM techempower/cutelyst-framework:0.1
+
+ENV TROOT=/cutelyst-benchmark-app
+ENV LD_LIBRARY_PATH=${CMAKE_PREFIX_PATH}/lib
+ENV CUTELYST_APP=${TROOT}/build/libcutelyst_benchmarks.so
+    
+ADD src ${TROOT}/
+ADD config/config.ini /cutelyst.ini
+ADD config/config_socket.ini /cutelyst_socket.ini
+
+RUN sed -i "s|DatabaseHostName=.*|DatabaseHostName=${DBHOST}|g" /cutelyst.ini
+RUN sed -i "s|DatabaseHostName=.*|DatabaseHostName=${DBHOST}|g" /cutelyst_socket.ini
+
+RUN cd ${TROOT} && \
+    mkdir -p build && \
+    cd build && \
+    cmake ${TROOT} \
+    -DCMAKE_BUILD_TYPE=Release && \
+    make

+ 19 - 0
frameworks/C++/cutelyst/cutelyst-deps.dockerfile

@@ -0,0 +1,19 @@
+FROM techempower/base:0.1
+
+ENV QT_VERSION_MM=59
+ENV QT_VERSION_FULL=594-xenial
+ENV CMAKE_PREFIX_PATH=/opt/qt${QT_VERSION_MM}
+ENV LD_LIBRARY_PATH=${CMAKE_PREFIX_PATH}/lib
+
+RUN apt-add-repository --yes ppa:beineri/opt-qt$QT_VERSION_FULL && \
+    apt-get update -qq && \
+    apt-get install -qqy \
+    cmake \
+    clearsilver-dev \
+    libgrantlee5-dev \
+    libjemalloc-dev \
+    qt${QT_VERSION_MM}base \
+    qt${QT_VERSION_MM}script \
+    qt${QT_VERSION_MM}tools
+    
+RUN apt install -yqq uwsgi uwsgi uuid-dev libcap-dev libzmq3-dev

+ 14 - 0
frameworks/C++/cutelyst/cutelyst-framework.dockerfile

@@ -0,0 +1,14 @@
+FROM techempower/cutelyst-deps:0.1
+
+ENV CUTELYST_VER=2.0.1
+
+RUN wget https://github.com/cutelyst/cutelyst/archive/v$CUTELYST_VER.tar.gz -O cutelyst-$CUTELYST_VER.tar.gz && \
+    tar zxf cutelyst-$CUTELYST_VER.tar.gz && \
+    cd cutelyst-$CUTELYST_VER && mkdir build && cd build && \
+    cmake .. \
+    -DCMAKE_BUILD_TYPE=Release \
+    -DCMAKE_INSTALL_PREFIX=/usr \
+    -DPLUGIN_UWSGI=on \
+    -DPLUGIN_VIEW_GRANTLEE=on \
+    -DUSE_JEMALLOC=on && \
+    make && make install

+ 12 - 0
frameworks/C++/cutelyst/cutelyst-nginx-base.dockerfile

@@ -0,0 +1,12 @@
+FROM techempower/nginx:0.1
+FROM techempower/cutelyst-benchmark-app:0.1
+
+COPY --from=0 /nginx /nginx
+
+ENV NGINX_HOME="/nginx"
+ENV PATH=/nginx/sbin:${PATH}
+
+ADD nginx.conf /nginx.conf
+
+RUN sed -i "s|include .*/conf/uwsgi_params;|include ${NGINX_HOME}/conf/uwsgi_params;|g" /nginx.conf
+RUN sed -i "s|SendDate=.*|SendDate=false|g" /cutelyst_socket.ini

+ 16 - 0
frameworks/C++/cutelyst/cutelyst-nginx-my.dockerfile

@@ -0,0 +1,16 @@
+FROM techempower/cutelyst-nginx-base:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QMYSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst_socket.ini
+
+CMD nginx -c /nginx.conf && uwsgi \
+    --ini /cutelyst_socket.ini \
+    --plugin /usr/lib/uwsgi/plugins/cutelyst2_plugin.so \
+    --cutelyst-app ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --reuse-port

+ 16 - 0
frameworks/C++/cutelyst/cutelyst-nginx-pg.dockerfile

@@ -0,0 +1,16 @@
+FROM techempower/cutelyst-nginx-base:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QPSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst_socket.ini
+
+CMD nginx -c /nginx.conf && uwsgi \
+    --ini /cutelyst_socket.ini \
+    --plugin /usr/lib/uwsgi/plugins/cutelyst2_plugin.so \
+    --cutelyst-app ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --reuse-port

+ 13 - 0
frameworks/C++/cutelyst/cutelyst-nginx.dockerfile

@@ -0,0 +1,13 @@
+FROM techempower/cutelyst-nginx-base:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+
+CMD nginx -c /nginx.conf && uwsgi \
+    --ini /cutelyst_socket.ini \
+    --plugin /usr/lib/uwsgi/plugins/cutelyst2_plugin.so \
+    --cutelyst-app ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --reuse-port

+ 18 - 0
frameworks/C++/cutelyst/cutelyst-pf-my-nodelay.dockerfile

@@ -0,0 +1,18 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QMYSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst.ini
+RUN sed -i "s|DatabaseHostName=.*|DatabaseHostName=${DBHOST}|g" /cutelyst.ini
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port \
+    --tcp-nodelay

+ 17 - 0
frameworks/C++/cutelyst/cutelyst-pf-my.dockerfile

@@ -0,0 +1,17 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QMYSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst.ini
+RUN sed -i "s|DatabaseHostName=.*|DatabaseHostName=${DBHOST}|g" /cutelyst.ini
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port

+ 14 - 0
frameworks/C++/cutelyst/cutelyst-pf-nodelay.dockerfile

@@ -0,0 +1,14 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port \
+    --tcp-nodelay

+ 18 - 0
frameworks/C++/cutelyst/cutelyst-pf-pg-nodelay.dockerfile

@@ -0,0 +1,18 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QPSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst.ini
+RUN sed -i "s|DatabaseHostName=.*|DatabaseHostName=${DBHOST}|g" /cutelyst.ini
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port \
+    --tcp-nodelay

+ 16 - 0
frameworks/C++/cutelyst/cutelyst-pf-pg.dockerfile

@@ -0,0 +1,16 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QPSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst.ini
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port

+ 17 - 0
frameworks/C++/cutelyst/cutelyst-thread-my-nodelay.dockerfile

@@ -0,0 +1,17 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_PROCESSES=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QMYSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst.ini
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=${C_PROCESSES} \
+    --threads=$(nproc) \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port \
+    --tcp-nodelay

+ 16 - 0
frameworks/C++/cutelyst/cutelyst-thread-my.dockerfile

@@ -0,0 +1,16 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_PROCESSES=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QMYSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst.ini
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=${C_PROCESSES} \
+    --threads=$(nproc) \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port

+ 14 - 0
frameworks/C++/cutelyst/cutelyst-thread-nodelay.dockerfile

@@ -0,0 +1,14 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_PROCESSES=1
+ENV CPU_AFFINITY=1
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=${C_PROCESSES} \
+    --threads=$(nproc) \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port \
+    --tcp-nodelay

+ 17 - 0
frameworks/C++/cutelyst/cutelyst-thread-pg-nodelay.dockerfile

@@ -0,0 +1,17 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_PROCESSES=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QPSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst.ini
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=${C_PROCESSES} \
+    --threads=$(nproc) \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port \
+    --tcp-nodelay

+ 16 - 0
frameworks/C++/cutelyst/cutelyst-thread-pg.dockerfile

@@ -0,0 +1,16 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_PROCESSES=1
+ENV CPU_AFFINITY=1
+ENV DRIVER=QPSQL
+
+RUN sed -i "s|Driver=.*|Driver=${DRIVER}|g" /cutelyst.ini
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=${C_PROCESSES} \
+    --threads=$(nproc) \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port

+ 13 - 0
frameworks/C++/cutelyst/cutelyst-thread.dockerfile

@@ -0,0 +1,13 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_PROCESSES=1
+ENV CPU_AFFINITY=1
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=${C_PROCESSES} \
+    --threads=$(nproc) \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port

+ 13 - 0
frameworks/C++/cutelyst/cutelyst.dockerfile

@@ -0,0 +1,13 @@
+FROM techempower/cutelyst-benchmark-app:0.1
+
+ENV C_THREADS=1
+ENV CPU_AFFINITY=1
+
+CMD cutelyst-wsgi2 \
+    --ini /cutelyst.ini:uwsgi \
+    --application ${CUTELYST_APP} \
+    --processes=$(nproc) \
+    --threads=${C_THREADS} \
+    --cpu-affinity=${CPU_AFFINITY} \
+    --socket-timeout 0 \
+    --reuse-port

+ 0 - 10
frameworks/C++/cutelyst/setup_pf.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=
-UWSGI=
-NGINX=
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-
-source ${TROOT}/config.sh

+ 0 - 11
frameworks/C++/cutelyst/setup_pf_epoll.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-DRIVER=
-UWSGI=
-NGINX=
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-export CUTELYST_EVENT_LOOP_EPOLL=1
-
-source ${TROOT}/config.sh

+ 0 - 10
frameworks/C++/cutelyst/setup_pf_my.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=QMYSQL
-UWSGI=
-NGINX=
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-
-source ${TROOT}/config.sh

+ 0 - 11
frameworks/C++/cutelyst/setup_pf_my_epoll.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-DRIVER=QMYSQL
-UWSGI=
-NGINX=
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-export CUTELYST_EVENT_LOOP_EPOLL=1
-
-source ${TROOT}/config.sh

+ 0 - 10
frameworks/C++/cutelyst/setup_pf_pg.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=QPSQL
-UWSGI=
-NGINX=
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-
-source ${TROOT}/config.sh

+ 0 - 11
frameworks/C++/cutelyst/setup_pf_pg_epoll.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-DRIVER=QPSQL
-UWSGI=
-NGINX=
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-export CUTELYST_EVENT_LOOP_EPOLL=1
-
-source ${TROOT}/config.sh

+ 0 - 10
frameworks/C++/cutelyst/setup_thread.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=
-UWSGI=
-NGINX=
-C_PROCESSES=1
-C_THREADS=${CPU_COUNT}
-CPU_AFFINITY=1
-
-source ${TROOT}/config.sh

+ 0 - 11
frameworks/C++/cutelyst/setup_thread_epoll.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-DRIVER=
-UWSGI=
-NGINX=
-C_PROCESSES=1
-C_THREADS=${CPU_COUNT}
-CPU_AFFINITY=1
-export CUTELYST_EVENT_LOOP_EPOLL=1
-
-source ${TROOT}/config.sh

+ 0 - 11
frameworks/C++/cutelyst/setup_thread_epoll_half.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-DRIVER=
-UWSGI=
-NGINX=
-C_PROCESSES=1
-C_THREADS=$(( (${CPU_COUNT}+1) / 2 ))
-CPU_AFFINITY=2
-export CUTELYST_EVENT_LOOP_EPOLL=1
-
-source ${TROOT}/config.sh

+ 0 - 10
frameworks/C++/cutelyst/setup_thread_my.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=QMYSQL
-UWSGI=
-NGINX=
-C_PROCESSES=1
-C_THREADS=${CPU_COUNT}
-CPU_AFFINITY=1
-
-source ${TROOT}/config.sh

+ 0 - 11
frameworks/C++/cutelyst/setup_thread_my_epoll.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-DRIVER=QMYSQL
-UWSGI=
-NGINX=
-C_PROCESSES=1
-C_THREADS=${CPU_COUNT}
-CPU_AFFINITY=1
-export CUTELYST_EVENT_LOOP_EPOLL=1
-
-source ${TROOT}/config.sh

+ 0 - 10
frameworks/C++/cutelyst/setup_thread_pg.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=QPSQL
-UWSGI=
-NGINX=
-C_PROCESSES=1
-C_THREADS=${CPU_COUNT}
-CPU_AFFINITY=1
-
-source ${TROOT}/config.sh

+ 0 - 11
frameworks/C++/cutelyst/setup_thread_pg_epoll.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-DRIVER=QPSQL
-UWSGI=
-NGINX=
-C_PROCESSES=1
-C_THREADS=${CPU_COUNT}
-CPU_AFFINITY=1
-export CUTELYST_EVENT_LOOP_EPOLL=1
-
-source ${TROOT}/config.sh

+ 0 - 11
frameworks/C++/cutelyst/setup_thread_pg_epoll_half.sh

@@ -1,11 +0,0 @@
-#!/bin/bash
-
-DRIVER=QPSQL
-UWSGI=
-NGINX=
-C_PROCESSES=1
-C_THREADS=$(( (${CPU_COUNT}+1) / 2 ))
-CPU_AFFINITY=2
-export CUTELYST_EVENT_LOOP_EPOLL=1
-
-source ${TROOT}/config.sh

+ 0 - 10
frameworks/C++/cutelyst/setup_uwsgi_nginx.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=
-UWSGI=1
-NGINX=1
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-
-source ${TROOT}/config.sh

+ 0 - 10
frameworks/C++/cutelyst/setup_uwsgi_nginx_my.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=QMYSQL
-UWSGI=1
-NGINX=1
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-
-source ${TROOT}/config.sh

+ 0 - 10
frameworks/C++/cutelyst/setup_uwsgi_nginx_pg.sh

@@ -1,10 +0,0 @@
-#!/bin/bash
-
-DRIVER=QPSQL
-UWSGI=1
-NGINX=1
-C_PROCESSES=$(( (${CPU_COUNT}+1) / 2 ))
-C_THREADS=0
-CPU_AFFINITY=2
-
-source ${TROOT}/config.sh

+ 0 - 1
frameworks/C++/cutelyst/source_code

@@ -1,5 +1,4 @@
 cutelyst/
-cutelyst/CMakeLists.txt
 cutelyst/src
 cutelyst/src/plaintexttest.cpp
 cutelyst/src/jsontest.cpp

+ 26 - 0
frameworks/C++/cutelyst/src/CMakeLists.txt

@@ -1,3 +1,29 @@
+project(cutelyst_benchmarks)
+
+cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
+if (POLICY CMP0043)
+  cmake_policy(SET CMP0043 NEW)
+endif()
+
+find_package(Qt5 5.6.0 REQUIRED COMPONENTS Core Network Sql)
+find_package(Cutelyst2Qt5 2.0.0 REQUIRED)
+
+# Auto generate moc files
+set(CMAKE_AUTOMOC ON)
+
+# As moc files are generated in the binary dir, tell CMake
+# to always look for includes there:
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+include_directories(
+    ${CMAKE_SOURCE_DIR}
+    ${Cutelyst2Qt5_INCLUDE_DIR}
+)
+
+file(GLOB_RECURSE TEMPLATES_SRC root/*)
 file(GLOB_RECURSE cutelyst_benchmarks_SRCS *.cpp *.h)
 
 set(cutelyst_benchmarks_SRCS

+ 0 - 117
frameworks/C++/ffead-cpp/benchmark_config.json

@@ -2,7 +2,6 @@
   "framework": "ffead-cpp",
   "tests": [{
     "default": {
-      "setup_file": "setup-mongo",
       "json_url": "/te-benchmark/json",
       "plaintext_url": "/te-benchmark/plaintext",
       "db_url": "/te-benchmark/db",
@@ -23,32 +22,8 @@
       "display_name": "ffead-cpp-mongo",
       "notes": "",
       "versus": ""
-    },
-	"mysql": {
-      "setup_file": "setup-mysql",
-      "json_url": "/te-benchmark/json",
-      "plaintext_url": "/te-benchmark/plaintext",
-      "db_url": "/te-benchmark/db",
-      "query_url": "/te-benchmark/queries?queries=",
-      "fortune_url": "/te-benchmark/fortunes",
-      "update_url": "/te-benchmark/updates?queries=",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "mysql",
-      "framework": "ffead-cpp",
-      "language": "C++",
-      "orm": "Full",
-      "platform": "ffead-cpp",
-      "webserver": "ffead-cpp",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-mysql",
-      "notes": "",
-      "versus": ""
     },
 	"postgresql": {
-      "setup_file": "setup-postgresql",
       "json_url": "/te-benchmark/json",
       "plaintext_url": "/te-benchmark/plaintext",
       "db_url": "/te-benchmark/db",
@@ -92,29 +67,6 @@
       "display_name": "ffead-cpp-apache-mongo",
       "notes": "",
       "versus": ""
-    },
-	"apache-mysql": {
-      "setup_file": "setup-apache-mysql",
-      "json_url": "/te-benchmark/json",
-      "plaintext_url": "/te-benchmark/plaintext",
-      "db_url": "/te-benchmark/db",
-      "query_url": "/te-benchmark/queries?queries=",
-      "fortune_url": "/te-benchmark/fortunes",
-      "update_url": "/te-benchmark/updates?queries=",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "mysql",
-      "framework": "ffead-cpp",
-      "language": "C++",
-      "orm": "Full",
-      "platform": "ffead-cpp",
-      "webserver": "apache",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-apache-mysql",
-      "notes": "",
-      "versus": ""
     },
 	"apache-postgresql": {
       "setup_file": "setup-apache-postgresql",
@@ -138,75 +90,6 @@
       "display_name": "ffead-cpp-apache-postgresql",
       "notes": "",
       "versus": ""
-    },
-    "nginx-mongo": {
-      "setup_file": "setup-nginx-mongo",
-      "json_url": "/te-benchmark/json",
-      "plaintext_url": "/te-benchmark/plaintext",
-      "db_url": "/te-benchmark/db",
-      "query_url": "/te-benchmark/queries?queries=",
-      "fortune_url": "/te-benchmark/fortunes",
-      "update_url": "/te-benchmark/updates?queries=",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "mongodb",
-      "framework": "ffead-cpp",
-      "language": "C++",
-      "orm": "Full",
-      "platform": "ffead-cpp",
-      "webserver": "nginx",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-nginx-mongo",
-      "notes": "",
-      "versus": ""
-    },
-	"nginx-mysql": {
-      "setup_file": "setup-nginx-mysql",
-      "json_url": "/te-benchmark/json",
-      "plaintext_url": "/te-benchmark/plaintext",
-      "db_url": "/te-benchmark/db",
-      "query_url": "/te-benchmark/queries?queries=",
-      "fortune_url": "/te-benchmark/fortunes",
-      "update_url": "/te-benchmark/updates?queries=",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "mysql",
-      "framework": "ffead-cpp",
-      "language": "C++",
-      "orm": "Full",
-      "platform": "ffead-cpp",
-      "webserver": "nginx",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-nginx-mysql",
-      "notes": "",
-      "versus": ""
-    },
-	"nginx-postgresql": {
-      "setup_file": "setup-nginx-postgresql",
-      "json_url": "/te-benchmark/json",
-      "plaintext_url": "/te-benchmark/plaintext",
-      "db_url": "/te-benchmark/db",
-      "query_url": "/te-benchmark/queries?queries=",
-      "fortune_url": "/te-benchmark/fortunes",
-      "update_url": "/te-benchmark/updates?queries=",
-      "port": 8080,
-      "approach": "Realistic",
-      "classification": "Fullstack",
-      "database": "postgres",
-      "framework": "ffead-cpp",
-      "language": "C++",
-      "orm": "Full",
-      "platform": "ffead-cpp",
-      "webserver": "nginx",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-nginx-postgresql",
-      "notes": "",
-      "versus": ""
     }
   }]
 }

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp-apache-mongo.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-httpd:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldmongo.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldmongo.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD apachectl -D FOREGROUND

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp-apache-mysql.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-httpd:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormmysql.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD apachectl -D FOREGROUND

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp-apache-postgresql.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-httpd:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormpostgresql.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD apachectl -D FOREGROUND

+ 37 - 0
frameworks/C++/ffead-cpp/ffead-cpp-base.dockerfile

@@ -0,0 +1,37 @@
+FROM techempower/base:0.1
+
+ENV IROOT=/installs
+ENV FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0
+ENV PATH=${FFEAD_CPP_PATH}:${PATH}
+
+RUN mkdir /installs
+
+RUN apt install -yqq autoconf uuid-dev odbc-postgresql unixodbc unixodbc-dev
+
+WORKDIR $IROOT
+
+# libmyodbc has been removed from apt
+
+RUN wget -q http://www.mirrorservice.org/sites/ftp.mysql.com/Downloads/Connector-ODBC/5.3/mysql-connector-odbc-5.3.10-linux-ubuntu16.04-x86-64bit.tar.gz
+RUN tar xf mysql-connector-odbc-5.3.10-linux-ubuntu16.04-x86-64bit.tar.gz
+RUN mkdir -p /usr/lib/x86_64-linux-gnu/odbc
+RUN mv mysql-connector-odbc-5.3.10-linux-ubuntu16.04-x86-64bit/lib/libmyodbc5* /usr/lib/x86_64-linux-gnu/odbc/
+RUN mysql-connector-odbc-5.3.10-linux-ubuntu16.04-x86-64bit/bin/myodbc-installer -d -a -n "MySQL" -t "DRIVER=/usr/lib/x86_64-linux-gnu/odbc/libmyodbc5w.so;"
+
+# mongocdriver also used in all tests
+
+RUN wget -q https://github.com/mongodb/mongo-c-driver/releases/download/1.4.0/mongo-c-driver-1.4.0.tar.gz
+RUN tar xf mongo-c-driver-1.4.0.tar.gz
+RUN cd mongo-c-driver-1.4.0/ && \
+    ./configure --prefix=${IROOT} --libdir=${IROOT} --disable-automatic-init-and-cleanup && \
+    make && make install
+
+WORKDIR /
+
+COPY te-benchmark/ te-benchmark/
+COPY ffead-cpp-framework.sh ./
+COPY server.sh ./
+
+RUN chmod 755 *.sh
+
+RUN ./ffead-cpp-framework.sh

+ 20 - 0
frameworks/C++/ffead-cpp/ffead-cpp-emb-base.dockerfile

@@ -0,0 +1,20 @@
+FROM techempower/ffead-cpp-base:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldmongo.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldmongo.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess

+ 6 - 12
toolset/setup/linux/frameworks/ffead-cpp-framework.sh → frameworks/C++/ffead-cpp/ffead-cpp-framework.sh

@@ -1,21 +1,19 @@
 #!/bin/bash
 
-fw_installed ffead-cpp-framework && return 0
-
 #From https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/C%2B%2B/ulib/setup_json.sh
 if [ "$TRAVIS" != "true" ]; then
-MAX_THREADS=$(( 3 * $CPU_COUNT / 2 ))
+MAX_THREADS=$(( 3 * nproc / 2 ))
 else
-MAX_THREADS=$(( 2 * $CPU_COUNT ))
+MAX_THREADS=$(( 2 * nproc ))
 fi
 
 WRIT_THREADS=$(( $MAX_THREADS / 3 ))
 SERV_THREADS=$(( $MAX_THREADS - $WRIT_THREADS ))
 
-fw_get -o ffead-cpp-src.zip https://github.com/sumeetchhetri/ffead-cpp/archive/master.zip
-rm -rf ffead-cpp-src
-rm -rf ffead-cpp-master
-unzip ffead-cpp-src.zip
+cd $IROOT
+
+wget -q https://github.com/sumeetchhetri/ffead-cpp/archive/master.zip
+unzip master.zip
 mv ffead-cpp-master ffead-cpp-src
 cd ffead-cpp-src/
 
@@ -59,7 +57,3 @@ sed -i 's|localhost|'${DBHOST}'|g' resources/sample-odbc.ini
 
 cp resources/sample-odbcinst.ini ${IROOT}/odbcinst.ini
 cp resources/sample-odbc.ini ${IROOT}/odbc.ini
-
-cd ${IROOT}
-
-echo -e "export FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0" > $IROOT/ffead-cpp-framework.installed

+ 9 - 0
frameworks/C++/ffead-cpp/ffead-cpp-httpd.dockerfile

@@ -0,0 +1,9 @@
+FROM techempower/ffead-cpp-base:0.1
+
+COPY ffead-cpp-httpd.sh ./
+
+RUN chmod 755 *.sh
+
+RUN ./ffead-cpp-httpd.sh
+
+ENV PATH=${IROOT}/httpd/bin:${PATH}

+ 7 - 13
toolset/setup/linux/frameworks/ffead-cpp-httpd.sh → frameworks/C++/ffead-cpp/ffead-cpp-httpd.sh

@@ -1,20 +1,16 @@
 #!/bin/bash
 
-fw_installed ffead-cpp-httpd && return 0
+cd $IROOT
 
-fw_depends ffead-cpp-framework
-
-sudo apt-get remove -y apache2
-
-fw_get -o httpd-2.4.25.tar.gz https://archive.apache.org/dist/httpd/httpd-2.4.25.tar.gz
-fw_get -o apr-1.5.2.tar.gz https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
-fw_get -o apr-util-1.5.4.tar.gz https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
+wget -q https://archive.apache.org/dist/httpd/httpd-2.4.25.tar.gz
+wget -q https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz
+wget -q https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
 rm -rf ${IROOT}/httpd-2.4.25
 rm -rf ${IROOT}/apr-1.5.2
 rm -rf ${IROOT}/apr-util-1.5.4
-fw_untar httpd-2.4.25.tar.gz
-fw_untar apr-1.5.2.tar.gz
-fw_untar apr-util-1.5.4.tar.gz
+tar xf httpd-2.4.25.tar.gz
+tar xf apr-1.5.2.tar.gz
+tar xf apr-util-1.5.4.tar.gz
 mv -f apr-1.5.2 httpd-2.4.25/srclib/apr
 mv -f apr-util-1.5.4 httpd-2.4.25/srclib/apr-util
 cd ${IROOT}/httpd-2.4.25
@@ -84,5 +80,3 @@ FFEAD_CPP_PATH '"${FFEADROOT}"'
 	</Directory>
 </VirtualHost>
 EOL'
-
-touch ${IROOT}/ffead-cpp-httpd.installed

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp-mysql.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-base:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormmysql.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD ./server.sh

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp-nginx-mongo.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-nginx:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldmongo.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldmongo.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD nginx -g 'daemon off;'

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp-nginx-mysql.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-nginx:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormmysql.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD nginx -g 'daemon off;'

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp-nginx-postgresql.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-nginx:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormpostgresql.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD nginx -g 'daemon off;'

+ 21 - 0
frameworks/C++/ffead-cpp/ffead-cpp-nginx.dockerfile

@@ -0,0 +1,21 @@
+FROM techempower/ffead-cpp-base:0.1
+
+WORKDIR $IROOT
+
+RUN wget -q http://nginx.org/download/nginx-1.13.1.tar.gz
+RUN tar xf nginx-1.13.1.tar.gz
+
+WORKDIR $IROOT/nginx-1.13.1
+
+RUN ./configure \
+    --prefix=${IROOT}/nginxfc \
+    --with-ld-opt="-lstdc++ -L${IROOT}/ffead-cpp-2.0/lib -L${IROOT}" \
+    --add-module="${IROOT}/ffead-cpp-src/modules/nginx_mod_ffeadcpp" \
+    --with-cc-opt="-I${IROOT}/ffead-cpp-2.0/include -I${IROOT}/include/libmongoc-1.0 -I${IROOT}/include/libbson-1.0 -w -fpermissive"
+RUN make
+RUN make install
+
+RUN cp ${IROOT}/ffead-cpp-src/modules/nginx_mod_ffeadcpp/nginx.conf ${IROOT}/nginxfc/conf/
+RUN sed -i 's|FFEAD_PATH|'${IROOT}/ffead-cpp-2.0'|g' ${IROOT}/nginxfc/conf/nginx.conf
+
+ENV PATH=${IROOT}/nginxfc/sbin:${PATH}

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp-postgresql.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-base:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldsql.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormpostgresql.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD ./server.sh

+ 22 - 0
frameworks/C++/ffead-cpp/ffead-cpp.dockerfile

@@ -0,0 +1,22 @@
+FROM techempower/ffead-cpp-base:0.1
+
+WORKDIR ${IROOT}/ffead-cpp-src/
+
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldmongo.h web/te-benchmark/include/TeBkWorld.h
+RUN cp -f web/te-benchmark/sql-src/TeBkWorldmongo.cpp web/te-benchmark/src/TeBkWorld.cpp
+RUN cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+RUN rm -rf ffead-cpp-2.0-bin
+RUN make build-apps
+RUN rm -rf ${IROOT}/ffead-cpp-2.0
+RUN cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+
+WORKDIR ${IROOT}/ffead-cpp-2.0
+
+RUN rm -rf web/default web/oauthApp web/flexApp web/markers
+RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+
+RUN chmod 755 $FFEAD_CPP_PATH/*.sh
+RUN rm -f $FFEAD_CPP_PATH/*.cntrl
+RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+
+CMD ./server.sh

+ 112 - 0
frameworks/C++/ffead-cpp/removed.txt

@@ -0,0 +1,112 @@
+Could mot get the following
+	"mysql": {
+      "json_url": "/te-benchmark/json",
+      "plaintext_url": "/te-benchmark/plaintext",
+      "db_url": "/te-benchmark/db",
+      "query_url": "/te-benchmark/queries?queries=",
+      "fortune_url": "/te-benchmark/fortunes",
+      "update_url": "/te-benchmark/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "mysql",
+      "framework": "ffead-cpp",
+      "language": "C++",
+      "orm": "Full",
+      "platform": "ffead-cpp",
+      "webserver": "ffead-cpp",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ffead-cpp-mysql",
+      "notes": "",
+      "versus": ""
+    },
+    "apache-mysql": {
+      "setup_file": "setup-apache-mysql",
+      "json_url": "/te-benchmark/json",
+      "plaintext_url": "/te-benchmark/plaintext",
+      "db_url": "/te-benchmark/db",
+      "query_url": "/te-benchmark/queries?queries=",
+      "fortune_url": "/te-benchmark/fortunes",
+      "update_url": "/te-benchmark/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "mysql",
+      "framework": "ffead-cpp",
+      "language": "C++",
+      "orm": "Full",
+      "platform": "ffead-cpp",
+      "webserver": "apache",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ffead-cpp-apache-mysql",
+      "notes": "",
+      "versus": ""
+    },
+    "nginx-mongo": {
+      "json_url": "/te-benchmark/json",
+      "plaintext_url": "/te-benchmark/plaintext",
+      "db_url": "/te-benchmark/db",
+      "query_url": "/te-benchmark/queries?queries=",
+      "fortune_url": "/te-benchmark/fortunes",
+      "update_url": "/te-benchmark/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "mongodb",
+      "framework": "ffead-cpp",
+      "language": "C++",
+      "orm": "Full",
+      "platform": "ffead-cpp",
+      "webserver": "nginx",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ffead-cpp-nginx-mongo",
+      "notes": "",
+      "versus": ""
+    },
+	"nginx-mysql": {
+      "json_url": "/te-benchmark/json",
+      "plaintext_url": "/te-benchmark/plaintext",
+      "db_url": "/te-benchmark/db",
+      "query_url": "/te-benchmark/queries?queries=",
+      "fortune_url": "/te-benchmark/fortunes",
+      "update_url": "/te-benchmark/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "mysql",
+      "framework": "ffead-cpp",
+      "language": "C++",
+      "orm": "Full",
+      "platform": "ffead-cpp",
+      "webserver": "nginx",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ffead-cpp-nginx-mysql",
+      "notes": "",
+      "versus": ""
+    },
+	"nginx-postgresql": {
+      "json_url": "/te-benchmark/json",
+      "plaintext_url": "/te-benchmark/plaintext",
+      "db_url": "/te-benchmark/db",
+      "query_url": "/te-benchmark/queries?queries=",
+      "fortune_url": "/te-benchmark/fortunes",
+      "update_url": "/te-benchmark/updates?queries=",
+      "port": 8080,
+      "approach": "Realistic",
+      "classification": "Fullstack",
+      "database": "postgres",
+      "framework": "ffead-cpp",
+      "language": "C++",
+      "orm": "Full",
+      "platform": "ffead-cpp",
+      "webserver": "nginx",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ffead-cpp-nginx-postgresql",
+      "notes": "",
+      "versus": ""
+    }

+ 6 - 7
frameworks/C++/ffead-cpp/server.sh

@@ -1,12 +1,8 @@
 #!/bin/sh
 
+cd $FFEAD_CPP_PATH
+
 export MALLOC_CHECK_=0
-IS_OS_DARWIN=`uname|tr '[A-Z]' '[a-z]'|awk 'index($0,"darwin") != 0 {print "darwin"}'`
-if [ "$IS_OS_DARWIN" != "" ]; then
-	export FFEAD_CPP_PATH=`cd "$(dirname server.sh)" && ABSPATH=$(pwd) && cd -`
-else
-	export FFEAD_CPP_PATH=`echo $(dirname $(readlink -f $0))`
-fi
 
 echo $FFEAD_CPP_PATH
 export LD_LIBRARY_PATH=$FFEAD_CPP_PATH/lib:$LD_LIBRARY_PATH
@@ -29,4 +25,7 @@ chmod 700 $FFEAD_CPP_PATH/tests/*
 chmod 700 $FFEAD_CPP_PATH/rtdcf/*
 #chmod 700 $FFEAD_CPP_PATH/rtdcf/autotools/*
 #/usr/sbin/setenforce 0
-./CHS $FFEAD_CPP_PATH > ffead.log 2>&1
+
+./CHS $FFEAD_CPP_PATH
+
+wait

+ 0 - 7
frameworks/C++/ffead-cpp/setup-apache-mongo.sh

@@ -1,7 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-apache-mongo
-
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-apachectl restart > ffead.log 2>&1

+ 0 - 7
frameworks/C++/ffead-cpp/setup-apache-mysql.sh

@@ -1,7 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-apache-mysql
-
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-apachectl restart > ffead.log 2>&1

+ 0 - 7
frameworks/C++/ffead-cpp/setup-apache-postgresql.sh

@@ -1,7 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-apache-postgresql
-
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-apachectl restart > ffead.log 2>&1

+ 0 - 9
frameworks/C++/ffead-cpp/setup-mongo.sh

@@ -1,9 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-emb-mongo
-
-chmod 755 $FFEAD_CPP_PATH/*.sh
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-cd $FFEAD_CPP_PATH
-./server.sh

+ 0 - 9
frameworks/C++/ffead-cpp/setup-mysql.sh

@@ -1,9 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-emb-mysql
-
-chmod 755 $FFEAD_CPP_PATH/*.sh
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-cd $FFEAD_CPP_PATH
-./server.sh

+ 0 - 13
frameworks/C++/ffead-cpp/setup-nginx-mongo.sh

@@ -1,13 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-nginx-mongo
-
-#export FFEAD_CPP_PATH=$IROOT/ffead-cpp-2.0
-export LD_LIBRARY_PATH=$IROOT:$FFEAD_CPP_PATH/lib:$LD_LIBRARY_PATH
-export ODBCINI=${IROOT}/odbc.ini
-export ODBCSYSINI=${IROOT}
-echo $FFEAD_CPP_PATH
-echo $LD_LIBRARY_PATH
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-nginx > ffead.log 2>&1

+ 0 - 14
frameworks/C++/ffead-cpp/setup-nginx-mysql.sh

@@ -1,14 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-nginx-mysql
-
-#export FFEAD_CPP_PATH=$IROOT/ffead-cpp-2.0
-export LD_LIBRARY_PATH=$IROOT:$FFEAD_CPP_PATH/lib:$LD_LIBRARY_PATH
-export ODBCINI=${IROOT}/odbc.ini
-export ODBCSYSINI=${IROOT}
-echo $FFEAD_CPP_PATH
-echo $LD_LIBRARY_PATH
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-nginx > ffead.log 2>&1
-

+ 0 - 13
frameworks/C++/ffead-cpp/setup-nginx-postgresql.sh

@@ -1,13 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-nginx-postgresql
-
-#export FFEAD_CPP_PATH=$IROOT/ffead-cpp-2.0
-export LD_LIBRARY_PATH=$IROOT:$FFEAD_CPP_PATH/lib:$LD_LIBRARY_PATH
-export ODBCINI=${IROOT}/odbc.ini
-export ODBCSYSINI=${IROOT}
-echo $FFEAD_CPP_PATH
-echo $LD_LIBRARY_PATH
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-nginx > ffead.log 2>&1

+ 0 - 9
frameworks/C++/ffead-cpp/setup-postgresql.sh

@@ -1,9 +0,0 @@
-#!/bin/bash
-
-fw_depends ffead-cpp-emb-postgresql
-
-chmod 755 $FFEAD_CPP_PATH/*.sh
-rm -f $FFEAD_CPP_PATH/*.cntrl
-rm -f $FFEAD_CPP_PATH/tmp/*.sess
-cd $FFEAD_CPP_PATH
-./server.sh

Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно