{"_id":"whirlwind","_rev":"28-1011a3deeda0526b348f64329eb8b15f","name":"whirlwind","dist-tags":{"latest":"1.1.0"},"versions":{"0.1.0":{"name":"whirlwind","version":"0.1.0","keywords":["parallel","ci","testing","distributed","travis","travisci","circle","circleci","codeship","cucumber","jasmine","mocha"],"author":{"name":"Sam Hatoum"},"license":"MIT","_id":"whirlwind@0.1.0","maintainers":[{"name":"xolvio","email":"admin@xolvio.com"}],"homepage":"https://github.com/xolvio/whirlwind#readme","bugs":{"url":"https://github.com/xolvio/whirlwind/issues"},"dist":{"shasum":"81cd6c182fb2c13a48f11010f3cf3c6a1d5efbca","tarball":"https://registry.npmjs.org/whirlwind/-/whirlwind-0.1.0.tgz","integrity":"sha512-fCQPNZie1GTG8z2AAKQWKApGPP6maLii63hS4lSbZSbGkiemQHGL7Y1k4Hs8MbD344YpaSeiMeoNrBlAgXdATg==","signatures":[{"sig":"MEUCIQCYEK69irYo3G/ExjuVlRu5s+bFwtdAThoorUwplDXTHQIgE9vbGnJQDsepvSp04rVAcbhxu5RhL298ENfF8LP+DNg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"index.js","_from":".","_shasum":"81cd6c182fb2c13a48f11010f3cf3c6a1d5efbca","scripts":{"test":"test"},"_npmUser":{"name":"xolvio","email":"admin@xolvio.com"},"repository":{"url":"git+https://github.com/xolvio/whirlwind.git","type":"git"},"_npmVersion":"3.3.12","description":"Runs your tests concurrently and in parallel on cloud CI servers like TravisCI and CircleCI","directories":{},"_nodeVersion":"5.1.0"},"0.1.1":{"name":"whirlwind","version":"0.1.1","keywords":["parallel","concurrent","ci","continuous integration","testing","distributed","travis","travisci","travis-ci","circle","circleci","circle-ci","codeship","cucumber","jasmine","mocha"],"author":{"name":"Sam Hatoum"},"license":"MIT","_id":"whirlwind@0.1.1","maintainers":[{"name":"xolvio","email":"admin@xolvio.com"}],"homepage":"https://github.com/xolvio/whirlwind#readme","bugs":{"url":"https://github.com/xolvio/whirlwind/issues"},"dist":{"shasum":"aa668c8fe91d74bf1a41ea8dec4841f48a6aaefb","tarball":"https://registry.npmjs.org/whirlwind/-/whirlwind-0.1.1.tgz","integrity":"sha512-3V0CimqKq8Zkl0OhMmkXnVaG5RpnKvwxe4U8Nq1++rTPBase0AtOt76+XuC4QI6qhJ0ai934CNtmeWxGXc0D8g==","signatures":[{"sig":"MEQCIAI/gd927ANSrKE5oBDs/cYgJ+bDjS0QqG6MIXQfsFOEAiBJVLNfmKe38UEb0fiz9thr+Dv4yT111T+M8CAI7h6x5g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"bin/whirlwind.js","_from":".","_shasum":"aa668c8fe91d74bf1a41ea8dec4841f48a6aaefb","gitHead":"73ee27f7afe6b6f4a73e80a302b92cbc52a5bb8a","scripts":{"test":"./node_modules/jasmine/bin/jasmine.js"},"_npmUser":{"name":"xolvio","email":"admin@xolvio.com"},"repository":{"url":"git+https://github.com/xolvio/whirlwind.git","type":"git"},"_npmVersion":"3.3.12","description":"Reduce your build times exponentially by using parallelism and concurrency on TravisCI / CircleCI / CodeShip / Locally / Anywhere!","directories":{},"_nodeVersion":"5.1.0","dependencies":{"exit":"^0.1.2","glob":"^6.0.1","async":"^1.5.0","colors":"^1.1.2","lodash":"^3.10.1","log4js":"^0.6.29"},"devDependencies":{"eslint":"^1.10.2","jasmine":"^2.3.2"}},"0.1.2":{"name":"whirlwind","version":"0.1.2","keywords":["parallel","concurrent","ci","continuous integration","testing","distributed","travis","travisci","travis-ci","circle","circleci","circle-ci","codeship","cucumber","jasmine","mocha"],"author":{"name":"Sam Hatoum"},"license":"MIT","_id":"whirlwind@0.1.2","maintainers":[{"name":"xolvio","email":"admin@xolvio.com"}],"homepage":"https://github.com/xolvio/whirlwind#readme","bugs":{"url":"https://github.com/xolvio/whirlwind/issues"},"bin":{"whirlwind":"bin/whirlwind.js"},"dist":{"shasum":"5e9ceca1de2c3b6f72c4ddccceac2803f8d1e0e4","tarball":"https://registry.npmjs.org/whirlwind/-/whirlwind-0.1.2.tgz","integrity":"sha512-gdv1ZRj2ndZoGk7BtGbBLpm1IZySHPUUyw6ASW9YQImfCLgc73N+ZpBDIO0JwkWMToayLN9o+x16cpuvpQNU4g==","signatures":[{"sig":"MEUCIQDDK5TVltXEHAJfN8HTGsl6ht850ecDD3eBJC1nZfaMzQIgOHvqiucPBTBZ2Kj8tFdNBRVBWKcIbq6sox983i9aYjc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"_from":".","_shasum":"5e9ceca1de2c3b6f72c4ddccceac2803f8d1e0e4","gitHead":"73ee27f7afe6b6f4a73e80a302b92cbc52a5bb8a","scripts":{"test":"./node_modules/jasmine/bin/jasmine.js"},"_npmUser":{"name":"xolvio","email":"admin@xolvio.com"},"repository":{"url":"git+https://github.com/xolvio/whirlwind.git","type":"git"},"_npmVersion":"3.3.12","description":"Reduce your build times exponentially by using parallelism and concurrency on TravisCI / CircleCI / CodeShip / Locally / Anywhere!","directories":{},"_nodeVersion":"5.1.0","dependencies":{"exit":"^0.1.2","glob":"^6.0.1","async":"^1.5.0","colors":"^1.1.2","lodash":"^3.10.1","log4js":"^0.6.29"},"preferGlobal":"true","devDependencies":{"eslint":"^1.10.2","jasmine":"^2.3.2"}},"1.0.0":{"name":"whirlwind","version":"1.0.0","keywords":["load testing","performance testing","graphQL","HTTP","serverless","artillery"],"license":"ISC","_id":"whirlwind@1.0.0","maintainers":[],"homepage":"https://github.com/xolvio/whirlwind","bugs":{"url":"https://github.com/xolvio/whirlwind/issues"},"dist":{"shasum":"6b74a7f5b35b0334b04a8ddcd689792472d08a85","tarball":"https://registry.npmjs.org/whirlwind/-/whirlwind-1.0.0.tgz","fileCount":10,"integrity":"sha512-RYGIS6LNp588v830rWhK4+ntQWJXPXjYoRnDV0WgN5AMxwhLYQJzSBpWuD4YOWtX0c9MDlLFv2JHMv77S+y7HQ==","signatures":[{"sig":"MEYCIQCOKkJMtWYQfgC/JMrZTFM0at2pY2+5h3rlAB1j7h/S7wIhAMa9UCHgrvexG15PcOBMGNRVvU8TBEKcqkCyk+4iNTzV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":73132,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbnYa0CRA9TVsSAnZWagAAZ3oQAJDaPw7sBERSO7yw+vAo\nPtiZ5UMjxhg3/YCVjZyYLKGlOnjyQx/RNA6vUmalvKpa2VgC2cBHMa1lA+VT\ng8wcVtbL8I57V2JQWCGlTYTqrYioQJvlUlsSrrnHM6dSphdyFNjlkJv5VCls\n4AP4im4GOJ6lQhDXE4WFKaUtnRJq7OuW1IQaDVa1WmHN+UTMsDCEmiWDv1f7\nHtfjyIl1yVLQjbdFxKqegzeZlpbmERyYnkSwObZpWK8c/Ar1OfBnOaWOq+kI\nd3mKHJ3YLy+chnQvbbE2JQBlmY6BUvadGR29I2bCzz2dtQtfSJ6CR2STWWXM\nrj1h3AVwJkhpQXBMrIgIe0RmuakrVTe7XigpBPkYwhOF1UiusduDbEAVFudh\nv8pPRcUFIK/DuGQYKKofgSuXwy5b6VdRsd3hmu0UbmXc0zG77rvPO7h2KjqA\n6V+xoDwMuRRBRJaYKVc87LcXYfOx3PGkklIpH0e8ixsYO40JIhdlHRlzo90g\nKO43LG5LnIH60e3ZqqZzJT7oBsYpo9bjn32dLmXUI2bZpTE5wFYKnMlRG09y\n1IfY9A5SzId96aRZcpN67UWBumwhaPr9UGN+Yt+FkzKrpwHC1Kf28LmumNdQ\nBD3uDk34E1lLUWJo4r1FJOcOIK30QpLj0fxeLX59Lm8qNC2c0cowaNYTjUmZ\nG2jl\r\n=rJW1\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"dd9031d515a556aa165568a4b69c2ef7b736a42f","scripts":{"deploy":"slsart deploy","postinstall":"./bin/postinstall.sh"},"_npmUser":{"name":"samhatoum","email":"sam@xolv.io"},"repository":{"url":"git+https://github.com/xolvio/whirlwind.git","type":"git"},"_npmVersion":"5.6.0","description":"Artillery based performance testing that runs on the serverless framework, supporting high-order functions like Stress, Soak, Load, Spike and DDOS attacks","directories":{},"_nodeVersion":"8.10.0","dependencies":{"faker":"^4.1.0","influx":"^5.0.7","lodash":"^4.17.10","prettier":"^1.14.2","artillery":"^1.6.0-22","csv-parse":"^1.1.7","serverless":"^1.30.3","artillery-core":"^3.0.0","serverless-artillery":"^0.3.2","artillery-plugin-influxdb":"^0.9.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/whirlwind_1.0.0_1537050292246_0.17046997298429423","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"whirlwind","version":"1.1.0","keywords":["load testing","performance testing","graphQL","HTTP","serverless","artillery"],"license":"ISC","_id":"whirlwind@1.1.0","maintainers":[{"name":"cwohlman","email":"codewriterohs@gmail.com"},{"name":"dweller23","email":"pwojcik@thebrain.pro"},{"name":"lgandecki","email":"lgandecki@thebrain.pro"},{"name":"samhatoum","email":"sam@xolv.io"}],"homepage":"https://github.com/xolvio/whirlwind","bugs":{"url":"https://github.com/xolvio/whirlwind/issues"},"dist":{"shasum":"57286eb1a334258d90bfae65be1ec5b759a572c8","tarball":"https://registry.npmjs.org/whirlwind/-/whirlwind-1.1.0.tgz","fileCount":10,"integrity":"sha512-VdOusV72rDb05UvaC2QUgzQJeoyam9n9QWiiLHEsoCzTGoULTIR/JZ77XgZJLAP+NIXayoEybx2OJYyI15WU0g==","signatures":[{"sig":"MEUCIFM6GzOgG8LRodgcTjwhJU/+Iy6o0HPXArLfFwlKOSzDAiEAnJE59Q+TxQ60ruNSRJ2+NVs5BAfVC4n4fFJ1eyoeejE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":74987,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeX3WGCRA9TVsSAnZWagAA4/4QAJ+E8BRDwzVNMUohCbG8\nh0JW7p7jLG3mmpyMNDH0yeEC5/s8yjsFxHYqSecZTU8bGM/s6xQmwU2tdKCL\nzUhmU2ad23+OhlTvButbj94ZNUq9SjPT+uE08HdMcVJcDUSiQO47AbrTQE49\nFBBUI5D4RyjJKmjyaijmJ37/1JIS+QuR4jISGpivgSMaUiGkNfxpQDwmLBZB\n7U+6K+FdfhrU86CNBvQtQNAtgC8EIjgSIEXuS3B1gE5lEAfRNzp2gObPzix2\ntc6vvFQZZyRQRdrgGxR65MsANuBBfdVWD2Y8m8odK70Leb2uJxf4Vsq6AKwe\nEyMgnuqn0Pqb2hjnrz9xk6HAVbYECVQX7atmY0EVLHX0kSIsDESgj+/SMEWJ\nQDTN8aZ/26UjrXuiq++d53J1tX5yXp3Qio/Dpq/m67YnuFhPJk5F2rvhnqI2\nxlDPE6wZSBaB+T/rq9By4Nd1bSPFRkesxFemfbDbbbwaTLvNr/s88CsYbiPP\nsatkUvVHU0dIcoK9kU9SdSeeae9CwPXIPyKa2/5g4+mCyDEoqskLezWcuq8o\n01Vb6XLI8kC+9Jqrs/htscKJowskrUj+J8STg2REiBvrwP/XM4g73uXhNXog\ntB4RkSxU1ybfVE+eHNYV+pcgOQDA/APDBZJjvoxgEPl9ak58ykeA0rQbNMiw\n50TV\r\n=dbgr\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"649296ea90cd3f297872c06c53640b3eb509ed98","scripts":{"deploy":"slsart deploy","postinstall":"./bin/postinstall.sh"},"_npmUser":{"name":"dweller23","email":"pwojcik@thebrain.pro"},"repository":{"url":"git+https://github.com/xolvio/whirlwind.git","type":"git"},"_npmVersion":"6.12.0","description":"Artillery based performance testing that runs on the serverless framework, supporting high-order functions like Stress, Soak, Load, Spike and DDOS attacks","directories":{},"_nodeVersion":"8.15.1","dependencies":{"faker":"^4.1.0","influx":"^5.0.7","lodash":"^4.17.10","prettier":"^1.14.2","artillery":"^1.6.0-22","csv-parse":"^1.1.7","serverless":"^1.30.3","artillery-core":"^3.0.0","serverless-artillery":"^0.3.2","artillery-plugin-influxdb":"^0.9.0"},"_hasShrinkwrap":false,"devDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/whirlwind_1.1.0_1583314309673_0.6397010028594363","host":"s3://npm-registry-packages"}}},"time":{"created":"2012-06-01T12:36:01.323Z","modified":"2024-12-26T19:21:30.175Z","0.0.1":"2012-06-01T12:36:02.770Z","0.1.0":"2015-11-28T05:42:15.705Z","0.1.1":"2015-12-04T08:45:33.901Z","0.1.2":"2015-12-04T08:48:51.109Z","1.0.0":"2018-09-15T22:24:52.377Z","1.1.0":"2020-03-04T09:31:49.796Z"},"bugs":{"url":"https://github.com/xolvio/whirlwind/issues"},"license":"ISC","homepage":"https://github.com/xolvio/whirlwind","keywords":["load testing","performance testing","graphQL","HTTP","serverless","artillery"],"repository":{"url":"git+https://github.com/xolvio/whirlwind.git","type":"git"},"description":"Artillery based performance testing that runs on the serverless framework, supporting high-order functions like Stress, Soak, Load, Spike and DDOS attacks","maintainers":[{"email":"lgandecki@thebrain.pro","name":"lgandecki"},{"email":"sam@xolv.io","name":"samhatoum"}],"readme":"# ![Whirlwind Logo](./images/whirlwind.svg?sanitize=true) <br/>Whirlwind\n \nWhirlwind is a performance testing library that allows you to run the following higher order functions:\n\n* Load\n* Spike\n* Stress\n* Soak\n* DDOS\n\nWhirlwind uses the AWESOME [Artillery.io](https://artillery.io) toolkit and runs on Serverless Framework and on Amazon Lambda, allowing you to generate an insane amount of load. You can even simulate a DDOS attack by distributing the load across the globe! \n\nFor an example of how to use this, please see the [whirlwind-example](https://github.com/xolvio/whirlwind-example) repository.\n\n## Setup\n\n1. Set permission policy for an IAM user with the following config:\n\n```\n{\n    \"Version\": \"2012-10-17\",\n    \"Statement\": [\n        {\n            \"Sid\": \"VisualEditor0\",\n            \"Effect\": \"Allow\",\n            \"Action\": [\n                \"cloudformation:ListStacks\",\n                \"cloudformation:CreateStack\",\n                \"cloudformation:UpdateStack\",\n                \"cloudformation:CreateChangeSet\",\n                \"cloudformation:DescribeChangeSet\",\n                \"cloudformation:ExecuteChangeSet\",\n                \"cloudformation:DescribeStacks\",\n                \"cloudformation:DescribeStackEvents\",\n                \"cloudformation:DescribeStackResource\",\n                \"s3:createBucket\",\n                \"lambda:InvokeFunction\",\n                \"s3:GetObject\",\n                \"s3:PutObject\",\n                \"s3:ListBucket\",\n                \"cloudformation:ValidateTemplate\",\n                \"iam:GetRole\",\n                \"logs:DescribeLogGroups\",\n                \"iam:CreateRole\",\n                \"logs:CreateLogGroup\",\n                \"iam:DeleteRole\",\n                \"iam:PutRolePolicy\",\n                \"lambda:GetFunction\",\n                \"lambda:CreateFunction\",\n                \"iam:PassRole\",\n                \"lambda:ListVersionsByFunction\",\n                \"lambda:PublishVersion\",\n                \"lambda:UpdateFunctionCode\",\n                \"lambda:UpdateFunctionConfiguration\",\n                \"iam:AttachRolePolicy\",\n                \"cloudformation:DeleteStack\",\n                \"lambda:DeleteFunction\",\n                \"logs:DescribeLogStreams\",\n                \"logs:DeleteLogGroup\",\n                \"s3:DeleteBucket\"\n            ],\n            \"Resource\": \"*\"\n        }\n    ]\n}\n```\n\n2. Create an `~/.aws/credentials` file with:\n```\n[default]\naws_access_key_id=KEY\naws_secret_access_key=KEY\n```\n\n3. Make sure you have Node installed (tested with Node `v8.9.3` and may work with higher).\n\n4. Export these ENV variables:\n```\nexport INFLUX_HOST=<your ip>\nexport INFLUX_PASSWORD=<your password>\nexport INFLUX_USER=<your user>\nexport INFLUX_DB=<the database>\nexport TARGET_HOST=<target host>\n```\n\n## Optional steps:\n\n## Route all Lambda traffic through 1 IP address\nYou may want to send all requests from 1 IP address, for example to test a server may still be in development and not accessible from Internet. With AWS VPC and NAT gateway it's possible to run all Lambda functions in a private subnet and route all the traffic through a leased IP address.\n\nHere is a video how to configure this on AWS side:\n\n[![Setting up Lambdas to use a static IP address](http://img.youtube.com/vi/JcRKdEP94jM/0.jpg)](http://www.youtube.com/watch?v=JcRKdEP94jM \"AWS Knowledge Center Videos: How do I use AWS Lambda in a VPC?\")\n\nand a tutorial:\n[How to setup a VPC for Lambdas](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html \"How to setup a VPC for Lambdas\")\n\nYou also need to setup `securityGroupIds` and `subnetIds` in your `serverless.yml` file. You can see a commented example in the file in this repo. A `securityGroup` is defined in VPC Dashboard -> Security -> Security Groups, you can use a default security group with open internet access. \n\n## Setup an EC2 influxDB server for logging test results and errors\nYou can install InfluxDB on a `t2.micro` (or higher) instance with Ubuntu 16.04. First run `apt-get update` and `apt-get upgrade` then follow official installation tutorial [Installing influxDB](https://docs.influxdata.com/influxdb/v1.6/introduction/installation/#installing-influxdb-oss \"Installing influxDB\")\n\nYou then need to setup access to influxDB over the internet by following [this tutorial](https://docs.influxdata.com/influxdb/v1.6/administration/authentication_and_authorization/ \"Authentication and authorisation\").\n\nFinally you need to open port `5001` (this is a default port for influxDB, you can choose a different port) on your EC2 instance. [Here](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html \"Opening port on EC2 for influxDB\") is how.\n\n## Graphana\nGraphana is a log watcher which can directly connect to influxDB and show your test logs in real-time. It's really easy to use and generates great looking graphs.\n\nWe used Graphana hosted on their servers. This is the \"We Host It\" option that [you can see on this page](https://grafana.com/get \"Get Graphana\").\n\nAlso [this](http://www.andremiller.net/content/grafana-and-influxdb-quickstart-on-ubuntu \"Setting up influxDB\") blog shows some usage and installation of influxDB and Graphana hosted on your server.\n\n#### Credits\n\nThis project has been forked from the awesome [serverless-artillery](https://github.com/Nordstrom/serverless-artillery) project. A huge thank you goes to the Nordstorm team for making this OSS and allowing us to build Whirlwind on top of their hard work.\n\n \n","readmeFilename":"README.md"}