Browse Source

ffead-cpp fixed all failing tests and added cached tests (Separate dockerfiles) (#3742)

* Fixed ffead-cpp nginx/httpd tests
Added cached query tests for redis/memcached
Added support for single docker file with multi command variations to reduce build times
Added support to enable core dumps in containers to debug issues in framework
Latest code from  https://github.com/sumeetchhetri/ffead-cpp

* Changes with separate dockerfiles as suggested by @michaelhixson

* Undo changes to create-postgres.sql
Sumeet Chhetri 7 years ago
parent
commit
c975f75dba
45 changed files with 1067 additions and 837 deletions
  1. 309 93
      frameworks/C++/ffead-cpp/benchmark_config.json
  2. 31 0
      frameworks/C++/ffead-cpp/ffead-cpp-apache-memcached.dockerfile
  3. 10 45
      frameworks/C++/ffead-cpp/ffead-cpp-apache-mongo.dockerfile
  4. 10 45
      frameworks/C++/ffead-cpp/ffead-cpp-apache-mysql.dockerfile
  5. 10 45
      frameworks/C++/ffead-cpp/ffead-cpp-apache-postgresql.dockerfile
  6. 31 0
      frameworks/C++/ffead-cpp/ffead-cpp-apache-redis.dockerfile
  7. 0 55
      frameworks/C++/ffead-cpp/ffead-cpp-framework.sh
  8. 0 45
      frameworks/C++/ffead-cpp/ffead-cpp-httpd.dockerfile
  9. 0 83
      frameworks/C++/ffead-cpp/ffead-cpp-httpd.sh
  10. 31 0
      frameworks/C++/ffead-cpp/ffead-cpp-memcached.dockerfile
  11. 12 39
      frameworks/C++/ffead-cpp/ffead-cpp-mysql.dockerfile
  12. 31 0
      frameworks/C++/ffead-cpp/ffead-cpp-nginx-memcached.dockerfile
  13. 10 57
      frameworks/C++/ffead-cpp/ffead-cpp-nginx-mongo.dockerfile
  14. 10 57
      frameworks/C++/ffead-cpp/ffead-cpp-nginx-mysql.dockerfile
  15. 10 57
      frameworks/C++/ffead-cpp/ffead-cpp-nginx-postgresql.dockerfile
  16. 31 0
      frameworks/C++/ffead-cpp/ffead-cpp-nginx-redis.dockerfile
  17. 12 38
      frameworks/C++/ffead-cpp/ffead-cpp-postgresql.dockerfile
  18. 31 0
      frameworks/C++/ffead-cpp/ffead-cpp-redis.dockerfile
  19. 12 39
      frameworks/C++/ffead-cpp/ffead-cpp.dockerfile
  20. 34 0
      frameworks/C++/ffead-cpp/install_ffead-cpp-dependencies.sh
  21. 94 0
      frameworks/C++/ffead-cpp/install_ffead-cpp-framework.sh
  22. 84 0
      frameworks/C++/ffead-cpp/install_ffead-cpp-httpd.sh
  23. 19 0
      frameworks/C++/ffead-cpp/install_ffead-cpp-nginx.sh
  24. 0 112
      frameworks/C++/ffead-cpp/removed.txt
  25. 93 0
      frameworks/C++/ffead-cpp/run_ffead.sh
  26. 11 11
      frameworks/C++/ffead-cpp/server.sh
  27. 13 0
      frameworks/C++/ffead-cpp/te-benchmark/config/cache.xml
  28. 15 0
      frameworks/C++/ffead-cpp/te-benchmark/config/cachememcached.xml
  29. 15 0
      frameworks/C++/ffead-cpp/te-benchmark/config/cacheredis.xml
  30. 1 1
      frameworks/C++/ffead-cpp/te-benchmark/config/sdorm.xml
  31. 1 1
      frameworks/C++/ffead-cpp/te-benchmark/config/sdormmongo.xml
  32. 1 1
      frameworks/C++/ffead-cpp/te-benchmark/config/sdormmysql.xml
  33. 1 1
      frameworks/C++/ffead-cpp/te-benchmark/config/sdormpostgresql.xml
  34. 1 0
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkFortune.h
  35. 1 1
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkFortuneTemplate.h
  36. 8 1
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkRestController.h
  37. 1 0
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkWorld.h
  38. 6 0
      frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldmongo.cpp
  39. 1 0
      frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldmongo.h
  40. 5 0
      frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldsql.cpp
  41. 2 1
      frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldsql.h
  42. 4 0
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkFortune.cpp
  43. 2 5
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkFortuneTemplate.cpp
  44. 57 4
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkRestController.cpp
  45. 6 0
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkWorld.cpp

+ 309 - 93
frameworks/C++/ffead-cpp/benchmark_config.json

@@ -1,95 +1,311 @@
 {
-  "framework": "ffead-cpp",
-  "tests": [{
-    "default": {
-      "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": "ffead-cpp",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-mongo",
-      "notes": "",
-      "versus": ""
-    },
-	"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": "ffead-cpp",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-postgresql",
-      "notes": "",
-      "versus": ""
-    },
-    "apache-mongo": {
-      "setup_file": "setup-apache-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": "apache",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-apache-mongo",
-      "notes": "",
-      "versus": ""
-    },
-	"apache-postgresql": {
-      "setup_file": "setup-apache-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": "apache",
-      "os": "Linux",
-      "database_os": "Linux",
-      "display_name": "ffead-cpp-apache-postgresql",
-      "notes": "",
-      "versus": ""
-    }
-  }]
+	"framework": "ffead-cpp",
+	"tests": [{
+		"default": {
+			"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": "ffead-cpp",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-mongo",
+			"notes": "",
+			"versus": ""
+		},
+		"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": {
+			"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": "ffead-cpp",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-postgresql",
+			"notes": "",
+			"versus": ""
+		},
+		"apache-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-apache",
+			"webserver": "apache",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-apache-mongo",
+			"notes": "",
+			"versus": ""
+		},
+		"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-apache",
+			"webserver": "apache",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-apache-mysql",
+			"notes": "",
+			"versus": ""
+		},
+		"apache-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-apache",
+			"webserver": "apache",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-apache-postgresql",
+			"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-nginx",
+			"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-nginx",
+			"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-nginx",
+			"webserver": "nginx",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-nginx-postgresql",
+			"notes": "",
+			"versus": ""
+		},
+		"redis": {
+			"cached_query_url": "/te-benchmark/cached-worlds?count=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "mongodb",
+			"cache": "redis",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Full",
+			"platform": "ffead-cpp",
+			"webserver": "ffead-cpp",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-mongo-redis",
+			"notes": "",
+			"versus": ""
+		},
+		"nginx-redis": {
+			"cached_query_url": "/te-benchmark/cached-worlds?count=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "mongodb",
+			"cache": "redis",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Full",
+			"platform": "ffead-cpp-nginx",
+			"webserver": "nginx",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-nginx-mongo-redis",
+			"notes": "",
+			"versus": ""
+		},
+		"apache-redis": {
+			"cached_query_url": "/te-benchmark/cached-worlds?count=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "mongodb",
+			"cache": "redis",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Full",
+			"platform": "ffead-cpp-apache",
+			"webserver": "apache",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-apache-mongo-redis",
+			"notes": "",
+			"versus": ""
+		},
+		"memcached": {
+			"cached_query_url": "/te-benchmark/cached-worlds?count=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "mongodb",
+			"cache": "memcached",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Full",
+			"platform": "ffead-cpp",
+			"webserver": "ffead-cpp",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-mongo-memcached",
+			"notes": "",
+			"versus": ""
+		},
+		"nginx-memcached": {
+			"cached_query_url": "/te-benchmark/cached-worlds?count=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "mongodb",
+			"cache": "memcached",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Full",
+			"platform": "ffead-cpp-nginx",
+			"webserver": "nginx",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-nginx-mongo-memcached",
+			"notes": "",
+			"versus": ""
+		},
+		"apache-memcached": {
+			"cached_query_url": "/te-benchmark/cached-worlds?count=",
+			"port": 8080,
+			"approach": "Realistic",
+			"classification": "Fullstack",
+			"database": "mongodb",
+			"cache": "memcached",
+			"framework": "ffead-cpp",
+			"language": "C++",
+			"orm": "Full",
+			"platform": "ffead-cpp-apache",
+			"webserver": "apache",
+			"os": "Linux",
+			"database_os": "Linux",
+			"display_name": "ffead-cpp-apache-mongo-memcached",
+			"notes": "",
+			"versus": ""
+		}
+	}]
 }

