diff --git a/client/test/actions/90-nodes-select.js b/client/test/actions/90-nodes-select.js index 5693ae01b..0a457557c 100644 --- a/client/test/actions/90-nodes-select.js +++ b/client/test/actions/90-nodes-select.js @@ -103,12 +103,16 @@ module.exports = function(cfg) { debug('scenario done'); }); }) + .catch(e => { + console.error(e); + }) .fail(function(err) { debug('exception. taking screenshot', err); browser.takeScreenshot(function(err, data) { if (err) { debug(err); } else { + debugger; var base64Data = data.replace(/^data:image\/png;base64,/,""); fs.writeFile('90-nodes-select-' + cfg.run + '.png', base64Data, 'base64', function(err) { if(err) debug(err); diff --git a/client/test/perfjankie/Dockerfile b/client/test/perfjankie/Dockerfile new file mode 100644 index 000000000..30cbf6bc0 --- /dev/null +++ b/client/test/perfjankie/Dockerfile @@ -0,0 +1,5 @@ +FROM couchdb:1.6 + +COPY local.ini /usr/local/etc/couchdb/ + +EXPOSE 5984 diff --git a/client/test/perfjankie/data/_replicator.couch b/client/test/perfjankie/data/_replicator.couch new file mode 100755 index 000000000..b8dbbebd0 Binary files /dev/null and b/client/test/perfjankie/data/_replicator.couch differ diff --git a/client/test/perfjankie/data/_users.couch b/client/test/perfjankie/data/_users.couch new file mode 100755 index 000000000..70df30c93 Binary files /dev/null and b/client/test/perfjankie/data/_users.couch differ diff --git a/client/test/perfjankie/data/performance.couch b/client/test/perfjankie/data/performance.couch new file mode 100755 index 000000000..38e1a59a6 Binary files /dev/null and b/client/test/perfjankie/data/performance.couch differ diff --git a/client/test/perfjankie/docker-compose.yml b/client/test/perfjankie/docker-compose.yml new file mode 100644 index 000000000..5af6c5925 --- /dev/null +++ b/client/test/perfjankie/docker-compose.yml @@ -0,0 +1,28 @@ +version : '2' +services: + # nginx: + # container_name: 'nginx' + # image: 'nginx' + # volumes: + # - ./nginx.conf:/etc/nginx/nginx.conf:ro + # links: + # - couchdb + # ports: + # - '5984:5984' + selenium: + container_name: 'selenium' + image: 'elgalu/selenium' + ports: + - '4444:24444' + - '5900:25900' + environment: + - TZ="US/Pacific" + shm_size: 1g + couchdb: + container_name: 'couchdb' + image: 'couchdb:1.6' + ports: + - '5984:5984' + volumes: + - ./data:/usr/local/var/lib/couchdb + - ./local.ini:/usr/local/etc/couchdb/local.ini diff --git a/client/test/perfjankie/local.ini b/client/test/perfjankie/local.ini new file mode 100644 index 000000000..8a5a75aab --- /dev/null +++ b/client/test/perfjankie/local.ini @@ -0,0 +1,104 @@ +; CouchDB Configuration Settings + +; Custom settings should be made in this file. They will override settings +; in default.ini, but unlike changes made to default.ini, this file won't be +; overwritten on server upgrade. + +[couchdb] +;max_document_size = 4294967296 ; bytes +uuid = 8fcf62d03c895729a02ba2922744e3e4 + +[httpd] +;port = 5984 +;bind_address = 127.0.0.1 +; Options for the MochiWeb HTTP server. +;server_options = [{backlog, 128}, {acceptor_pool_size, 16}] +; For more socket options, consult Erlang's module 'inet' man page. +;socket_options = [{recbuf, 262144}, {sndbuf, 262144}, {nodelay, true}] +enable_cors = true + +[cors] +origins = * +credentials = true +methods = GET, POST, PUT, DELETE, HEAD + +; Uncomment next line to trigger basic-auth popup on unauthorized requests. +;WWW-Authenticate = Basic realm="administrator" + +; Uncomment next line to set the configuration modification whitelist. Only +; whitelisted values may be changed via the /_config URLs. To allow the admin +; to change this value over HTTP, remember to include {httpd,config_whitelist} +; itself. Excluding it from the list would require editing this file to update +; the whitelist. +;config_whitelist = [{httpd,config_whitelist}, {log,level}, {etc,etc}] + +[query_servers] +;nodejs = /usr/local/bin/couchjs-node /path/to/couchdb/share/server/main.js + + +[httpd_global_handlers] +;_google = {couch_httpd_proxy, handle_proxy_req, <<"http://www.google.com">>} + +[couch_httpd_auth] +; If you set this to true, you should also uncomment the WWW-Authenticate line +; above. If you don't configure a WWW-Authenticate header, CouchDB will send +; Basic realm="server" in order to prevent you getting logged out. +require_valid_user = false + +[log] +;level = debug + +[log_level_by_module] +; In this section you can specify any of the four log levels 'none', 'info', +; 'error' or 'debug' on a per-module basis. See src/*/*.erl for various +; modules. +;couch_httpd = error + + +[os_daemons] +; For any commands listed here, CouchDB will attempt to ensure that +; the process remains alive. Daemons should monitor their environment +; to know when to exit. This can most easily be accomplished by exiting +; when stdin is closed. +;foo = /path/to/command -with args + +[daemons] +; enable SSL support by uncommenting the following line and supply the PEM's below. +; the default ssl port CouchDB listens on is 6984 +; httpsd = {couch_httpd, start_link, [https]} + +[ssl] +;cert_file = /full/path/to/server_cert.pem +;key_file = /full/path/to/server_key.pem +;password = somepassword +; set to true to validate peer certificates +verify_ssl_certificates = false +; Path to file containing PEM encoded CA certificates (trusted +; certificates used for verifying a peer certificate). May be omitted if +; you do not want to verify the peer. +;cacert_file = /full/path/to/cacertf +; The verification fun (optional) if not specified, the default +; verification fun will be used. +;verify_fun = {Module, VerifyFun} +; maximum peer certificate depth +ssl_certificate_max_depth = 1 + +; To enable Virtual Hosts in CouchDB, add a vhost = path directive. All requests to +; the Virual Host will be redirected to the path. In the example below all requests +; to http://example.com/ are redirected to /database. +; If you run CouchDB on a specific port, include the port number in the vhost: +; example.com:5984 = /database +[vhosts] +;example.com = /database/ + +[update_notification] +;unique notifier name=/full/path/to/exe -with "cmd line arg" + +; To create an admin account uncomment the '[admins]' section below and add a +; line in the format 'username = password'. When you next start CouchDB, it +; will change the password to a hash (so that your passwords don't linger +; around in plain-text files). You can add more admin accounts with more +; 'username = password' lines. Don't forget to restart CouchDB after +; changing this. +;[admins] +;admin = password diff --git a/client/test/perfjankie/main.js b/client/test/perfjankie/main.js index 6d4ef7e9c..a79e27551 100644 --- a/client/test/perfjankie/main.js +++ b/client/test/perfjankie/main.js @@ -1,11 +1,11 @@ var perfjankie = require('perfjankie'); -var run = process.env.COMMIT || 'commit#Hash'; // A hash for the commit, displayed in the x-axis in the dashboard +var run = process.env.COMMIT || 'commit#590f0078e79e9fb968c8b9f8e5e5ce0a96fa4825'; // A hash for the commit, displayed in the x-axis in the dashboard var time = process.env.DATE || new Date().getTime() // Used to sort the data when displaying graph. Can be the time when a commit was made var scenario = process.env.ACTIONS || '90-nodes-select'; var host = process.env.HOST || 'localhost:4040'; var actions = require('../actions/' + scenario)({host: host, run: run}); - +debugger; perfjankie({ /* The next set of values identify the test */ suite: 'Scope', @@ -16,7 +16,7 @@ perfjankie({ /* Identifies where the data and the dashboard are saved */ couch: { - server: 'http://local.docker:5984', + server: 'http://localhost:5984', database: 'performance' // updateSite: !process.env.CI, // If true, updates the couchApp that shows the dashboard. Set to false in when running Continuous integration, run this the first time using command line. // onlyUpdateSite: false // No data to upload, just update the site. Recommended to do from dev box as couchDB instance may require special access to create views. diff --git a/client/test/perfjankie/out.json b/client/test/perfjankie/out.json new file mode 100644 index 000000000..5bcd4b5fe --- /dev/null +++ b/client/test/perfjankie/out.json @@ -0,0 +1,12 @@ +[ { Error: [init({"browserName":"chrome","chromeOptions":{"perfLoggingPrefs":{"traceCategories":"toplevel,disabled-by-default-devtools.timeline.frame,blink.console,disabled-by-default-devtools.timeline,benchmark,blink.console,devtools.timeline,disabled-by-default-devtools.timeline,toplevel,disabled-by-default-devtools.timeline.frame,benchmark"},"args":["--enable-gpu-benchmarking","--enable-thread-composting"]},"loggingPrefs":{"performance":"ALL"}})] The environment you requested was unavailable. + at /Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/lib/webdriver.js:129:15 + at Request._callback (/Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/lib/http-utils.js:87:7) + at Request.self.callback (/Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/node_modules/request/request.js:368:22) + at emitTwo (events.js:106:13) + at Request.emit (events.js:191:7) + at Request. (/Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/node_modules/request/request.js:1219:14) + at emitOne (events.js:101:20) + at Request.emit (events.js:188:7) + at IncomingMessage. (/Users/jpellizzari/Projects/go/src/github.com/weaveworks/scope/client/node_modules/wd/node_modules/request/request.js:1167:12) + at emitNone (events.js:91:20) + data: '{"state":"unknown error","sessionId":null,"hCode":501768309,"value":{"localizedMessage":"The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html","cause":null,"stackTrace":[{"fileName":"Preconditions.java","nativeMethod":false,"methodName":"checkState","className":"com.google.common.base.Preconditions","hCode":-1301733662,"lineNumber":199,"class":"java.lang.StackTraceElement"},{"fileName":"DriverService.java","nativeMethod":false,"methodName":"findExecutable","className":"org.openqa.selenium.remote.service.DriverService","hCode":-1432293605,"lineNumber":109,"class":"java.lang.StackTraceElement"},{"fileName":"ChromeDriverService.java","nativeMethod":false,"methodName":"access$000","className":"org.openqa.selenium.chrome.ChromeDriverService","hCode":-1230567666,"lineNumber":32,"class":"java.lang.StackTraceElement"},{"fileName":"ChromeDriverService.java","nativeMethod":false,"methodName":"findDefaultExecutable","className":"org.openqa.selenium.chrome.ChromeDriverService$Builder","hCode":-1770001534,"lineNumber":137,"class":"java.lang.StackTraceElement"},{"fileName":"DriverService.java","nativeMethod":false,"methodName":"build","className":"org.openqa.selenium.remote.service.DriverService$Builder","hCode":778286186,"lineNumber":296,"class":"java.lang.StackTraceElement"},{"fileName":"ChromeDriverService.java","nativeMethod":false,"methodName":"createDefaultService","className":"org.openqa.selenium.chrome.ChromeDriverService","hCode":-1740331610,"lineNumber":88,"class":"java.lang.StackTraceElement"},{"fileName":"ChromeDriver.java","nativeMethod":false,"methodName":"","className":"org.openqa.selenium.chrome.ChromeDriver","hCode":988971970,"lineNumber":142,"class":"java.lang.StackTraceElement"},{"fileName":"NativeConstructorAccessorImpl.java","nativeMethod":true,"methodName":"newInstance0","className":"sun.reflect.NativeConstructorAccessorImpl","hCode":-917798116,"lineNumber":-2,"class":"java.lang.StackTraceElement"},{"fileName":"NativeConstructorAccessorImpl.java","nativeMethod":false,"methodName":"newInstance","className":"sun.reflect.NativeConstructorAccessorImpl","hCode":-1864225098,"lineNumber":62,"class":"java.lang.StackTraceElement"},{"fileName":"DelegatingConstructorAccessorImpl.java","nativeMethod":false,"methodName":"newInstance","className":"sun.reflect.DelegatingConstructorAccessorImpl","hCode":-2122307259,"lineNumber":45,"class":"java.lang.StackTraceElement"},{"fileName":"Constructor.java","nativeMethod":false,"methodName":"newInstance","className":"java.lang.reflect.Constructor","hCode":-1319859919,"lineNumber":423,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultDriverProvider.java","nativeMethod":false,"methodName":"callConstructor","className":"org.openqa.selenium.remote.server.DefaultDriverProvider","hCode":-2096353668,"lineNumber":103,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultDriverProvider.java","nativeMethod":false,"methodName":"newInstance","className":"org.openqa.selenium.remote.server.DefaultDriverProvider","hCode":1201680335,"lineNumber":97,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultDriverFactory.java","nativeMethod":false,"methodName":"newInstance","className":"org.openqa.selenium.remote.server.DefaultDriverFactory","hCode":-1365021416,"lineNumber":60,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultSession.java","nativeMethod":false,"methodName":"call","className":"org.openqa.selenium.remote.server.DefaultSession$BrowserCreator","hCode":2056168471,"lineNumber":222,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultSession.java","nativeMethod":false,"methodName":"call","className":"org.openqa.selenium.remote.server.DefaultSession$BrowserCreator","hCode":2056168458,"lineNumber":209,"class":"java.lang.StackTraceElement"},{"fileName":"FutureTask.java","nativeMethod":false,"methodName":"run","className":"java.util.concurrent.FutureTask","hCode":-820313554,"lineNumber":266,"class":"java.lang.StackTraceElement"},{"fileName":"DefaultSession.java","nativeMethod":false,"methodName":"run","className":"org.openqa.selenium.remote.server.DefaultSession$1","hCode":-255143467,"lineNumber":176,"class":"java.lang.StackTraceElement"},{"fileName":"ThreadPoolExecutor.java","nativeMethod":false,"methodName":"runWorker","className":"java.util.concurrent.ThreadPoolExecutor","hCode":-1285150184,"lineNumber":1142,"class":"java.lang.StackTraceElement"},{"fileName":"ThreadPoolExecutor.java","nativeMethod":false,"methodName":"run","className":"java.util.concurrent.ThreadPoolExecutor$Worker","hCode":-242190645,"lineNumber":617,"class":"java.lang.StackTraceElement"},{"fileName":"Thread.java","nativeMethod":false,"methodName":"run","className":"java.lang.Thread","hCode":-82946320,"lineNumber":745,"class":"java.lang.StackTraceElement"}],"suppressed":[],"message":"The path to the driver executable must be set by the webdriver.chrome.driver system property; for more information, see https://github.com/SeleniumHQ/selenium/wiki/ChromeDriver. The latest version can be downloaded from http://chromedriver.storage.googleapis.com/index.html","hCode":1545013890,"class":"java.lang.IllegalStateException","screen":null},"class":"org.openqa.selenium.remote.Response","status":13}' } ]