You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
blockly-app/tools/logserver.js

69 lines
1.5 KiB
JavaScript

'use strict';
const http = require('http')
const fs = require('fs')
const port = process.argv[2] || 4444
const logfile = process.argv[3] || '/tmp/logs.json'
const resHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Headers': 'content-type',
'Content-Type': 'text/plain',
}
const handleLog = (req, res) => {
let body = ''
req.on('data', chunk => {
body += chunk.toString()
})
req.on('end', () => {
try {
const msg = JSON.parse(body)
msg.logclient = {
ip: req.connection.remoteAddress,
ua: req.headers['user-agent']
}
fileStream.write(JSON.stringify(msg))
fileStream.write('\n')
res.writeHead(200, 'ok', resHeaders)
res.end('ok')
} catch (err) {
console.error(err)
res.writeHead(400)
res.end('invalid payload')
}
});
}
const requestHandler = (req, res) => {
console.log(req.method, req.url)
switch(req.method) {
case 'OPTIONS':
res.writeHead(200, 'ok', resHeaders)
return res.end('ok')
case 'POST':
if (req.url === '/log') return handleLog(req, res)
default:
res.writeHead(404)
return res.end('not found')
}
}
const fileStream = fs.createWriteStream(logfile, {
encoding: 'utf-8',
flags: 'a', // append
})
const server = http.createServer(requestHandler)
server.listen(port, err => {
if (err) {
console.error(err)
process.exit(1)
}
console.log('listening on', port)
console.log('writing to', logfile)
})