+ 31 - 0
frameworks/C++/ffead-cpp/ffead-cpp-apache-memcached.dockerfile

@@ -0,0 +1,31 @@
+FROM buildpack-deps:xenial
+
+ENV IROOT=/installs
+ENV FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0
+ENV PATH=${FFEAD_CPP_PATH}:${PATH}
+
+RUN mkdir /installs
+
+WORKDIR /
+
+COPY te-benchmark/ te-benchmark/
+COPY *.sh ./
+RUN chmod 755 *.sh
+
+RUN ./install_ffead-cpp-dependencies.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-framework.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-httpd.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-nginx.sh
+
+WORKDIR /
+
+CMD ./run_ffead.sh apache memcached

+ 10 - 45
frameworks/C++/ffead-cpp/ffead-cpp-apache-mongo.dockerfile

@@ -6,61 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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 ./
-
+COPY *.sh ./
 RUN chmod 755 *.sh
 
-RUN ./ffead-cpp-framework.sh
+RUN ./install_ffead-cpp-dependencies.sh
 
-COPY ffead-cpp-httpd.sh ./
-
-RUN chmod 755 *.sh
-
-RUN ./ffead-cpp-httpd.sh
+WORKDIR /
 
-ENV PATH=${IROOT}/httpd/bin:${PATH}
+RUN ./install_ffead-cpp-framework.sh
 
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD apachectl -D FOREGROUND
+CMD ./run_ffead.sh apache mongo

+ 10 - 45
frameworks/C++/ffead-cpp/ffead-cpp-apache-mysql.dockerfile

@@ -6,61 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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 ./
-
+COPY *.sh ./
 RUN chmod 755 *.sh
 
-RUN ./ffead-cpp-framework.sh
+RUN ./install_ffead-cpp-dependencies.sh
 
-COPY ffead-cpp-httpd.sh ./
-
-RUN chmod 755 *.sh
-
-RUN ./ffead-cpp-httpd.sh
+WORKDIR /
 
-ENV PATH=${IROOT}/httpd/bin:${PATH}
+RUN ./install_ffead-cpp-framework.sh
 
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD apachectl -D FOREGROUND
+CMD ./run_ffead.sh apache mysql

+ 10 - 45
frameworks/C++/ffead-cpp/ffead-cpp-apache-postgresql.dockerfile

@@ -6,61 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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 ./
-
+COPY *.sh ./
 RUN chmod 755 *.sh
 
-RUN ./ffead-cpp-framework.sh
+RUN ./install_ffead-cpp-dependencies.sh
 
-COPY ffead-cpp-httpd.sh ./
-
-RUN chmod 755 *.sh
-
-RUN ./ffead-cpp-httpd.sh
+WORKDIR /
 
-ENV PATH=${IROOT}/httpd/bin:${PATH}
+RUN ./install_ffead-cpp-framework.sh
 
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD apachectl -D FOREGROUND
+CMD ./run_ffead.sh apache postgresql

+ 31 - 0
frameworks/C++/ffead-cpp/ffead-cpp-apache-redis.dockerfile

@@ -0,0 +1,31 @@
+FROM buildpack-deps:xenial
+
+ENV IROOT=/installs
+ENV FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0
+ENV PATH=${FFEAD_CPP_PATH}:${PATH}
+
+RUN mkdir /installs
+
+WORKDIR /
+
+COPY te-benchmark/ te-benchmark/
+COPY *.sh ./
+RUN chmod 755 *.sh
+
+RUN ./install_ffead-cpp-dependencies.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-framework.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-httpd.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-nginx.sh
+
+WORKDIR /
+
+CMD ./run_ffead.sh apache redis

+ 0 - 55
frameworks/C++/ffead-cpp/ffead-cpp-framework.sh

@@ -1,55 +0,0 @@
-#!/bin/bash
-
-#From https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/C%2B%2B/ulib/setup_json.sh
-MAX_THREADS=$(( 3 * nproc / 2 ))
-
-WRIT_THREADS=$(( $MAX_THREADS / 3 ))
-SERV_THREADS=$(( $MAX_THREADS - $WRIT_THREADS ))
-
-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/
-
-#
-# In the current version of the ffead-cpp framework, when the framework figures
-# out the column name for each data entity property, it forces all the column
-# names to lowercase.  This is a problem for our MongoDB tests because it will
-# lead to records being written to the "world" collection that have a
-# "randomnumber" attribute rather than the expected "randomNumber" (capital "N")
-# even though we specify the correct capitalization in the test implementation.
-# This causes the implementation to fail the updates test verification.
-#
-# There doesn't seem to be any way to work around this problem in the test
-# implementation, so instead we modify the framework, making it trust the
-# provided capitalization of all column names.
-#
-# TODO: Address this problem in the ffead-cpp framework itself.
-#
-sed -i 's|toLowerCopy|trimCopy|g' src/modules/sdorm/DataSourceMapping.cpp
-
-chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
-rm -rf web/te-benchmark
-cp -f ${TROOT}/server.sh script/
-cp -rf ${TROOT}/te-benchmark web/
-sed -i 's|THRD_PSIZ=6|THRD_PSIZ='${SERV_THREADS}'|g' resources/server.prop
-sed -i 's|W_THRD_PSIZ=2|W_THRD_PSIZ='${WRIT_THREADS}'|g' resources/server.prop
-sed -i 's|LOGGING_ENABLED=true|LOGGING_ENABLED=false|g' resources/server.prop
-sed -i 's|localhost|tfb-database|g' resources/server.prop
-./autogen.sh
-./configure --enable-apachemod=yes --enable-mod_sdormmongo=yes --enable-mod_sdormsql=yes CPPFLAGS="$CPPFLAGS -I${IROOT}/include/libmongoc-1.0 -I${IROOT}/include/libbson-1.0 -I${IROOT}/include/" LDFLAGS="$LDFLAGS -L${IROOT}"
-make install
-rm -rf ${IROOT}/ffead-cpp-2.0
-cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
-
-sed -i 's|localhost|tfb-database|g' web/te-benchmark/config/sdorm.xml
-sed -i 's|localhost|tfb-database|g' web/te-benchmark/config/sdormmongo.xml
-sed -i 's|localhost|tfb-database|g' web/te-benchmark/config/sdormmysql.xml
-sed -i 's|localhost|tfb-database|g' web/te-benchmark/config/sdormpostgresql.xml
-sed -i 's|localhost|tfb-database|g' resources/sample-odbcinst.ini
-sed -i 's|localhost|tfb-database|g' resources/sample-odbc.ini
-
-cp resources/sample-odbcinst.ini ${IROOT}/odbcinst.ini
-cp resources/sample-odbc.ini ${IROOT}/odbc.ini

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

