-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
107 lines (94 loc) · 2.57 KB
/
index.js
File metadata and controls
107 lines (94 loc) · 2.57 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
var async = require("async");
var fs = require('fs');
var request = require('request');
const uuidv4 = require('uuid/v4');
const { URL } = require('url');
var data = {};
var urls = [];
var getUrlsArray = function(){
let urlsFile = './urls.json';
if(process.argv[2]!=undefined){
urlsFile = process.argv[2];
}
if (!fs.existsSync(urlsFile)) {
console.error(urlsFile+' could not be found!');
process.exit(1);
}
let rawdata = fs.readFileSync(urlsFile);
let urlsData = JSON.parse(rawdata);
var m = 1;
if(process.argv[3]!=undefined && parseInt(process.argv[3])>0){
m = parseInt(process.argv[3]);
}
var urls_ = [];
for(var i=0;i<m;i++){
urls_ = urls_.concat(urlsData);
}
return urls_;
};
var startTest = async function(){
urls = getUrlsArray();
async.forEachOf(urls, (value, key, callback) => {
var uuid = uuidv4();
data[uuid]={
url:value,
isDone:false,
startedAt:(new Date).getTime(),
finishedAt:null,
duration:-1,
uuid:uuid
}
request.get(value, function(err, res, body){
if (err) return callback(err);
data[uuid].finishedAt = (new Date).getTime();
data[uuid].contentType = res.headers['content-type'];
data[uuid].contentLength = res.headers['content-length'];
data[uuid].isDone = true;
data[uuid].duration = ((data[uuid].finishedAt-data[uuid].startedAt)/1000).toFixed(2);
});
}, err => {
if (err) console.log(err.message);
});
justWait();
};
var startedAt = (new Date).getTime();
//wait until all urls downloaded
var justWait = function(){
var t = 0;
for(var i in data){
if(data[i].isDone){
t++;
}
}
var totalTime = (((new Date).getTime()-startedAt)/1000);
if(t<urls.length){
process.stdout.write("\t"+t.toString()+" of "+urls.length.toString()+"\r");
setTimeout(justWait, 10);
}else{
showSummary();
process.exit();
}
};
var showSummary = function(){
console.log("------ SUMMARY -------");
console.log("host","protocol","path","duration");
for(var i in data){
var url = new URL(data[i].url);
console.log(url.host,url.protocol,url.pathname,data[i].duration);
}
console.log("total duration",(((new Date).getTime()-startedAt)/1000).toFixed(3));
};
const readline = require('readline');
readline.emitKeypressEvents(process.stdin);
process.stdin.setRawMode(true);
process.stdin.on('keypress', (str, key) => {
if (key.ctrl && key.name === 'c') {
process.exit();
} else {
if (key.name === 's') {
showSummary();
}
}
});
console.log('Press "s" to see summary report...');
startTest();