server.close((e: any) => { if (e) { logger.error(e); process.exit(1); } logger.warn(`Server stopped (${signal}).`); process.exit(); });
export function log(msg: any) { const infoLog = new (winston.Logger)({ transports: [ new (winston.transports.Console)({ colorize: true, level: 'info' }) ] }); infoLog.info(msg); };
export function errorLog(msg: any) { const errorLog = new (winston.Logger)({ transports: [ new (winston.transports.Console)({ colorize: true, level: 'error' }) ] }); errorLog.error(msg); }
const shutdown = (signal: string) => { logger.verbose('Server is shutting down...'); db.close(); logger.verbose('Database connection closed...'); server.close((e: any) => { if (e) { logger.error(e); process.exit(1); } logger.warn(`Server stopped (${signal}).`); process.exit(); }); };
/** * Functions for retrieving data from DB */ // get all items in the run number given a hash // if following is true, get only future predictions from the timestamp async function getAllOfRunNumber(hash, following) { // calculate a range of values. run numbers are per day, // so this gets us a list of all other predictions given the run number and a timestamp let unixTime = Number(hash.prdt) * 1000 let min = new Date(unixTime) min.setHours(0, 0, 0) let max = new Date(unixTime) // have to set this again here to get us another object to operate on max.setHours(0, 0, 0) max.setDate(max.getDate() + 1) // only get the following predictions if (following) { min = new Date(unixTime) } var params = { TableName : 'cta-trains', KeyConditionExpression: 'rn = :rn and prdt BETWEEN :min AND :max', ExpressionAttributeValues: { ':min': min.getTime() / 1000, ':max': max.getTime() / 1000, ':rn': Number(hash.rn) } }; try { let query = await dynamo.queryAsync(params) return query.Items } catch (error) { logger.warning(error) } };
process.on('exit', () => { logger.info('Hello stopping'); if(server !== undefined) { server.close(); } });
export function saveErrorLogFile(err, req, res, next) { if(!fs.existsSync('logs')){ fs.mkdirSync('logs'); } if(!fs.existsSync('logs/error')){ fs.mkdirSync('logs/error'); } if(err.status >= 400) { let meta: any = { ip: req.headers['x-forwarded-for'] || req.connection.remoteAddress, req: {}, res: {} }; meta.req.url = req.originalUrl || req.url; meta.req.method = req.method; meta.req.httpVersion = req.httpVersion; meta.req.query = req.query || ''; meta.req.params = req.params || ''; meta.req.body = req.body || ''; meta.req['accept-language'] = req.headers['accept-language']; meta.req['accept-language'] = req.headers['user-agent']; meta.responseTime = res.responseTime; meta.res.statusCode = res.statusCode; meta.error = err; errorFileLog.log('error', '', meta); } next(err); }
export function info(args:Array) { var text = ''; for (var i = 0; i < args.length; i++) { var obj = args[i]; text += colors.magenta(obj); } logger2.info(text); }
const init = () => { let quipLevels = { levels: { error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 }, colors: { error: 'red', warn: 'yellow', info: 'green', verbose: 'blue', debug: 'purple', silly: 'pink' } }; let quipTransports = [ new (winston.transports.Console) ({ colorize: true, level: (process.env.NODE_ENV == 'development') ? 'debug' : 'info', handleExceptions: true, json: false }), new (winston.transports.File) ({ colorize: false, filename: 'log/quip.log', handleExceptions: true, json: true, level: 'warn', maxsize: 5242880, maxFiles: 5 }) ]; logger = new (winston.Logger) ({ levels: quipLevels.levels, transports: quipTransports }); logger.debug("Initiated logging."); };
setVerbosity (v: LoggerOptions["level"]) { this.logger.configure({ level: v, transports: [new winston.transports.Console()], format: winston.format.combine( winston.format.colorize({ all: true }), logFmt ) }) }