This repository was archived by the owner on Dec 29, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 193
Expand file tree
/
Copy pathsave-trace.js
More file actions
executable file
·61 lines (51 loc) · 1.47 KB
/
Copy pathsave-trace.js
File metadata and controls
executable file
·61 lines (51 loc) · 1.47 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
#!/usr/bin/env node
fs = require('fs');
http = require('http');
os = require('os');
optimist = require('optimist');
main(optimist.default('port', 8000).argv);
function main(argv) {
hostname = os.hostname();
port = argv.port;
console.log('Run this command from your JavaScript console:');
console.log('> wtf.trace.snapshot("http://%s:%s")', hostname, port);
http.createServer(requestListener).listen(port, hostname);
}
function requestListener(req, res) {
if (req.method == 'OPTIONS')
handleOptions(req, res);
else if (req.method == 'POST')
handlePost(req, res);
else
handleDefault(req, res);
}
function handleDefault(req, res) {
res.statusCode = 404;
res.end();
}
// Save the posted trace file to local directory.
function handlePost(req, res) {
var length = parseInt(req.headers['content-length'], 10);
if (length <= 0) {
res.end();
return;
}
var filename = req.headers['x-filename'] || 'save-trace.wtf-trace';
var writable = fs.createWriteStream(filename, {flags: 'w'});
req.on('data', function(chunk) {
writable.write(chunk);
});
req.on('end', function() {
console.log(filename);
writable.end();
res.end();
});
}
// Echo CORS headers.
function handleOptions(req, res) {
var acrh = req.headers['access-control-request-headers'];
var origin = req.headers['origin'];
if (acrh) res.setHeader('Access-Control-Allow-Headers', acrh);
if (origin) res.setHeader('Access-Control-Allow-Origin', origin);
res.end();
}