Browse Source

Adding tests for ffead-cpp (mongodb, mysql, postgresql) on (#2893)

* Adding tests for ffead-cpp (mongodb, mysql, postgresql) on
- Embedded server
- Apache
- Nginx
Resolves https://github.com/TechEmpower/FrameworkBenchmarks/issues/2554

* All test implementation code now sits inside the test folder for ffead-cpp

* Fixed issue with server startup

* Fixed failing mysql/postgresql tests

* Fixed scripts as per comments from Mike
Sumeet Chhetri 8 years ago
parent
commit
e8b2062e1f
47 changed files with 1376 additions and 0 deletions
  1. 1 0
      .travis.yml
  2. 212 0
      frameworks/C++/ffead-cpp/benchmark_config.json
  3. 32 0
      frameworks/C++/ffead-cpp/server.sh
  4. 7 0
      frameworks/C++/ffead-cpp/setup-apache-mongo.sh
  5. 7 0
      frameworks/C++/ffead-cpp/setup-apache-mysql.sh
  6. 7 0
      frameworks/C++/ffead-cpp/setup-apache-postgresql.sh
  7. 9 0
      frameworks/C++/ffead-cpp/setup-mongo.sh
  8. 9 0
      frameworks/C++/ffead-cpp/setup-mysql.sh
  9. 13 0
      frameworks/C++/ffead-cpp/setup-nginx-mongo.sh
  10. 14 0
      frameworks/C++/ffead-cpp/setup-nginx-mysql.sh
  11. 13 0
      frameworks/C++/ffead-cpp/setup-nginx-postgresql.sh
  12. 9 0
      frameworks/C++/ffead-cpp/setup-postgresql.sh
  13. 21 0
      frameworks/C++/ffead-cpp/te-benchmark/config/application.xml
  14. 16 0
      frameworks/C++/ffead-cpp/te-benchmark/config/sdorm.xml
  15. 16 0
      frameworks/C++/ffead-cpp/te-benchmark/config/sdormmongo.xml
  16. 17 0
      frameworks/C++/ffead-cpp/te-benchmark/config/sdormmysql.xml
  17. 17 0
      frameworks/C++/ffead-cpp/te-benchmark/config/sdormpostgresql.xml
  18. 30 0
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkFortune.h
  19. 25 0
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkFortuneTemplate.h
  20. 22 0
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkMessage.h
  21. 44 0
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkRestController.h
  22. 33 0
      frameworks/C++/ffead-cpp/te-benchmark/include/TeBkWorld.h
  23. 37 0
      frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldmongo.cpp
  24. 33 0
      frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldmongo.h
  25. 29 0
      frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldsql.cpp
  26. 28 0
      frameworks/C++/ffead-cpp/te-benchmark/sql-src/TeBkWorldsql.h
  27. 32 0
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkFortune.cpp
  28. 37 0
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkFortuneTemplate.cpp
  29. 20 0
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkMessage.cpp
  30. 82 0
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkRestController.cpp
  31. 37 0
      frameworks/C++/ffead-cpp/te-benchmark/src/TeBkWorld.cpp
  32. 21 0
      frameworks/C++/ffead-cpp/te-benchmark/src/autotools/Makefile.am
  33. 13 0
      frameworks/C++/ffead-cpp/te-benchmark/tpe/fortunes.tpe
  34. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-apache-mongo.sh
  35. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-apache-mysql.sh
  36. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-apache-postgresql.sh
  37. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-emb-mongo.sh
  38. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-emb-mysql.sh
  39. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-emb-postgresql.sh
  40. 46 0
      toolset/setup/linux/frameworks/ffead-cpp-framework.sh
  41. 88 0
      toolset/setup/linux/frameworks/ffead-cpp-httpd.sh
  42. 12 0
      toolset/setup/linux/frameworks/ffead-cpp-mongocdriver.sh
  43. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-nginx-mongo.sh
  44. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-nginx-mysql.sh
  45. 28 0
      toolset/setup/linux/frameworks/ffead-cpp-nginx-postgresql.sh
  46. 20 0
      toolset/setup/linux/frameworks/ffead-cpp-nginx.sh
  47. 15 0
      toolset/setup/linux/frameworks/ffead-cpp-unixodbc.sh

+ 1 - 0
.travis.yml

@@ -22,6 +22,7 @@ env:
     - "TESTDIR=CSharp/nancy"
     - "TESTDIR=CSharp/revenj"
     - "TESTDIR=CSharp/servicestack"
+    - "TESTDIR=C++/ffead-cpp"
     - "TESTDIR=C++/cpoll_cppsp"
     - "TESTDIR=C++/cutelyst"
     - "TESTDIR=C++/silicon"

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

@@ -0,0 +1,212 @@
+{
+  "framework": "ffead-cpp",
+  "tests": [{
+    "default": {
+      "setup_file": "setup-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": "ffead-cpp",
+      "os": "Linux",
+      "database_os": "Linux",
+      "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",
+      "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-apache",
+      "webserver": "apache",
+      "os": "Linux",
+      "database_os": "Linux",
+      "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-apache",
+      "webserver": "apache",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ffead-cpp-apache-mysql",
+      "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-apache",
+      "webserver": "apache",
+      "os": "Linux",
+      "database_os": "Linux",
+      "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-nginx",
+      "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-nginx",
+      "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-nginx",
+      "webserver": "nginx",
+      "os": "Linux",
+      "database_os": "Linux",
+      "display_name": "ffead-cpp-nginx-postgresql",
+      "notes": "",
+      "versus": ""
+    }
+  }]
+}

+ 32 - 0
frameworks/C++/ffead-cpp/server.sh

@@ -0,0 +1,32 @@
+#!/bin/sh
+
+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
+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
+if [ ! -d tmp ]; then
+mkdir tmp
+fi
+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 > ffead.log 2>&1

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

@@ -0,0 +1,7 @@
+#!/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

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

@@ -0,0 +1,7 @@
+#!/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

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

@@ -0,0 +1,7 @@
+#!/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

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

@@ -0,0 +1,9 @@
+#!/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

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

@@ -0,0 +1,9 @@
+#!/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

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

@@ -0,0 +1,13 @@
+#!/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

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

@@ -0,0 +1,14 @@
+#!/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
+

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

@@ -0,0 +1,13 @@
+#!/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

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

@@ -0,0 +1,9 @@
+#!/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

+ 21 - 0
frameworks/C++/ffead-cpp/te-benchmark/config/application.xml

@@ -0,0 +1,21 @@
+<app libname="te_benchmark">
+	<cors-config>
+		<allow-origins>*</allow-origins>
+		<allow-methods>GET, POST, HEAD, PUT, DELETE</allow-methods>
+		<allow-headers>content-type, origin</allow-headers>
+		<expose-headers>content-type, origin</expose-headers>
+		<allow-credentials>true</allow-credentials>
+		<max-age>1023</max-age>
+	</cors-config>
+	<cache-control>
+		<control ext="png,css,js,jpeg,jpg,gif" header="Cache-Control"
+			value="max-age=290304000, public" />
+		<control ext="txt,xml,json" header="Cache-Control"
+			value="max-age=172800, public, must-revalidate" />
+		<control ext="html,html" header="Cache-Control"
+			value="max-age=7200, must-revalidate" />
+		<control file="video.mov" header="Expires"
+			value="Thu, 15 Apr 2020 20:00:00 GMT" />
+		<control header="Last-Modified" remove="true" />
+	</cache-control>
+</app>

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

@@ -0,0 +1,16 @@
+<sdorm>
+	<data-source>
+		<config>
+			<nodes>
+				<node>
+					<host>localhost</host>
+					<port>27017</port>
+					<databaseName>hello_world</databaseName>
+				</node>
+			</nodes>
+			<pool-size>5</pool-size>
+			<name>MongoDB-DSN</name>
+			<type>mongo</type>
+		</config>
+	</data-source>
+</sdorm>

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

@@ -0,0 +1,16 @@
+<sdorm>
+	<data-source>
+		<config>
+			<nodes>
+				<node>
+					<host>localhost</host>
+					<port>27017</port>
+					<databaseName>hello_world</databaseName>
+				</node>
+			</nodes>
+			<pool-size>5</pool-size>
+			<name>MongoDB-DSN</name>
+			<type>mongo</type>
+		</config>
+	</data-source>
+</sdorm>

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

@@ -0,0 +1,17 @@
+<sdorm>
+	<data-source>
+		<config>
+			<nodes>
+				<node>
+					<dsn>MySQL-DSN</dsn>
+					<username>benchmarkdbuser</username>
+					<password>benchmarkdbpass</password>
+				</node>
+			</nodes>
+			<pool-size>5</pool-size>
+			<name>MySQL-DSN</name>
+			<type>sql</type>
+			<dialect>MySQLMyISAMDialect</dialect>
+		</config>
+	</data-source>
+</sdorm>

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

@@ -0,0 +1,17 @@
+<sdorm>
+	<data-source>
+		<config>
+			<nodes>
+				<node>
+					<dsn>PostgreSQL-DSN</dsn>
+					<username>benchmarkdbuser</username>
+					<password>benchmarkdbpass</password>
+				</node>
+			</nodes>
+			<pool-size>5</pool-size>
+			<name>PostgreSQL-DSN</name>
+			<type>sql</type>
+			<dialect>PostgresDialect</dialect>
+		</config>
+	</data-source>
+</sdorm>

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

@@ -0,0 +1,30 @@
+/*
+ * TeBkFortune.h
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#ifndef TEBKFORTUNE_H_
+#define TEBKFORTUNE_H_
+#include "string"
+
+
+
+#pragma @Entity
+#pragma @Table name="fortune"
+class TeBkFortune {
+	#pragma @Id dbf="id"
+	int id;
+	#pragma @Column dbf="message"
+	std::string message;
+public:
+	virtual ~TeBkFortune();
+	int getId() const;
+	void setId(int id);
+	const std::string& getMessage() const;
+	void setMessage(const std::string& message);
+	bool operator < (const TeBkFortune& other) const;
+};
+
+#endif /* TEBKFORTUNE_H_ */

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

@@ -0,0 +1,25 @@
+/*
+ * TeBkFortuneTemplate.h
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#ifndef TEBKFORTUNETEMPLATE_H_
+#define TEBKFORTUNETEMPLATE_H_
+#include "TemplateHandler.h"
+#include "TeBkFortune.h"
+#include "vector"
+#include "DataSourceManager.h"
+#include <stdlib.h>
+#include <algorithm>
+#include "CryptoHandler.h"
+
+#pragma @Template path="fortunes" file="fortunes.tpe"
+class TeBkFortuneTemplate {
+public:
+	virtual ~TeBkFortuneTemplate();
+	Context getContext(HttpRequest* request);
+};
+
+#endif /* TEBKFORTUNETEMPLATE_H_ */

+ 22 - 0
frameworks/C++/ffead-cpp/te-benchmark/include/TeBkMessage.h

@@ -0,0 +1,22 @@
+/*
+ * TeBkMessage.h
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#ifndef TEBKMESSAGE_H_
+#define TEBKMESSAGE_H_
+#include "string"
+
+
+
+class TeBkMessage {
+	std::string message;
+public:
+	virtual ~TeBkMessage();
+	const std::string& getMessage() const;
+	void setMessage(const std::string& message);
+};
+
+#endif /* TEBKMESSAGE_H_ */

+ 44 - 0
frameworks/C++/ffead-cpp/te-benchmark/include/TeBkRestController.h

@@ -0,0 +1,44 @@
+/*
+ * TeBkRestController.h
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#ifndef TEBKRESTCONTROLLER_H_
+#define TEBKRESTCONTROLLER_H_
+#include "TeBkWorld.h"
+#include "vector"
+#include "CastUtil.h"
+#include "TeBkMessage.h"
+#include "DataSourceManager.h"
+#include <stdlib.h>
+
+
+
+#pragma @RestController path="/"
+class TeBkRestController {
+public:
+	#pragma @GET path="/json" statusCode="200" ocontentType="application/json"
+	TeBkMessage json();
+
+	#pragma @GET path="/db" statusCode="200" ocontentType="application/json"
+	TeBkWorld db();
+
+	#pragma @GET path="/queries" statusCode="200" ocontentType="application/json"
+	std::vector<TeBkWorld> queries(
+					#pragma @QueryParam name="queries"
+					std::string queries);
+
+	#pragma @GET path="/updates" statusCode="200" ocontentType="application/json"
+	std::vector<TeBkWorld> updates(
+					#pragma @QueryParam name="queries"
+					std::string queries);
+
+	#pragma @GET path="/plaintext" statusCode="200" ocontentType="text/plain"
+	std::string plaintext();
+
+	virtual ~TeBkRestController();
+};
+
+#endif /* TEBKRESTCONTROLLER_H_ */

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

@@ -0,0 +1,33 @@
+/*
+ * TeBkWorld.h
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#ifndef TEBKWORLD_H_
+#define TEBKWORLD_H_
+#include "string"
+
+
+#pragma @Entity
+#pragma @Table name="world"
+class TeBkWorld {
+	#pragma @Id dbf="_id"
+	int id;
+	#pragma @Column dbf="randomNumber"
+	int randomNumber;
+	#pragma @IgnoreSer
+	#pragma @Column dbf="id"
+	int anotherId;
+public:
+	virtual ~TeBkWorld();
+	int getId() const;
+	void setId(int id);
+	int getRandomNumber() const;
+	void setRandomNumber(int randomNumber);
+	int getAnotherId() const;
+	void setAnotherId(int anotherId);
+};
+
+#endif /* TEBKWORLD_H_ */

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

@@ -0,0 +1,37 @@
+/*
+ * TeBkWorld.cpp
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#include "TeBkWorld.h"
+
+int TeBkWorld::getId() const {
+	return id;
+}
+
+void TeBkWorld::setId(int id) {
+	this->id = id;
+}
+
+int TeBkWorld::getRandomNumber() const {
+	return randomNumber;
+}
+
+void TeBkWorld::setRandomNumber(int randomNumber) {
+	this->randomNumber = randomNumber;
+}
+
+TeBkWorld::~TeBkWorld() {
+	// TODO Auto-generated destructor stub
+}
+
+int TeBkWorld::getAnotherId() const {
+	return anotherId;
+}
+
+void TeBkWorld::setAnotherId(int anotherId) {
+	this->anotherId = anotherId;
+}
+

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

@@ -0,0 +1,33 @@
+/*
+ * TeBkWorld.h
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#ifndef TEBKWORLD_H_
+#define TEBKWORLD_H_
+#include "string"
+
+
+#pragma @Entity
+#pragma @Table name="world"
+class TeBkWorld {
+	#pragma @Id dbf="_id"
+	int id;
+	#pragma @Column dbf="randomNumber"
+	int randomNumber;
+	#pragma @IgnoreSer
+	#pragma @Column dbf="id"
+	int anotherId;
+public:
+	virtual ~TeBkWorld();
+	int getId() const;
+	void setId(int id);
+	int getRandomNumber() const;
+	void setRandomNumber(int randomNumber);
+	int getAnotherId() const;
+	void setAnotherId(int anotherId);
+};
+
+#endif /* TEBKWORLD_H_ */

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

@@ -0,0 +1,29 @@
+/*
+ * TeBkWorld.cpp
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#include "TeBkWorld.h"
+
+int TeBkWorld::getId() const {
+	return id;
+}
+
+void TeBkWorld::setId(int id) {
+	this->id = id;
+}
+
+int TeBkWorld::getRandomNumber() const {
+	return randomNumber;
+}
+
+void TeBkWorld::setRandomNumber(int randomNumber) {
+	this->randomNumber = randomNumber;
+}
+
+TeBkWorld::~TeBkWorld() {
+	// TODO Auto-generated destructor stub
+}
+

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

@@ -0,0 +1,28 @@
+/*
+ * TeBkWorld.h
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#ifndef TEBKWORLD_H_
+#define TEBKWORLD_H_
+#include "string"
+
+
+#pragma @Entity
+#pragma @Table name="world"
+class TeBkWorld {
+	#pragma @Id dbf="id"
+	int id;
+	#pragma @Column dbf="randomNumber"
+	int randomNumber;
+public:
+	virtual ~TeBkWorld();
+	int getId() const;
+	void setId(int id);
+	int getRandomNumber() const;
+	void setRandomNumber(int randomNumber);
+};
+
+#endif /* TEBKWORLD_H_ */

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

@@ -0,0 +1,32 @@
+/*
+ * TeBkFortune.cpp
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#include "TeBkFortune.h"
+
+int TeBkFortune::getId() const {
+	return id;
+}
+
+void TeBkFortune::setId(int id) {
+	this->id = id;
+}
+
+const std::string& TeBkFortune::getMessage() const {
+	return message;
+}
+
+void TeBkFortune::setMessage(const std::string& message) {
+	this->message = message;
+}
+
+TeBkFortune::~TeBkFortune() {
+	// TODO Auto-generated destructor stub
+}
+
+bool TeBkFortune::operator < (const TeBkFortune& other) const {
+	return message.compare(other.message)<0;
+}

+ 37 - 0
frameworks/C++/ffead-cpp/te-benchmark/src/TeBkFortuneTemplate.cpp

@@ -0,0 +1,37 @@
+/*
+ * TeBkFortuneTemplate.cpp
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#include "TeBkFortuneTemplate.h"
+
+TeBkFortuneTemplate::~TeBkFortuneTemplate() {
+	// TODO Auto-generated destructor stub
+}
+
+Context TeBkFortuneTemplate::getContext(HttpRequest* request)
+{
+	Context cnt;
+	DataSourceInterface* sqli = DataSourceManager::getImpl();
+	std::vector<TeBkFortune> flst = sqli->getAll<TeBkFortune>();
+	for(int i=0;i<(int)flst.size();i++)
+	{
+		std::string nm = flst.at(i).getMessage();
+		CryptoHandler::sanitizeHtml(nm);
+		flst.at(i).setMessage(nm);
+	}
+
+	TeBkFortune nf;
+	nf.setId(0);
+	nf.setMessage("Additional fortune added at request time.");
+	flst.push_back(nf);
+	std::sort (flst.begin(), flst.end());
+	delete sqli;
+
+	GenericObject fortunes;
+	fortunes << flst;
+	cnt["fortunes"] = fortunes;
+	return cnt;
+}

+ 20 - 0
frameworks/C++/ffead-cpp/te-benchmark/src/TeBkMessage.cpp

@@ -0,0 +1,20 @@
+/*
+ * TeBkMessage.cpp
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#include "TeBkMessage.h"
+
+TeBkMessage::~TeBkMessage() {
+	// TODO Auto-generated destructor stub
+}
+
+const std::string& TeBkMessage::getMessage() const {
+	return message;
+}
+
+void TeBkMessage::setMessage(const std::string& message) {
+	this->message = message;
+}

+ 82 - 0
frameworks/C++/ffead-cpp/te-benchmark/src/TeBkRestController.cpp

@@ -0,0 +1,82 @@
+/*
+ * TeBkRestController.cpp
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#include "TeBkRestController.h"
+
+TeBkRestController::~TeBkRestController() {
+	// TODO Auto-generated destructor stub
+}
+
+TeBkMessage TeBkRestController::json() {
+	TeBkMessage msg;
+	msg.setMessage("Hello, World!");
+	return msg;
+}
+
+TeBkWorld TeBkRestController::db() {
+	DataSourceInterface* sqli = DataSourceManager::getImpl();
+	int rid = rand() % 10000 + 1;
+	GenericObject id;
+	id << rid;
+	TeBkWorld w = sqli->get<TeBkWorld>(id);
+	delete sqli;
+	return w;
+}
+
+std::vector<TeBkWorld> TeBkRestController::queries(std::string queries) {
+	std::vector<TeBkWorld> wlst;
+	int queryCount = 1;
+	try {
+		queryCount = CastUtil::lexical_cast<int>(queries);
+	} catch(...) {
+	}
+	if(queryCount<1)queryCount=1;
+	else if(queryCount>500)queryCount=500;
+
+	DataSourceInterface* sqli = DataSourceManager::getImpl();
+	sqli->startSession();
+	for (int c = 0; c < queryCount; ++c) {
+		int rid = rand() % 10000 + 1;
+		GenericObject id;
+		id << rid;
+		TeBkWorld w = sqli->get<TeBkWorld>(id);
+		wlst.push_back(w);
+	}
+	sqli->endSession();
+	delete sqli;
+	return wlst;
+}
+
+std::vector<TeBkWorld> TeBkRestController::updates(std::string queries) {
+	std::vector<TeBkWorld> wlst;
+	int queryCount = 1;
+	try {
+		queryCount = CastUtil::lexical_cast<int>(queries);
+	} catch(...) {
+	}
+	if(queryCount<1)queryCount=1;
+	else if(queryCount>500)queryCount=500;
+
+	DataSourceInterface* sqli = DataSourceManager::getImpl();
+	sqli->startSession();
+	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);
+		wlst.push_back(w);
+	}
+	sqli->bulkUpdate<TeBkWorld>(wlst);
+	sqli->endSession();
+	delete sqli;
+	return wlst;
+}
+
+std::string TeBkRestController::plaintext() {
+	return "Hello, World!";
+}

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

@@ -0,0 +1,37 @@
+/*
+ * TeBkWorld.cpp
+ *
+ *  Created on: 11-Mar-2015
+ *      Author: sumeetc
+ */
+
+#include "TeBkWorld.h"
+
+int TeBkWorld::getId() const {
+	return id;
+}
+
+void TeBkWorld::setId(int id) {
+	this->id = id;
+}
+
+int TeBkWorld::getRandomNumber() const {
+	return randomNumber;
+}
+
+void TeBkWorld::setRandomNumber(int randomNumber) {
+	this->randomNumber = randomNumber;
+}
+
+TeBkWorld::~TeBkWorld() {
+	// TODO Auto-generated destructor stub
+}
+
+int TeBkWorld::getAnotherId() const {
+	return anotherId;
+}
+
+void TeBkWorld::setAnotherId(int anotherId) {
+	this->anotherId = anotherId;
+}
+

+ 21 - 0
frameworks/C++/ffead-cpp/te-benchmark/src/autotools/Makefile.am

@@ -0,0 +1,21 @@
+AUTOMAKE_OPTIONS = subdir-objects
+ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
+
+AM_CPPFLAGS=-I"../../../../include" -I"../../include"
+
+packageIdentifier=${PACKAGE_NAME}-${PACKAGE_VERSION}-bin
+distdir=${PACKAGE_NAME}-${PACKAGE_VERSION}-src
+fprefix=../../../../${packageIdentifier}
+prefix=${abs_builddir}
+
+lib_LTLIBRARIES = libte_benchmark.la
+libte_benchmark_la_SOURCES = ../TeBkFortune.cpp \
+				../TeBkFortuneTemplate.cpp \
+				../TeBkMessage.cpp \
+				../TeBkRestController.cpp \
+				../TeBkWorld.cpp
+
+libte_benchmark_la_LDFLAGS = -no-undefined 
+libte_benchmark_la_LIBADD = -L"${fprefix}/lib" -lffead_common -lffead_framework
+
+#dist_noinst_SCRIPTS = autogen.sh

+ 13 - 0
frameworks/C++/ffead-cpp/te-benchmark/tpe/fortunes.tpe

@@ -0,0 +1,13 @@
+#declare std::vector<TeBkFortune> fortunes#
+<!DOCTYPE html>
+<html>
+<head><title>Fortunes</title></head>
+<body>
+<table>
+<tr><th>id</th><th>message</th></tr>
+#for(int i=0;i<(int)fortunes.size();i++)#
+<tr><td>$_S{fortunes.at(i).getId()}</td><td>${fortunes.at(i).getMessage()}</td></tr>
+#rof#
+</table>
+</body>
+</html>

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-apache-mongo.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-apache-mongo && return 0
+
+fw_depends mongodb
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-httpd
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-apache-mongo.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${IROOT}/httpd/bin:\$PATH" > $IROOT/ffead-cpp-apache-mongo.installed

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-apache-mysql.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-apache-mysql && return 0
+
+fw_depends mysql
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-httpd
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormmysql.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-apache-mysql.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${IROOT}/httpd/bin:\$PATH" > $IROOT/ffead-cpp-apache-mysql.installed

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-apache-postgresql.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-apache-postgresql && return 0
+
+fw_depends postgresql
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-httpd
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormpostgresql.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-apache-postgresql.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${IROOT}/httpd/bin:\$PATH" > $IROOT/ffead-cpp-apache-postgresql.installed

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-emb-mongo.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-emb-mongo && return 0
+
+fw_depends mongodb
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-framework
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-emb-mongo.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${FFEAD_CPP_PATH}:\$PATH" > $IROOT/ffead-cpp-emb-mongo.installed

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-emb-mysql.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-emb-mysql && return 0
+
+fw_depends mysql
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-framework
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormmysql.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-emb-mysql.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${FFEAD_CPP_PATH}:\$PATH" > $IROOT/ffead-cpp-emb-mysql.installed

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-emb-postgresql.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-emb-postgresql && return 0
+
+fw_depends postgresql
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-framework
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormpostgresql.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-emb-postgresql.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${FFEAD_CPP_PATH}:\$PATH" > $IROOT/ffead-cpp-emb-postgresql.installed

+ 46 - 0
toolset/setup/linux/frameworks/ffead-cpp-framework.sh

@@ -0,0 +1,46 @@
+#!/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 ))
+else
+MAX_THREADS=$(( 2 * $CPU_COUNT ))
+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
+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|localhost|'${DBHOST}'|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|'${DBHOST}'|g' web/te-benchmark/config/sdorm.xml
+sed -i 's|localhost|'${DBHOST}'|g' web/te-benchmark/config/sdormmongo.xml
+sed -i 's|localhost|'${DBHOST}'|g' web/te-benchmark/config/sdormmysql.xml
+sed -i 's|localhost|'${DBHOST}'|g' web/te-benchmark/config/sdormpostgresql.xml
+sed -i 's|localhost|'${DBHOST}'|g' resources/sample-odbcinst.ini
+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

+ 88 - 0
toolset/setup/linux/frameworks/ffead-cpp-httpd.sh

@@ -0,0 +1,88 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-httpd && return 0
+
+fw_depends ffead-cpp-framework
+
+sudo apt-get remove -y apache2
+
+fw_get -o httpd-2.4.25.tar.gz http://www-us.apache.org/dist//httpd/httpd-2.4.25.tar.gz
+fw_get -o apr-1.5.2.tar.gz http://www-us.apache.org/dist//apr/apr-1.5.2.tar.gz
+fw_get -o apr-util-1.5.4.tar.gz http://www-us.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
+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'
+
+touch ${IROOT}/ffead-cpp-httpd.installed

+ 12 - 0
toolset/setup/linux/frameworks/ffead-cpp-mongocdriver.sh

@@ -0,0 +1,12 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-mongocdriver && return 0
+
+fw_get -o mongo-c-driver-1.4.0.tar.gz https://github.com/mongodb/mongo-c-driver/releases/download/1.4.0/mongo-c-driver-1.4.0.tar.gz
+rm -rf mongo-c-driver-1.4.0/
+fw_untar 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
+
+touch ${IROOT}/ffead-cpp-mongocdriver.installed

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-nginx-mongo.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-nginx-mongo && return 0
+
+fw_depends mongodb
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-nginx
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormmongo.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-nginx-mongo.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${IROOT}/nginxfc/sbin:\$PATH" > $IROOT/ffead-cpp-nginx-mongo.installed

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-nginx-mysql.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-nginx-mysql && return 0
+
+fw_depends mysql
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-nginx
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormmysql.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-nginx-mysql.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${IROOT}/nginxfc/sbin:\$PATH" > $IROOT/ffead-cpp-nginx-mysql.installed

+ 28 - 0
toolset/setup/linux/frameworks/ffead-cpp-nginx-postgresql.sh

@@ -0,0 +1,28 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-nginx-postgresql && return 0
+
+fw_depends postgresql
+fw_depends ffead-cpp-unixodbc
+fw_depends ffead-cpp-mongocdriver
+fw_depends ffead-cpp-nginx
+
+cd ${IROOT}/ffead-cpp-src/
+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
+cp -f web/te-benchmark/config/sdormpostgresql.xml web/te-benchmark/config/sdorm.xml
+rm -rf ffead-cpp-2.0-bin
+make build-apps
+rm -rf ${IROOT}/ffead-cpp-2.0
+cp -rf ffead-cpp-2.0-bin ${IROOT}/ffead-cpp-2.0
+cd ${IROOT}/ffead-cpp-2.0
+rm -rf web/default web/oauthApp web/flexApp web/markers
+chmod 755 *.sh resources/*.sh rtdcf/autotools/*.sh
+./server.sh > ffead-cpp-nginx-postgresql.log 2>&1
+while ! echo exit | nc localhost 8080; do sleep 5; done
+rm -f serv.ctrl
+sleep 10
+
+cd ${IROOT}
+
+echo -e "export PATH=${IROOT}/nginxfc/sbin:\$PATH" > $IROOT/ffead-cpp-nginx-postgresql.installed

+ 20 - 0
toolset/setup/linux/frameworks/ffead-cpp-nginx.sh

@@ -0,0 +1,20 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-nginx && return 0
+
+fw_depends ffead-cpp-framework
+
+sudo apt-get remove -y nginx
+
+fw_get -o nginx-1.11.3.tar.gz http://nginx.org/download/nginx-1.11.3.tar.gz
+rm -rf ${IROOT}nginx-1.11.3
+fw_untar nginx-1.11.3.tar.gz
+rm -rf ${IROOT}/nginxfc
+cd nginx-1.11.3
+./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}/include -I${IROOT}/include/libmongoc-1.0/ -I${IROOT}/include/libbson-1.0/ -I${IROOT}/ffead-cpp-2.0/include -w -fpermissive"
+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
+
+touch ${IROOT}/ffead-cpp-nginx.installed

+ 15 - 0
toolset/setup/linux/frameworks/ffead-cpp-unixodbc.sh

@@ -0,0 +1,15 @@
+#!/bin/bash
+
+fw_installed ffead-cpp-unixodbc && return 0
+
+sudo apt-get install -y build-essential
+sudo apt-get install -y uuid-dev libmyodbc odbc-postgresql
+
+fw_get -o unixODBC-2.3.4.tar.gz ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.4.tar.gz
+rm -rf unixODBC-2.3.4
+fw_untar unixODBC-2.3.4.tar.gz
+cd unixODBC-2.3.4
+./configure --enable-stats=no --enable-gui=no --enable-drivers=no --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE --libdir=${IROOT} --prefix=${IROOT} --sysconfdir=${IROOT}
+make install
+
+touch ${IROOT}/ffead-cpp-unixodbc.installed