serverless-artillery
Version:
A serverless performance testing tool. `serverless` + `artillery` = crush. a.k.a. Orbital Laziers [sic]
105 lines (89 loc) • 2.42 kB
JavaScript
#!/usr/bin/env node
var rolex = require('../lib/rolex');
var timerComparison = require('../lib/timerComparison');
var formatNumber = require('../lib/formatNumber');
var stats = require('../lib/stats');
var blessed = require('blessed');
var screen = blessed.screen();
var setIntervalTitle = blessed.box({
top: 0,
left: '0%',
width: '33%',
height: 1,
tags: true,
content: "{underline}setInterval{/}"
});
screen.append(setIntervalTitle);
var setIntervalLog = blessed.box({
top: 1,
left: '0%',
width: '33%',
tags: true
});
screen.append(setIntervalLog);
var rolexTitle = blessed.box({
top: 0,
left: '33%',
width: '34%',
height: 1,
tags: true,
content: "{underline}rolex{/}"
});
screen.append(rolexTitle);
var rolexLog = blessed.box({
top: 1,
left: '33%',
width: '34%',
tags: true
});
screen.append(rolexLog);
var recursiveSetTimeoutTitle = blessed.box({
top: 0,
left: '67%',
width: '33%',
height: 1,
tags: true,
content: "{underline}Recursive setTimeout{/}"
});
screen.append(recursiveSetTimeoutTitle);
var recursiveSetTimeoutLog = blessed.box({
top: 1,
left: '67%',
width: '33%',
tags: true
});
screen.append(recursiveSetTimeoutLog);
screen.key(['escape', 'q', 'C-c'], function (ch, key) { return process.exit(0); });
screen.on('resize', function () {
setIntervalLog.rows = screen.rows - 1;
rolexLog.rows = screen.rows - 1;
recursiveSetTimeoutLog.rows = screen.rows - 1;
});
screen.render();
var ms = 1000;
function logToBox (box, title) {
var diffs = [];
return function (line) {
var diffAbs = Math.abs(line.diff);
var color = 'red';
if (diffAbs <= 1) { color = 'green'; }
else if (diffAbs <= 5) { color = 'yellow'; }
diffs.push(line.diff);
title.setContent(title.getContent()
.replace(/(\[m).*$/, '$1') + // Strips everything after underline-ending markup
' avg diff:' + formatNumber(stats.mean(diffs)));
box.insertTop(['{'+color+'-fg}' +
'{bold}' + formatNumber(line.runTime, 0) + '{/bold}' +
' drift:' + formatNumber(line.drift, 0) +
' diff:' + formatNumber(line.diff, 0) +
'{/}']);
screen.render();
};
}
timerComparison(ms, function (name) {
return {
setInterval: logToBox(setIntervalLog, setIntervalTitle),
rolex: logToBox(rolexLog, rolexTitle),
recursiveSetTimeout: logToBox(recursiveSetTimeoutLog, recursiveSetTimeoutTitle)
}[name];
});