blob: 0f983c77274629b691f7220760f89761d64abfd3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
const express = require('express');
const bodyParser = require('body-parser');
const fs = require('fs');
const path = require('path');
const logDirectory = path.resolve(__dirname, '../logs');
const logPath = path.resolve(logDirectory, 'logs_' + (new Date()).getTime() + '.json');
try {
fs.lstatSync(logDirectory);
} catch (e) {
fs.mkdirSync(logDirectory); // Create directory if it doesn't exist
}
const wStream = fs.createWriteStream(logPath);
wStream.on('open', function () {
wStream.write('[');
});
let firstLog = true;
const app = express();
app.set('port', process.env.PORT || 8000);
app.use(function (req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.sendStatus(200);
}
else {
next();
}
});
app.use(bodyParser.urlencoded({extended: true, limit: '100mb'}));
app.use(bodyParser.json({limit: '100mb'}));
app.use(bodyParser.text())
app.use('/build', express.static(path.join(__dirname, '/../build')));
app.use('/', express.static(__dirname));
app.set('view engine', 'jade');
app.use('/', express.static(__dirname))
app.get('/', function (req, res) {
res.sendFile('index.html', { root: __dirname });
});
app.post('/', function (req, res) {
const body = typeof req.body === "string" ? JSON.parse(req.body) : req.body
console.log(body)
let delimiter = ',\n\t';
if (firstLog) {
wStream.write('\n\t');
firstLog = false;
} else {
wStream.write(delimiter);
}
const logLength = req.body.length - 1;
body.forEach(function (log, i) {
if (i === logLength) {
delimiter = '';
}
wStream.write(JSON.stringify(log) + delimiter);
});
res.sendStatus(200);
});
app.listen(app.get('port'), function () {
console.log('UserAle Local running on port', app.get('port'));
});
function closeLogServer () {
wStream.end('\n]');
process.exit();
}
process.on('SIGTERM', function () { closeLogServer(); });
process.on('SIGINT', function () { closeLogServer(); });