ソースを参照

Add ability to override dockerfile and CMD in benchmark_config (#4543)

Nate 6 年 前
コミット
40949f8746

+ 0 - 20
frameworks/Go/aah/aah-mysql.dockerfile

@@ -1,20 +0,0 @@
-FROM golang:1.11.4
-
-RUN apt-get update -yqq
-
-ADD ./ /aah
-WORKDIR /aah
-
-ENV GOPATH /aah
-ENV PATH ${GOPATH}/bin:${PATH}
-ENV GO111MODULE on
-
-RUN curl -sL https://aahframework.org/install-cli | bash -s v0.13.3
-
-WORKDIR /aah/src/benchmark
-
-RUN aah --version
-RUN mkdir -p views/common
-RUN aah build --single
-
-CMD build/bin/benchmark run --envprofile bm_mysql

+ 0 - 20
frameworks/Go/aah/aah-postgresql.dockerfile

@@ -1,20 +0,0 @@
-FROM golang:1.11.4
-
-RUN apt-get update -yqq
-
-ADD ./ /aah
-WORKDIR /aah
-
-ENV GOPATH /aah
-ENV PATH ${GOPATH}/bin:${PATH}
-ENV GO111MODULE on
-
-RUN curl -sL https://aahframework.org/install-cli | bash -s v0.13.3
-
-WORKDIR /aah/src/benchmark
-
-RUN aah --version
-RUN mkdir -p views/common
-RUN aah build --single
-
-CMD build/bin/benchmark run --envprofile bm_postgresql

+ 4 - 0
frameworks/Go/aah/benchmark_config.json

@@ -21,6 +21,8 @@
       "versus": "go"
     },
     "mysql": {
+      "dockerfile": "aah.dockerfile",
+      "docker_cmd": "build/bin/benchmark run --envprofile bm_mysql",
       "db_url": "/db",
       "query_url": "/db/queries?count=",
       "fortune_url": "/db/fortunes",
@@ -42,6 +44,8 @@
       "versus": "go"
     },
     "postgresql": {
+      "dockerfile": "aah.dockerfile",
+      "docker_cmd": "build/bin/benchmark run --envprofile bm_postgresql",
       "db_url": "/pg-db",
       "query_url": "/pg-db/queries?count=",
       "fortune_url": "/pg-db/fortunes",

+ 12 - 0
frameworks/JavaScript/nodejs/app.js

@@ -1,6 +1,18 @@
 const cluster = require('cluster');
 const numCPUs = require('os').cpus().length;
 
+process.env.NODE_HANDLER = 'mysql-raw';
+
+if (process.env.TFB_TEST_NAME === 'nodejs-mongodb') {
+  process.env.NODE_HANDLER = 'mongoose';
+} else if (process.env.TFB_TEST_NAME === 'nodejs-mongodb-raw') {
+  process.env.NODE_HANDLER = 'mongodb-raw';
+} else if (process.env.TFB_TEST_NAME === 'nodejs-mysql') {
+  process.env.NODE_HANDLER = 'sequelize';
+} else if (process.env.TFB_TEST_NAME === 'nodejs-postgres') {
+  process.env.NODE_HANDLER = 'sequelize-postgres';
+}
+
 if (cluster.isMaster) {
   // Fork workers.
   for (let i = 0; i < numCPUs; i++) {

+ 5 - 0
frameworks/JavaScript/nodejs/benchmark_config.json

@@ -26,6 +26,7 @@
       "versus": "nodejs"
     },
     "chakra": {
+      "dockerfile": "nodejs.dockerfile",
       "json_url": "/json",
       "plaintext_url": "/plaintext",
       "db_url": "/db",
@@ -50,6 +51,7 @@
       "versus": "nodejs"
     },
     "mongodb": {
+      "dockerfile": "nodejs.dockerfile",
       "db_url": "/db",
       "query_url": "/queries?queries=",
       "update_url": "/updates?queries=",
@@ -70,6 +72,7 @@
       "versus": "nodejs"
     },
     "mongodb-raw": {
+      "dockerfile": "nodejs.dockerfile",
       "db_url": "/db",
       "query_url": "/queries?queries=",
       "update_url": "/updates?queries=",
@@ -91,6 +94,7 @@
       "versus": "nodejs"
     },
     "mysql": {
+      "dockerfile": "nodejs.dockerfile",
       "db_url": "/db",
       "query_url": "/queries?queries=",
       "update_url": "/updates?queries=",
@@ -112,6 +116,7 @@
       "versus": "nodejs"
     },
     "postgres": {
+      "dockerfile": "nodejs.dockerfile",
       "db_url": "/db",
       "query_url": "/queries?queries=",
       "update_url": "/updates?queries=",

+ 0 - 9
frameworks/JavaScript/nodejs/nodejs-chakra.dockerfile

@@ -1,9 +0,0 @@
-FROM node:chakracore
-
-COPY ./ ./
-
-RUN npm install
-
-ENV NODE_HANDLER mysql-raw
-
-CMD ["node", "app.js"]

+ 0 - 9
frameworks/JavaScript/nodejs/nodejs-mongodb-raw.dockerfile

@@ -1,9 +0,0 @@
-FROM node:10.12.0
-
-COPY ./ ./
-
-RUN npm install
-
-ENV NODE_HANDLER mongodb-raw
-
-CMD ["node", "app.js"]

+ 0 - 9
frameworks/JavaScript/nodejs/nodejs-mongodb.dockerfile

@@ -1,9 +0,0 @@
-FROM node:10.12.0
-
-COPY ./ ./
-
-RUN npm install
-
-ENV NODE_HANDLER mongoose
-
-CMD ["node", "app.js"]

+ 0 - 9
frameworks/JavaScript/nodejs/nodejs-mysql.dockerfile

@@ -1,9 +0,0 @@
-FROM node:10.12.0
-
-COPY ./ ./
-
-RUN npm install
-
-ENV NODE_HANDLER sequelize 
-
-CMD ["node", "app.js"]

+ 0 - 9
frameworks/JavaScript/nodejs/nodejs-postgres.dockerfile

@@ -1,9 +0,0 @@
-FROM node:10.12.0
-
-COPY ./ ./
-
-RUN npm install
-
-ENV NODE_HANDLER sequelize-postgres
-
-CMD ["node", "app.js"]

+ 2 - 2
frameworks/JavaScript/nodejs/nodejs.dockerfile

@@ -1,9 +1,9 @@
 FROM node:10.12.0
 
+ARG TFB_TEST_NAME
+
 COPY ./ ./
 
 RUN npm install
 
-ENV NODE_HANDLER mysql-raw
-
 CMD ["node", "app.js"]

+ 20 - 7
toolset/utils/docker_helper.py

@@ -28,7 +28,7 @@ class DockerHelper:
             base_url=self.benchmarker.config.database_docker_host)
 
     def __build(self, base_url, path, build_log_file, log_prefix, dockerfile,
-                tag):
+                tag, buildargs={}):
         '''
         Builds docker containers using docker-py low-level api
         '''
@@ -44,9 +44,7 @@ class DockerHelper:
                     forcerm=True,
                     timeout=3600,
                     pull=True,
-                    buildargs=({
-                      'BENCHMARK_ENV': self.benchmarker.config.results_environment
-                    })
+                    buildargs=buildargs
                 )
                 buffer = ""
                 for token in output:
