This repository has been archived by the owner on Nov 26, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
response-time-threshold.js
executable file
·95 lines (80 loc) · 2.46 KB
/
response-time-threshold.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/**
* Script to parse raw Loadster test results in JSON format, and count how many
* results for each URL exceed a certain threshold.
*/
var fs = require('fs');
var argv = require('minimist')(process.argv.slice(2));
var file = argv.file;
var threshold = argv.threshold;
var includeResources = argv.includeresources;
//
// Print usage and exit if necessary
//
if (!file || !threshold) {
console.log("Required arguments:");
console.log(" --file=xyas-data.json (your Loadster test data file, unzipped)");
console.log(" --threshold=1500 (max/min cut-off time in milliseconds)");
console.log("Optional arguments:");
console.log(" --includeresources");
process.exit(1);
} else {
readResultsFromFile(file);
}
//
// Read the file and parse the results
//
function readResultsFromFile(file) {
fs.readFile(file, 'utf8', function (err, data) {
if (err) {
console.log('Error: ' + err);
return;
}
var json = JSON.parse(data);
var results = parseResults(json);
printResults(results);
});
}
//
// Parses results from a JSON array
//
function parseResults(json) {
var pages = { };
for (var i = 0; i < json.length; i++) {
var result = json[i];
if (result.Type == 'http') {
var url = result.Url;
var duration = result.EndTime - result.StartTime;
if (!includeResources && result.Children) {
for (var j = 0; j < result.Children.length; j++) {
var resource = result.Children[j];
var relativeStartTime = resource.StartTime - result.StartTime;
if (relativeStartTime < duration) {
duration = relativeStartTime;
}
}
}
if (url) {
if (!pages[url]) {
pages[url] = { "over": 0, "under": 0 };
}
if (duration > threshold) {
pages[url].over++;
} else {
pages[url].under++;
}
}
}
}
return pages;
}
//
// Prints the aggregated results to the console
//
function printResults(results) {
for (var url in results) {
var over = results[url].over;
var under = results[url].under;
var total = over + under;
console.log(url + " : " + over + "/" + total + " exceeded " + threshold + " ms");
}
}