Skip to content

Commit d3373e1

Browse files
committedJul 16, 2015
Stress test: alculating exec time average for a demanding workflow
1 parent 9734bfb commit d3373e1

File tree

3 files changed

+51
-16
lines changed

3 files changed

+51
-16
lines changed
 

‎stress-test/stress-test.js

+27-5
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,38 @@
11
var worksmith = require('..')
22
var _ = require('lodash')
3+
var async = require('async')
34
packageJson = require('../package.json')
45

56
console.log('Stress tests for worksmith version ', packageJson.version)
67

7-
try {
8+
var SAMPLE_SIZE = 100
89

10+
try {
911
worksmith.use("lodash", worksmith.createAdapter(require('lodash')))
1012
var workflow = worksmith("./stress-test/stress-workflows/workflow1.js")
11-
var ctx = {}
12-
workflow(ctx, function(err, results) { if (err) console.error('There was an error running a workflow: ', err.toString()) })
13-
13+
console.log('About to execute workflow1')
14+
calculateAverageExecTime(function(average) {
15+
console.log('The average execution time is: ', average, ' ms')
16+
})
1417
} catch(e) {
15-
console.error('There was an error configuring old data deletion: ', e)
18+
console.error('There was an error setting up a workflow: ', e)
19+
}
20+
21+
function calculateAverageExecTime(next) {
22+
var average = counter = 0
23+
async.whilst(
24+
function () { return counter < SAMPLE_SIZE },
25+
function (cb) {
26+
counter++;
27+
var ctx = {}
28+
workflow(ctx, function(err, results) {
29+
if (err) console.error('There was an error running a workflow: ', err.toString())
30+
average += ctx.duration
31+
cb()
32+
})
33+
},
34+
function (err) {
35+
next(average / SAMPLE_SIZE)
36+
}
37+
)
1638
}
+11-8
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
module.exports = {
22
"task": "sequence",
33
"items": [
4-
{
5-
"task": "log",
6-
"message": "Stress test 1"
7-
},
84
{
95
"task": "set",
106
"name": "startTime",
@@ -15,12 +11,23 @@ module.exports = {
1511
"taskPath": "/stress-test/tasks",
1612
"size": 1000,
1713
"depth": 3,
14+
"prefix": "level",
1815
"resultTo": "objectList"
1916
},
2017
{
2118
"task": "while",
2219
"test": "[eval]objectList.length > 0[/eval]",
2320
"subflow": [
21+
{
22+
"task": "lodash/last",
23+
"arguments": [ "@objectList" ],
24+
"resultTo": "object"
25+
},
26+
{
27+
"task": "set",
28+
"name": "extractedValue",
29+
"value": "@object.level3.level2.level1.level0"
30+
},
2431
{
2532
"task": "lodash/initial",
2633
"arguments": [ "@objectList" ],
@@ -32,10 +39,6 @@ module.exports = {
3239
"task": "set",
3340
"name": "duration",
3441
"value": "[eval](new Date()).getTime() - startTime[/eval]"
35-
},
36-
{
37-
"task": "log",
38-
"message": "[hbs]End of test. Duration: {{duration}} ms[/hbs]"
3942
}
4043
]
4144
}

‎stress-test/tasks/createDeepObjects.js

+13-3
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,24 @@ var _ = require('lodash')
33
module.exports = function(definition) {
44
return function build(context) {
55

6-
execute.annotations = { inject: ['size', 'depth'] }
6+
execute.annotations = { inject: ['size', 'depth', 'prefix'] }
77

8-
function execute(size, depth, done) {
8+
function execute(size, depth, prefix, done) {
99
var objects = []
10-
_.times(size, function(n) { objects.push({ number: n }) })
10+
_.times(size, function(n) {
11+
objects.push(createDeepObject(depth))
12+
})
1113
done(null, objects)
14+
15+
function createDeepObject(level) {
16+
if (level < 0) return { value: _.random(0, 10000)}
17+
var newLevel = {}
18+
newLevel[prefix + level] = createDeepObject(level - 1)
19+
return newLevel
20+
}
1221
}
1322

23+
1424
return execute
1525
}
1626
}

0 commit comments

Comments
 (0)
Please sign in to comment.