@@ -117,7 +115,12 @@ class DockerHelper:
         log_prefix = "%s: " % test.name
 
         # Build the test image
-        test_docker_file = "%s.dockerfile" % test.name
+        test_docker_file = '%s.dockerfile' % test.name
+        if hasattr(test, 'dockerfile'):
+            test_docker_file = test.dockerfile
+        test_database = ''
+        if hasattr(test, 'database'):
+            test_database = test.database
         build_log_file = build_log_dir
         if build_log_dir is not os.devnull:
             build_log_file = os.path.join(
@@ -131,8 +134,13 @@ class DockerHelper:
                 log_prefix=log_prefix,
                 path=test.directory,
                 dockerfile=test_docker_file,
-                tag="techempower/tfb.test.%s" % test_docker_file.replace(
-                    ".dockerfile", ""))
+                buildargs=({
+                    'BENCHMARK_ENV':
+                        self.benchmarker.config.results_environment,
+                    'TFB_TEST_NAME': test.name,
+                    'TFB_TEST_DATABASE': test_database
+                }),
+                tag="techempower/tfb.test.%s" % test.name)
         except Exception:
             return 1
 
@@ -182,9 +190,14 @@ class DockerHelper:
                 'soft': 99
             }]
 
+            docker_cmd = ''
+            if hasattr(test, 'docker_cmd'):
+                docker_cmd = test.docker_cmd
+
             container = self.server.containers.run(
                 "techempower/tfb.test.%s" % test.name,
                 name=name,
+                command=docker_cmd,
                 network=self.benchmarker.config.network,
                 network_mode=self.benchmarker.config.network_mode,
                 stderr=True,