@@ -1,45 +0,0 @@
-FROM buildpack-deps:xenial
-
-ENV IROOT=/installs
-ENV FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0
-ENV PATH=${FFEAD_CPP_PATH}:${PATH}
-
-RUN mkdir /installs
-
-RUN apt update -yqq && apt install -yqq unzip 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
-
-COPY ffead-cpp-httpd.sh ./
-
-RUN chmod 755 *.sh
-
-RUN ./ffead-cpp-httpd.sh
-
-ENV PATH=${IROOT}/httpd/bin:${PATH}

+ 0 - 83
frameworks/C++/ffead-cpp/ffead-cpp-httpd.sh

@@ -1,83 +0,0 @@
-#!/bin/bash
-
-cd $IROOT
-
-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
-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
-rm -rf ${IROOT}/httpd
-mkdir ${IROOT}/httpd
-./configure --prefix=${IROOT}/httpd --enable-mods-shared=all --with-included-apr
-make
-make install
-cd ${IROOT}
-
-cd ${IROOT}/ffead-cpp-src/modules/apache_mod_ffeadcpp/
-g++ -fpic -DSHARED_MODULE -fpermissive -I"${IROOT}/httpd/include" -I"${IROOT}/ffead-cpp-2.0/include/" -I"${IROOT}/include" -I"${IROOT}/include/libbson-1.0/" -I"${IROOT}/include/libmongoc-1.0" mod_ffeadcpp.cpp -L"${IROOT}/ffead-cpp-2.0/lib" -L"${IROOT}" -lffead_common -lffead_framework -ldl -lcrypto -lssl -c mod_ffeadcpp.cpp
-g++ -shared -o mod_ffeadcpp.so mod_ffeadcpp.o -L"${IROOT}/ffead-cpp-2.0/lib" -L"${IROOT}" -L"${IROOT}/httpd/lib" -lffead_common -lffead_framework -ldl -lcrypto -lssl -lapr-1 -laprutil-1 -lstdc++
-${IROOT}/httpd/bin/apxs -i -n 'ffead_cpp' mod_ffeadcpp.so
-cd -
-
-FFEADROOT=${IROOT}/ffead-cpp-2.0
-ETROOT=${FFEADROOT//\//\\/}
-EIROOT=${IROOT//\//\\/}
-
-sed -i 's/Listen 80.*/#Listen 80/' ${IROOT}/httpd/conf/httpd.conf
-sed -i 's/Include conf\/ffead-site\.conf//' ${IROOT}/httpd/conf/httpd.conf
-echo 'Include conf/ffead-site.conf' >> ${IROOT}/httpd/conf/httpd.conf
-
-if [ ! -f ${IROOT}/httpd/bin/envvars  ]; then
-bash -c 'cat > ${IROOT}/httpd/bin/envvars <<EOL
-export FFEAD_CPP_PATH='"${FFEADROOT}"'
-export LD_LIBRARY_PATH=\$FFEAD_CPP_PATH/lib:'"${IROOT}"':\$LD_LIBRARY_PATH/
-export ODBCINI='"$IROOT"'/odbc.ini
-export ODBCSYSINI='"$IROOT"'
-EOL'
-else
-	if [ ! -f ${IROOT}/httpd/bin/envvars.bk  ]; then
-		cp ${IROOT}/httpd/bin/envvars ${IROOT}/httpd/bin/envvars.bk
-	fi
-	cp ${IROOT}/httpd/bin/envvars.bk ${IROOT}/httpd/bin/envvars
-	sed -i '/^export FFEAD_CPP_PATH/ d' ${IROOT}/httpd/bin/envvars
-	sed -i '/^export LD_LIBRARY_PATH/ d' ${IROOT}/httpd/bin/envvars
-	sed -i '/^export ODBCINI/ d' ${IROOT}/httpd/bin/envvars
-	sed -i '/^export ODBCSYSINI/ d' ${IROOT}/httpd/bin/envvars	
-bash -c 'cat <<EOL >> ${IROOT}/httpd/bin/envvars
-export FFEAD_CPP_PATH='"${FFEADROOT}"'
-export LD_LIBRARY_PATH='"${FFEADROOT}"'/lib:'"${IROOT}"':$LD_LIBRARY_PATH/
-export ODBCINI='"$IROOT"'/odbc.ini
-export ODBCSYSINI='"$IROOT"' 
-EOL'
-fi
-
-bash -c 'rm -f ${IROOT}/httpd/conf/ffead-site.conf'
-
-bash -c 'cat > ${IROOT}/httpd/conf/ffead-site.conf <<EOL
-LoadModule ffead_cpp_module '"${IROOT}"'/httpd/modules/mod_ffeadcpp.so
-Listen 8080
-FFEAD_CPP_PATH '"${FFEADROOT}"'
-<VirtualHost *:8080>
-	DocumentRoot '"${FFEADROOT}"'/web
-	SetHandler ffead_cpp_module
-	<Directory '"${FFEADROOT}"'>
-		Options FollowSymLinks
-		AllowOverride None
-		Require all denied
-	</Directory>
-	<Directory '"${FFEADROOT}"'/web/>
-		Options -Indexes +FollowSymLinks +MultiViews
-		AllowOverride All
-		Require all granted
-	</Directory>
-</VirtualHost>
-EOL'
-

+ 31 - 0
frameworks/C++/ffead-cpp/ffead-cpp-memcached.dockerfile

@@ -0,0 +1,31 @@
+FROM buildpack-deps:xenial
+
+ENV IROOT=/installs
+ENV FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0
+ENV PATH=${FFEAD_CPP_PATH}:${PATH}
+
+RUN mkdir /installs
+
+WORKDIR /
+
+COPY te-benchmark/ te-benchmark/
+COPY *.sh ./
+RUN chmod 755 *.sh
+
+RUN ./install_ffead-cpp-dependencies.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-framework.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-httpd.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-nginx.sh
+
+WORKDIR /
+
+CMD ./run_ffead.sh emb memcached

+ 12 - 39
frameworks/C++/ffead-cpp/ffead-cpp-mysql.dockerfile

@@ -6,53 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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 ./
-
+COPY *.sh ./
 RUN chmod 755 *.sh
 
-RUN ./ffead-cpp-framework.sh
+RUN ./install_ffead-cpp-dependencies.sh
 
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
+
+RUN ./install_ffead-cpp-framework.sh
+
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD ./server.sh
+CMD ./run_ffead.sh emb mysql

+ 31 - 0
frameworks/C++/ffead-cpp/ffead-cpp-nginx-memcached.dockerfile

@@ -0,0 +1,31 @@
+FROM buildpack-deps:xenial
+
+ENV IROOT=/installs
+ENV FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0
+ENV PATH=${FFEAD_CPP_PATH}:${PATH}
+
+RUN mkdir /installs
+
+WORKDIR /
+
+COPY te-benchmark/ te-benchmark/
+COPY *.sh ./
+RUN chmod 755 *.sh
+
+RUN ./install_ffead-cpp-dependencies.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-framework.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-httpd.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-nginx.sh
+
+WORKDIR /
+
+CMD ./run_ffead.sh nginx memcached

+ 10 - 57
frameworks/C++/ffead-cpp/ffead-cpp-nginx-mongo.dockerfile

@@ -6,73 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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 ./
-
+COPY *.sh ./
 RUN chmod 755 *.sh
 
-RUN ./ffead-cpp-framework.sh
-
-WORKDIR $IROOT
+RUN ./install_ffead-cpp-dependencies.sh
 
-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
+WORKDIR /
 
-ENV PATH=${IROOT}/nginxfc/sbin:${PATH}
+RUN ./install_ffead-cpp-framework.sh
 
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD nginx -g 'daemon off;'
+CMD ./run_ffead.sh nginx mongo

+ 10 - 57
frameworks/C++/ffead-cpp/ffead-cpp-nginx-mysql.dockerfile

@@ -6,73 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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 ./
-
+COPY *.sh ./
 RUN chmod 755 *.sh
 
-RUN ./ffead-cpp-framework.sh
-
-WORKDIR $IROOT
+RUN ./install_ffead-cpp-dependencies.sh
 
-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
+WORKDIR /
 
-ENV PATH=${IROOT}/nginxfc/sbin:${PATH}
+RUN ./install_ffead-cpp-framework.sh
 
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD nginx -g 'daemon off;'
+CMD ./run_ffead.sh nginx mysql

+ 10 - 57
frameworks/C++/ffead-cpp/ffead-cpp-nginx-postgresql.dockerfile

@@ -6,73 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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 ./
-
+COPY *.sh ./
 RUN chmod 755 *.sh
 
-RUN ./ffead-cpp-framework.sh
-
-WORKDIR $IROOT
+RUN ./install_ffead-cpp-dependencies.sh
 
-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
+WORKDIR /
 
-ENV PATH=${IROOT}/nginxfc/sbin:${PATH}
+RUN ./install_ffead-cpp-framework.sh
 
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD nginx -g 'daemon off;'
+CMD ./run_ffead.sh nginx postgresql

+ 31 - 0
frameworks/C++/ffead-cpp/ffead-cpp-nginx-redis.dockerfile

@@ -0,0 +1,31 @@
+FROM buildpack-deps:xenial
+
+ENV IROOT=/installs
+ENV FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0
+ENV PATH=${FFEAD_CPP_PATH}:${PATH}
+
+RUN mkdir /installs
+
+WORKDIR /
+
+COPY te-benchmark/ te-benchmark/
+COPY *.sh ./
+RUN chmod 755 *.sh
+
+RUN ./install_ffead-cpp-dependencies.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-framework.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-httpd.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-nginx.sh
+
+WORKDIR /
+
+CMD ./run_ffead.sh nginx redis

+ 12 - 38
frameworks/C++/ffead-cpp/ffead-cpp-postgresql.dockerfile

@@ -6,52 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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;"
+WORKDIR /
 
-# mongocdriver also used in all tests
+COPY te-benchmark/ te-benchmark/
+COPY *.sh ./
+RUN chmod 755 *.sh
 
-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
+RUN ./install_ffead-cpp-dependencies.sh
 
 WORKDIR /
 
-COPY te-benchmark/ te-benchmark/
-COPY ffead-cpp-framework.sh ./
-COPY server.sh ./
-
-RUN chmod 755 *.sh
+RUN ./install_ffead-cpp-framework.sh
 
-RUN ./ffead-cpp-framework.sh
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD ./server.sh
+CMD ./run_ffead.sh emb postgresql

+ 31 - 0
frameworks/C++/ffead-cpp/ffead-cpp-redis.dockerfile

@@ -0,0 +1,31 @@
+FROM buildpack-deps:xenial
+
+ENV IROOT=/installs
+ENV FFEAD_CPP_PATH=${IROOT}/ffead-cpp-2.0
+ENV PATH=${FFEAD_CPP_PATH}:${PATH}
+
+RUN mkdir /installs
+
+WORKDIR /
+
+COPY te-benchmark/ te-benchmark/
+COPY *.sh ./
+RUN chmod 755 *.sh
+
+RUN ./install_ffead-cpp-dependencies.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-framework.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-httpd.sh
+
+WORKDIR /
+
+RUN ./install_ffead-cpp-nginx.sh
+
+WORKDIR /
+
+CMD ./run_ffead.sh emb redis

+ 12 - 39
frameworks/C++/ffead-cpp/ffead-cpp.dockerfile

@@ -6,53 +6,26 @@ ENV PATH=${FFEAD_CPP_PATH}:${PATH}
 
 RUN mkdir /installs
 
-RUN apt update -yqq && apt install -yqq unzip 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 ./
-
+COPY *.sh ./
 RUN chmod 755 *.sh
 
-RUN ./ffead-cpp-framework.sh
+RUN ./install_ffead-cpp-dependencies.sh
 
-WORKDIR ${IROOT}/ffead-cpp-src/
+WORKDIR /
+
+RUN ./install_ffead-cpp-framework.sh
+
+WORKDIR /
 
-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
+RUN ./install_ffead-cpp-httpd.sh
 
-WORKDIR ${IROOT}/ffead-cpp-2.0
+WORKDIR /
 
-RUN rm -rf web/default web/oauthApp web/flexApp web/markers
-RUN chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+RUN ./install_ffead-cpp-nginx.sh
 
-RUN chmod 755 $FFEAD_CPP_PATH/*.sh
-RUN rm -f $FFEAD_CPP_PATH/*.cntrl
-RUN rm -f $FFEAD_CPP_PATH/tmp/*.sess
+WORKDIR /
 
-CMD ./server.sh
+CMD ./run_ffead.sh emb mongo

+ 34 - 0
frameworks/C++/ffead-cpp/install_ffead-cpp-dependencies.sh

@@ -0,0 +1,34 @@
+#!/bin/bash
+
+cd $IROOT
+
+apt update -yqq
+apt install -yqq unzip uuid-dev odbc-postgresql unixodbc unixodbc-dev apache2 apache2-dev libapr1-dev libaprutil1-dev memcached libmemcached-dev redis-server
+
+service apache2 stop
+service memcached stop
+service redis-server stop
+
+# libmyodbc has been removed from apt
+
+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
+tar xf mysql-connector-odbc-5.3.10-linux-ubuntu16.04-x86-64bit.tar.gz
+mkdir -p /usr/lib/x86_64-linux-gnu/odbc
+mv mysql-connector-odbc-5.3.10-linux-ubuntu16.04-x86-64bit/lib/libmyodbc5* /usr/lib/x86_64-linux-gnu/odbc/ 
+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
+
+wget -q https://github.com/mongodb/mongo-c-driver/releases/download/1.4.0/mongo-c-driver-1.4.0.tar.gz
+tar xf mongo-c-driver-1.4.0.tar.gz
+cd mongo-c-driver-1.4.0/ && \
+    ./configure --prefix=${IROOT} --libdir=${IROOT} --disable-automatic-init-and-cleanup && \
+    make && make install
+
+
+wget https://github.com/redis/hiredis/archive/v0.13.3.tar.gz
+tar xvf v0.13.3.tar.gz
+cd hiredis-0.13.3/
+make
+PREFIX=${IROOT}/ make install
+	

+ 94 - 0
frameworks/C++/ffead-cpp/install_ffead-cpp-framework.sh

@@ -0,0 +1,94 @@
+#!/bin/bash
+
+#From https://github.com/TechEmpower/FrameworkBenchmarks/blob/master/frameworks/C%2B%2B/ulib/setup_json.sh
+MAX_THREADS=$(( 3 * `nproc` / 2 ))
+
+WRIT_THREADS=$(( $MAX_THREADS / 3 ))
+SERV_THREADS=$(( $MAX_THREADS - $WRIT_THREADS ))
+
+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/
+
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+rm -rf web/te-benchmark
+cp -f ${TROOT}/server.sh script/
+cp -rf ${TROOT}/te-benchmark web/
+sed -i 's|THRD_PSIZ=6|THRD_PSIZ='${SERV_THREADS}'|g' resources/server.prop
+sed -i 's|W_THRD_PSIZ=2|W_THRD_PSIZ='${WRIT_THREADS}'|g' resources/server.prop
+sed -i 's|LOGGING_ENABLED=true|LOGGING_ENABLED=false|g' resources/server.prop
+
+./autogen.sh
+./configure --enable-debug=no --enable-apachemod=yes --enable-nginxmod=yes --enable-mod_sdormmongo=yes --enable-mod_sdormsql=yes --enable-mod_rediscache=yes --enable-mod_memcached=yes CPPFLAGS="$CPPFLAGS -I${IROOT}/include/libmongoc-1.0 -I${IROOT}/include/libbson-1.0 -I${IROOT}/include/" LDFLAGS="$LDFLAGS -L${IROOT} -L${IROOT}/lib"
+make install
+
+rm -rf web/default web/oauthApp web/flexApp web/markers
+
+sed -i 's|localhost|tfb-database|g' web/te-benchmark/config/sdorm.xml
+sed -i 's|localhost|tfb-database|g' web/te-benchmark/config/sdormmongo.xml
+sed -i 's|localhost|tfb-database|g' web/te-benchmark/config/sdormmysql.xml
+sed -i 's|localhost|tfb-database|g' web/te-benchmark/config/sdormpostgresql.xml
+sed -i 's|127.0.0.1|tfb-database|g' resources/sample-odbcinst.ini
+sed -i 's|127.0.0.1|tfb-database|g' resources/sample-odbc.ini
+
+cp resources/sample-odbcinst.ini ${IROOT}/odbcinst.ini
+cp resources/sample-odbc.ini ${IROOT}/odbc.ini
+
+cd ${IROOT}/ffead-cpp-src/
+
+#Build for mongodb first
+cp -f web/te-benchmark/sql-src/TeBkWorldmongo.h web/te-benchmark/include/TeBkWorld.h
+cp -f web/te-benchmark/sql-src/TeBkWorldmongo.cpp web/te-benchmark/src/TeBkWorld.cpp
+make build-apps
+cd ffead-cpp-2.0-bin
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh &
+while [ ! -f lib/libinter.so ]
+do
+	sleep 1
+done
+while [ ! -f lib/libdinter.so ]
+do
+	sleep 1
+done
+pkill CHS
+mv lib ../lib-mongo
+
+cd ${IROOT}/ffead-cpp-src/
+#Build for sql now
+cp -f web/te-benchmark/sql-src/TeBkWorldsql.h web/te-benchmark/include/TeBkWorld.h
+cp -f web/te-benchmark/sql-src/TeBkWorldsql.cpp web/te-benchmark/src/TeBkWorld.cpp
+make build-apps
+cd ffead-cpp-2.0-bin
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh &
+while [ ! -f lib/libinter.so ]
+do
+	sleep 1
+done
+while [ ! -f lib/libdinter.so ]
+do
+	sleep 1
+done
+pkill CHS
+mv lib ../lib-sql
+
+cd ${IROOT}/ffead-cpp-src/
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cp -rf lib-mongo ${IROOT}/ffead-cpp-2.0/
+cp -rf lib-sql ${IROOT}/ffead-cpp-2.0/
+cp -rf lib-mongo ${IROOT}/ffead-cpp-2.0/lib
+rm -rf ffead-cpp-2.0-bin
+
+cd ${IROOT}/ffead-cpp-2.0
+cp -f ${TROOT}/run_ffead.sh ./
+
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+chmod 755 $FFEAD_CPP_PATH/*.sh
+rm -f $FFEAD_CPP_PATH/*.cntrl
+rm -f $FFEAD_CPP_PATH/tmp/*.sess
+#cache related dockerfiles will add the cache.xml accordingly whenever needed
+rm -f web/te-benchmark/config/cache.xml

+ 84 - 0
frameworks/C++/ffead-cpp/install_ffead-cpp-httpd.sh

@@ -0,0 +1,84 @@
+#!/bin/bash
+
+cd $IROOT
+
+#chown -R www-data:www-data ffead-cpp-2.0
+
+#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
+#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
+#rm -rf ${IROOT}/httpd
+#mkdir ${IROOT}/httpd
+#./configure --prefix=${IROOT}/httpd --enable-mods-shared=all --with-included-apr
+#make
+#make install
+#cd ${IROOT}
+
+sed -i 's|#define PACKAGE_BUGREPORT "[email protected]"| |g' ${IROOT}/ffead-cpp-2.0/include/AppDefines.h
+sed -i 's|#define PACKAGE_NAME "ffead-cpp"| |g' ${IROOT}/ffead-cpp-2.0/include/AppDefines.h
+sed -i 's|#define PACKAGE_STRING "ffead-cpp 2.0"| |g' ${IROOT}/ffead-cpp-2.0/include/AppDefines.h
+sed -i 's|#define PACKAGE_TARNAME "ffead-cpp"| |g' ${IROOT}/ffead-cpp-2.0/include/AppDefines.h
+sed -i 's|#define PACKAGE_VERSION "2.0"| |g' ${IROOT}/ffead-cpp-2.0/include/AppDefines.h
+
+cd ${IROOT}/ffead-cpp-src/modules/apache_mod_ffeadcpp/
+g++ -fpic -DSHARED_MODULE -fpermissive -std=gnu++11 -I"/usr/include/apache2" -I"/usr/include/apr-1.0" -I"${IROOT}/ffead-cpp-2.0/include/" -I"${IROOT}/include" -I"${IROOT}/include/libbson-1.0/" -I"${IROOT}/include/libmongoc-1.0" mod_ffeadcpp.cpp -L"${IROOT}/ffead-cpp-2.0/lib" -L"${IROOT}" -L"${IROOT}/lib" -lffead_common -lffead_framework -ldl -lcrypto -lssl -lhiredis -lmemcachedutil -c mod_ffeadcpp.cpp
+g++ -shared -o mod_ffeadcpp.so mod_ffeadcpp.o -L"${IROOT}/ffead-cpp-2.0/lib" -L"${IROOT}" -L"${IROOT}/lib" -lffead_common -lffead_framework -ldl -lcrypto -lssl -lapr-1 -laprutil-1 -lstdc++ -lhiredis -lmemcachedutil
+apxs -i -n 'ffead_cpp' mod_ffeadcpp.so
+cd -
+
+FFEADROOT=${IROOT}/ffead-cpp-2.0
+ETROOT=${FFEADROOT//\//\\/}
+EIROOT=${IROOT//\//\\/}
+
+sed -i 's|Include ports.conf|#Include ports.conf|g' /etc/apache2/apache2.conf
+echo 'Include /etc/apache2/sites-enabled/ffead-site.conf' >> /etc/apache2/apache2.conf
+
+bash -c 'cat <<EOL >> /etc/apache2/envvars
+export FFEAD_CPP_PATH='"${FFEADROOT}"'
+export LD_LIBRARY_PATH='"${FFEADROOT}"'/lib:'"${IROOT}"':'"${IROOT}"'/lib:$LD_LIBRARY_PATH/
+export ODBCINI='"$IROOT"'/odbc.ini
+export ODBCSYSINI='"$IROOT"' 
+EOL'
+
+bash -c 'cat > /etc/apache2/mods-enabled/mpm_event.conf <<EOL
+<IfModule mpm_event_module>
+    AsyncRequestWorkerFactor   2
+    ThreadsPerChild           64
+    ServerLimit              100
+    StartServers              20
+    MinSpareThreads          100
+    MaxSpareThreads          200
+    ListenBacklog 			4096
+</IfModule>
+EOL'
+
+mv /etc/apache2/sites-enabled/000-default.conf /etc/apache2/sites-enabled/ffead-site.conf
+bash -c 'cat > /etc/apache2/sites-enabled/ffead-site.conf <<EOL
+LoadModule ffead_cpp_module /usr/lib/apache2/modules/mod_ffeadcpp.so
+Listen 8080
+FFEAD_CPP_PATH '"${FFEADROOT}"'
+<VirtualHost *:8080>
+	DocumentRoot '"${FFEADROOT}"'/web
+	SetHandler ffead_cpp_module
+	<Directory '"${FFEADROOT}"'>
+		Options FollowSymLinks
+		AllowOverride None
+		Require all denied
+	</Directory>
+	<Directory '"${FFEADROOT}"'/web/>
+		Options -Indexes +FollowSymLinks +MultiViews
+		AllowOverride All
+		Require all granted
+	</Directory>
+</VirtualHost>
+EOL'
+

+ 19 - 0
frameworks/C++/ffead-cpp/install_ffead-cpp-nginx.sh

@@ -0,0 +1,19 @@
+#!/bin/bash
+
+cd $IROOT
+
+wget -q http://nginx.org/download/nginx-1.13.1.tar.gz
+tar xf nginx-1.13.1.tar.gz
+
+cd $IROOT/nginx-1.13.1
+
+./configure \
+    --prefix=${IROOT}/nginxfc \
+    --with-ld-opt="-lstdc++ -lhiredis -lmemcachedutil -L${IROOT}/ffead-cpp-2.0/lib -L${IROOT} -L${IROOT}/lib" \
+    --add-module="${IROOT}/ffead-cpp-src/modules/nginx_mod_ffeadcpp" \
+    --with-cc-opt="-I${IROOT}/ffead-cpp-2.0/include -I${IROOT}/include -I${IROOT}/include/libmongoc-1.0 -I${IROOT}/include/libbson-1.0 -w -fpermissive -std=gnu++11"
+make
+make install
+
+cp ${IROOT}/ffead-cpp-src/modules/nginx_mod_ffeadcpp/nginx.conf ${IROOT}/nginxfc/conf/
+sed -i 's|FFEAD_PATH|'${IROOT}/ffead-cpp-2.0'|g' ${IROOT}/nginxfc/conf/nginx.conf

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

@@ -1,112 +0,0 @@
-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": ""
-    }

+ 93 - 0
frameworks/C++/ffead-cpp/run_ffead.sh

@@ -0,0 +1,93 @@
+#!/bin/sh
+
+echo never > /sys/kernel/mm/transparent_hugepage/enabled
+echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.local
+sysctl vm.overcommit_memory=1
+
+export PATH=${IROOT}/nginxfc/sbin:${PATH}
+export LD_LIBRARY_PATH=${IROOT}/:${IROOT}/lib:${FFEAD_CPP_PATH}/lib:$LD_LIBRARY_PATH
+export ODBCINI=${IROOT}/odbc.ini
+export ODBCSYSINI=${IROOT}
+
+cd $FFEAD_CPP_PATH
+
+#use below settings only for debugging
+#echo '/tmp/core.%h.%e.%t' > /proc/sys/kernel/core_pattern
+#ulimit -c unlimited
+
+service redis-server stop
+service apache2 stop
+service memcached stop
+
+rm -f web/te-benchmark/config/cache.xml
+
+if [ $2 = "redis" ]
+then
+	service redis-server start
+	rm -rf lib
+	cp -f web/te-benchmark/config/cacheredis.xml web/te-benchmark/config/cache.xml
+	cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+	cp -rf lib-mongo lib
+fi
+
+if [ $2 = "memcached" ]
+then
+	service memcached start
+	rm -rf lib
+	cp -f web/te-benchmark/config/cachememcached.xml web/te-benchmark/config/cache.xml
+	cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+	cp -rf lib-mongo lib
+fi
+
+if [ $2 = "mongo" ]
+then
+	rm -rf lib
+	cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+	cp -rf lib-mongo lib
+fi
+
+if [ $2 = "mysql" ]
+then
+	rm -rf lib
+	cp -f web/te-benchmark/config/sdormmysql.xml web/te-benchmark/config/sdorm.xml
+	cp -rf lib-sql lib
+fi
+
+if [ $2 = "postgresql" ]
+then
+	rm -rf lib
+	cp -f web/te-benchmark/config/sdormpostgresql.xml web/te-benchmark/config/sdorm.xml
+	cp -rf lib-sql lib
+fi
+
+rm -f rtdcf/*.d rtdcf/*.o 
+rm -f *.cntrl
+rm -f tmp/*.sess
+if [ ! -d tmp ]; then
+mkdir tmp
+fi
+chmod 700 CHS*
+chmod 700 resources/*.sh
+chmod 700 tests/*
+chmod 700 rtdcf/*
+
+if [ $1 = "emb" ]
+then
+	./CHS $FFEAD_CPP_PATH
+fi
+
+if [ $1 = "apache" ]
+then
+	sed -i 's|<pool-size>20</pool-size>|<pool-size>3</pool-size>|g' $FFEAD_CPP_PATH/web/te-benchmark/config/sdorm.xml
+	sed -i 's|<pool-size>10</pool-size>|<pool-size>2</pool-size>|g' $FFEAD_CPP_PATH/web/te-benchmark/config/cache.xml
+	apachectl -D FOREGROUND
+fi
+
+if [ $1 = "nginx" ]
+then
+	sed -i 's|<pool-size>20</pool-size>|<pool-size>3</pool-size>|g' $FFEAD_CPP_PATH/web/te-benchmark/config/sdorm.xml
+	sed -i 's|<pool-size>10</pool-size>|<pool-size>2</pool-size>|g' $FFEAD_CPP_PATH/web/te-benchmark/config/cache.xml
+	nginx -g 'daemon off;'
+fi
+
+wait

+ 11 - 11
frameworks/C++/ffead-cpp/server.sh

@@ -1,18 +1,20 @@
 #!/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
 
+export ODBCINI=${IROOT}/odbc.ini
+export ODBCSYSINI=${IROOT}
 echo $FFEAD_CPP_PATH
-export LD_LIBRARY_PATH=$FFEAD_CPP_PATH/lib:$LD_LIBRARY_PATH
+export LD_LIBRARY_PATH=${IROOT}/:${IROOT}/lib:$FFEAD_CPP_PATH/lib:$LD_LIBRARY_PATH
 echo $LD_LIBRARY_PATH
 export PATH=$FFEAD_CPP_PATH/lib:$PATH
 echo $PATH
-export ODBCINI=$IROOT/odbc.ini
-export ODBCSYSINI=$IROOT
-echo $ODBCINI
-echo $ODBCSYSINI
 rm -f $FFEAD_CPP_PATH/rtdcf/*.d $FFEAD_CPP_PATH/rtdcf/*.o 
 rm -f $FFEAD_CPP_PATH/*.cntrl
 rm -f $FFEAD_CPP_PATH/tmp/*.sess
@@ -23,8 +25,6 @@ chmod 700 $FFEAD_CPP_PATH/CHS*
 chmod 700 $FFEAD_CPP_PATH/resources/*.sh
 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
-
-wait
+./CHS $FFEAD_CPP_PATH > ffead.log 2>&1

+ 13 - 0
frameworks/C++/ffead-cpp/te-benchmark/config/cache.xml

@@ -0,0 +1,13 @@
+<caches>
+        <cache>
+                <nodes>
+                        <node>
+                                <username>sumeet</username>
+                                <password>sumeet</password>
+                        </node>
+                </nodes>
+                <init>TeBkRestController.updateCache</init>
+                <name>Memory-Cached</name>
+                <type>memory</type>
+        </cache>
+</caches>

+ 15 - 0
frameworks/C++/ffead-cpp/te-benchmark/config/cachememcached.xml

@@ -0,0 +1,15 @@
+<caches>
+        <cache>
+                <nodes>
+                        <node>
+                                <host>localhost</host>
+                                <port>11211</port>
+                        </node>
+                </nodes>
+                <init>TeBkRestController.updateCache</init>
+                <pool-size>10</pool-size>
+                <expiryTime>3600</expiryTime>
+                <name>Memcached-Cached</name>
+                <type>memcached</type>
+        </cache>
+</caches>

+ 15 - 0
frameworks/C++/ffead-cpp/te-benchmark/config/cacheredis.xml

@@ -0,0 +1,15 @@
+<caches>
+        <cache>
+                <nodes>
+                        <node>
+                                <host>localhost</host>
+                                <port>6379</port>
+                        </node>
+                </nodes>
+                <init>TeBkRestController.updateCache</init>
+                <pool-size>10</pool-size>
+                <expiryTime>3600</expiryTime>
+                <name>Redis-Cached</name>
+                <type>redis</type>
+        </cache>
+</caches>

+ 1 - 1
frameworks/C++/ffead-cpp/te-benchmark/config/sdorm.xml

@@ -8,7 +8,7 @@
 					<databaseName>hello_world</databaseName>
 				</node>
 			</nodes>
-			<pool-size>30</pool-size>
+			<pool-size>20</pool-size>
 			<name>MongoDB-DSN</name>
 			<type>mongo</type>
 		</config>

+ 1 - 1
frameworks/C++/ffead-cpp/te-benchmark/config/sdormmongo.xml

@@ -8,7 +8,7 @@
 					<databaseName>hello_world</databaseName>
 				</node>
 			</nodes>
-			<pool-size>30</pool-size>
+			<pool-size>20</pool-size>
 			<name>MongoDB-DSN</name>
 			<type>mongo</type>
 		</config>

+ 1 - 1
frameworks/C++/ffead-cpp/te-benchmark/config/sdormmysql.xml

@@ -8,7 +8,7 @@
 					<password>benchmarkdbpass</password>
 				</node>
 			</nodes>
-			<pool-size>30</pool-size>
+			<pool-size>20</pool-size>
 			<name>MySQL-DSN</name>
 			<type>sql</type>
 			<dialect>MySQLMyISAMDialect</dialect>

+ 1 - 1
frameworks/C++/ffead-cpp/te-benchmark/config/sdormpostgresql.xml

@@ -8,7 +8,7 @@
 					<password>benchmarkdbpass</password>
 				</node>
 			</nodes>
-			<pool-size>30</pool-size>
+			<pool-size>20</pool-size>
 			<name>PostgreSQL-DSN</name>
 			<type>sql</type>
 			<dialect>PostgresDialect</dialect>

+ 1 - 0
frameworks/C++/ffead-cpp/te-benchmark/include/TeBkFortune.h

@@ -19,6 +19,7 @@ class TeBkFortune {
 	#pragma @Column dbf="message"
 	std::string message;
 public:
+	TeBkFortune();
 	virtual ~TeBkFortune();
 	int getId() const;
 	void setId(int id);

+ 1 - 1
frameworks/C++/ffead-cpp/te-benchmark/include/TeBkFortuneTemplate.h

@@ -19,7 +19,7 @@
 class TeBkFortuneTemplate {
 public:
 	virtual ~TeBkFortuneTemplate();
-	Context getContext(HttpRequest* request);
+	void getContext(HttpRequest* request, Context* context);
 };
 
 #endif /* TEBKFORTUNETEMPLATE_H_ */

+ 8 - 1
frameworks/C++/ffead-cpp/te-benchmark/include/TeBkRestController.h

@@ -13,7 +13,7 @@
 #include "TeBkMessage.h"
 #include "DataSourceManager.h"
 #include <stdlib.h>
-
+#include "CacheManager.h"
 
 
 #pragma @RestController path="/"
@@ -38,6 +38,13 @@ public:
 	#pragma @GET path="/plaintext" statusCode="200" ocontentType="text/plain"
 	std::string plaintext();
 
+	#pragma @GET path="/cached-worlds" statusCode="200" ocontentType="application/json"
+	std::vector<TeBkWorld> cachedWorlds(
+					#pragma @QueryParam name="count"
+					std::string count);
+
+	void updateCache();
+	TeBkRestController();
 	virtual ~TeBkRestController();
 };
 

+ 1 - 0
frameworks/C++/ffead-cpp/te-benchmark/include/TeBkWorld.h

@@ -21,6 +21,7 @@ class TeBkWorld {
 	#pragma @Column dbf="id"
 	int anotherId;
 public:
+	TeBkWorld();
 	virtual ~TeBkWorld();
 	int getId() const;
 	void setId(int id);

+ 6 - 0
frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldmongo.cpp

@@ -23,6 +23,12 @@ void TeBkWorld::setRandomNumber(int randomNumber) {
 	this->randomNumber = randomNumber;
 }
 
+TeBkWorld::TeBkWorld() {
+	id = 0;
+	randomNumber = 0;
+	anotherId = 0;
+}
+
 TeBkWorld::~TeBkWorld() {
 	// TODO Auto-generated destructor stub
 }

+ 1 - 0
frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldmongo.h

@@ -21,6 +21,7 @@ class TeBkWorld {
 	#pragma @Column dbf="id"
 	int anotherId;
 public:
+	TeBkWorld();
 	virtual ~TeBkWorld();
 	int getId() const;
 	void setId(int id);

+ 5 - 0
frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldsql.cpp

@@ -23,6 +23,11 @@ void TeBkWorld::setRandomNumber(int randomNumber) {
 	this->randomNumber = randomNumber;
 }
 
+TeBkWorld::TeBkWorld() {
+	id = 0;
+	randomNumber = 0;
+}
+
 TeBkWorld::~TeBkWorld() {
 	// TODO Auto-generated destructor stub
 }

+ 2 - 1
frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldsql.h

@@ -15,9 +15,10 @@
 class TeBkWorld {
 	#pragma @Id dbf="id"
 	int id;
-	#pragma @Column dbf="randomnumber"
+	#pragma @Column dbf="randomNumber"
 	int randomNumber;
 public:
+	TeBkWorld();
 	virtual ~TeBkWorld();
 	int getId() const;
 	void setId(int id);

+ 4 - 0
frameworks/C++/ffead-cpp/te-benchmark/src/TeBkFortune.cpp

@@ -23,6 +23,10 @@ void TeBkFortune::setMessage(const std::string& message) {
 	this->message = message;
 }
 
+TeBkFortune::TeBkFortune() {
+	id = 0;
+}
+
 TeBkFortune::~TeBkFortune() {
 	// TODO Auto-generated destructor stub
 }

+ 2 - 5
frameworks/C++/ffead-cpp/te-benchmark/src/TeBkFortuneTemplate.cpp

@@ -11,9 +11,8 @@ TeBkFortuneTemplate::~TeBkFortuneTemplate() {
 	// TODO Auto-generated destructor stub
 }
 
-Context TeBkFortuneTemplate::getContext(HttpRequest* request)
+void TeBkFortuneTemplate::getContext(HttpRequest* request, Context* context)
 {
-	Context cnt;
 	DataSourceInterface* sqli = DataSourceManager::getImpl();
 	std::vector<TeBkFortune> flst = sqli->getAll<TeBkFortune>();
 	for(int i=0;i<(int)flst.size();i++)
@@ -30,8 +29,6 @@ Context TeBkFortuneTemplate::getContext(HttpRequest* request)
 	std::sort (flst.begin(), flst.end());
 	delete sqli;
 
-	GenericObject fortunes;
+	GenericObject& fortunes = (*context)["fortunes"];
 	fortunes << flst;
-	cnt["fortunes"] = fortunes;
-	return cnt;
 }

+ 57 - 4
frameworks/C++/ffead-cpp/te-benchmark/src/TeBkRestController.cpp

@@ -7,8 +7,10 @@
 
 #include "TeBkRestController.h"
 
+TeBkRestController::TeBkRestController() {
+}
+
 TeBkRestController::~TeBkRestController() {
-	// TODO Auto-generated destructor stub
 }
 
 TeBkMessage TeBkRestController::json() {
@@ -38,7 +40,9 @@ std::vector<TeBkWorld> TeBkRestController::queries(std::string queries) {
 	else if(queryCount>500)queryCount=500;
 
 	DataSourceInterface* sqli = DataSourceManager::getImpl();
-	sqli->startSession();
+
+	std::string tbName = "world";
+	sqli->startSession(&tbName);
 	for (int c = 0; c < queryCount; ++c) {
 		int rid = rand() % 10000 + 1;
 		GenericObject id;
@@ -62,17 +66,28 @@ std::vector<TeBkWorld> TeBkRestController::updates(std::string queries) {
 	else if(queryCount>500)queryCount=500;
 
 	DataSourceInterface* sqli = DataSourceManager::getImpl();
-	sqli->startSession();
+
+	std::string tbName = "world";
+	sqli->startSession(&tbName);
 	for (int c = 0; c < queryCount; ++c) {
 		int rid = rand() % 10000 + 1;
 		GenericObject id;
 		id << rid;
 		TeBkWorld w = sqli->get<TeBkWorld>(id);
-		w.setRandomNumber(rand() % 10000 + 1);
+		int newRandomNumber = rand() % 10000 + 1;
+		if(w.getRandomNumber() == newRandomNumber) {
+			newRandomNumber -= 1;
+		}
+		w.setRandomNumber(newRandomNumber);
 		wlst.push_back(w);
 	}
+
+	sqli->startTransaction();
 	sqli->bulkUpdate<TeBkWorld>(wlst);
+	sqli->commit();
+
 	sqli->endSession();
+
 	delete sqli;
 	return wlst;
 }
@@ -80,3 +95,41 @@ std::vector<TeBkWorld> TeBkRestController::updates(std::string queries) {
 std::string TeBkRestController::plaintext() {
 	return "Hello, World!";
 }
+
+void TeBkRestController::updateCache() {
+	CacheInterface* cchi = CacheManager::getImpl();
+	DataSourceInterface* sqli = DataSourceManager::getImpl();
+	std::string tbName = "world";
+	sqli->startSession(&tbName);
+	for (int c = 1; c <= 10000; ++c) {
+		GenericObject id;
+		id << c;
+		TeBkWorld w = sqli->get<TeBkWorld>(id);
+		cchi->setO(CastUtil::lexical_cast<std::string>(c), w);
+	}
+	sqli->endSession();
+	delete sqli;
+	delete cchi;
+}
+
+std::vector<TeBkWorld> TeBkRestController::cachedWorlds(std::string count) {
+	int queryCount = 1;
+	try {
+		queryCount = CastUtil::lexical_cast<int>(count);
+	} catch(...) {
+	}
+	if(queryCount<1)queryCount=1;
+	else if(queryCount>500)queryCount=500;
+
+	CacheInterface* cchi = CacheManager::getImpl();
+	std::vector<std::string> keys;
+	for (int c = 0; c < queryCount; ++c) {
+		int rid = rand() % 10000 + 1;
+		keys.push_back(CastUtil::lexical_cast<std::string>(rid));
+	}
+
+	std::vector<TeBkWorld> wlst = cchi->mgetO<TeBkWorld>(keys);
+
+	delete cchi;
+	return wlst;
+}

+ 6 - 0
frameworks/C++/ffead-cpp/te-benchmark/src/TeBkWorld.cpp

@@ -23,6 +23,12 @@ void TeBkWorld::setRandomNumber(int randomNumber) {
 	this->randomNumber = randomNumber;
 }
 
+TeBkWorld::TeBkWorld() {
+	id = 0;
+	randomNumber = 0;
+	anotherId = 0;
+}
+
 TeBkWorld::~TeBkWorld() {
 	// TODO Auto-generated destructor stub
 }