UNPKG

15.8 kBSource Map (JSON)View Raw
1{"version":3,"sources":["../src/DataAPI.js"],"names":["requireAll","require","context","heartbeatInterval","logger","routers","timestamp","format","formatter","options","timestampPart","levelPart","level","toUpperCase","tagPart","meta","tags","messagePart","message","setupDefaultLogger","transports","Console","DailyRotateFile","datePattern","filename","process","cwd","maxFiles","Logger","setupLogger","logLevel","logglySubdomain","logglyToken","DEBUG","json","hostname","environment","push","Loggly","name","toLowerCase","subdomain","token","configure","DataAPI","constructor","expressApp","initialize","opts","bind","log","lvl","msg","mongoUrl","substring","port","start","callback","database","connect","connectErr","connectedDB","dirname","__dirname","filter","map","path","lastIndexOf","length","Object","keys","forEach","router","default","app","expressServer","listen","listenErr","stop","close"],"mappings":"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","file":"DataAPI.js","sourcesContent":["/* eslint-disable import/newline-after-import, import/first */\n\n//region 1. Platform Libraries\nimport express from 'express';\nimport moment from 'moment';\nimport MongoClient from 'mongodb';\nimport os from 'os';\nconst requireAll = require('require-all');\nimport winston from 'winston';\nimport 'winston-daily-rotate-file';\nimport 'winston-loggly-bulk';\n//endregion\n\n//region 2. Project Libraries\nimport LogLevel from './LogLevel';\n//endregion\n\n//region K. Constants\nconst context = {\n heartbeatInterval: null,\n logger: null,\n routers: null,\n};\n//endregion\n\n//region B. Business Helpers\nconst timestamp = () => moment().format('YYYY-MM-DDTHH:mm:ss.SSSZ');\n\nconst formatter = (options) => {\n const timestampPart = `${options.timestamp()} `;\n const levelPart = `${options.level.toUpperCase()}: `;\n const tagPart = options.meta.tags ? `${options.meta.tags}> ` : '';\n const messagePart = options.message || '';\n return `${timestampPart}${levelPart}${tagPart}${messagePart}`;\n};\n\ncontext.logger = (function setupDefaultLogger() {\n const transports = [\n new winston.transports.Console({\n formatter,\n timestamp,\n }),\n new winston.transports.DailyRotateFile({\n datePattern: '.yyyy-MM-dd',\n filename: `${process.cwd()}/data-api.log`,\n formatter,\n maxFiles: 7,\n timestamp,\n }),\n ];\n return new winston.Logger({ transports });\n}());\n\nfunction setupLogger(logLevel, logglySubdomain, logglyToken) {\n this.logLevel = LogLevel[logLevel && logLevel.toUpperCase()] || LogLevel.DEBUG;\n const transports = [\n new winston.transports.Console({\n formatter,\n timestamp,\n }),\n new winston.transports.DailyRotateFile({\n datePattern: '.yyyy-MM-dd',\n filename: `${process.cwd()}/data-api.log`,\n formatter,\n json: false,\n maxFiles: 7,\n timestamp,\n }),\n ];\n if (logglySubdomain && logglySubdomain !== 'null'\n && logglyToken && logglyToken !== 'null') {\n const tags = [\n 'data-api',\n os.hostname,\n ];\n if (this.environment) {\n tags.push(this.environment);\n }\n transports.push(new winston.transports.Loggly({\n formatter,\n json: true,\n level: this.logLevel.name.toLowerCase(),\n subdomain: logglySubdomain,\n tags,\n timestamp,\n token: logglyToken,\n }));\n }\n context.logger.configure({\n level: this.logLevel.name.toLowerCase(),\n transports,\n });\n}\n//endregion\n\n//region E. Exports\n/**\n * Class representing a Data-API\n */\nexport default class DataAPI {\n constructor() {\n this.expressApp = express();\n }\n\n /**\n * Initialize Data-API with options\n * @param {object} [options] Options\n * @param {string} [options.environment] Environment Tag\n * @param {number} [options.heartbeatInterval=10] Heartbeat Interval (s)\n * @param {string} [options.logglySubdomain] Loggly Subdomain\n * @param {string} [options.logglyToken] Loggly Token\n * @param {string} [options.logLevel=DEBUG] Log Level\n * @param {string} [options.mongoUrl=mongodb://localhost] MongoDB Connection URL\n * @param {number} [options.port=15925] Data-API Port\n */\n initialize(options) {\n const opts = options || {};\n this.environment = opts.environment || '';\n setupLogger.bind(this)(opts.logLevel, opts.logglySubdomain, opts.logglyToken);\n const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'initialize' });\n log('debug', 'Initializing....');\n if (opts.heartbeatInterval === 0) {\n log('error', `Invalid Heartbeat Interval ${opts.heartbeatInterval}`);\n return false;\n }\n if (opts.mongoUrl && opts.mongoUrl.substring(0, 10) !== 'mongodb://') {\n log('error', `Invalid MongoDB Connection URL ${opts.mongoUrl}`);\n return false;\n }\n if (opts.port < 1 || opts.port > 65535) {\n log('error', `Port Number Range Exceeded ${opts.port}`);\n return false;\n }\n context.heartbeatInterval = opts.heartbeatInterval || 10;\n this.mongoUrl = opts.mongoUrl || 'mongodb://localhost';\n this.port = opts.port || 15925;\n log('info', 'Initialized');\n return true;\n }\n\n start(callback) {\n const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'start' });\n log('debug', 'Checking existing database connection....');\n if (this.database) {\n log('error', 'Data API has already been started. Start aborted.');\n return false;\n }\n log('debug', 'Connecting to database....');\n MongoClient.connect(this.mongoUrl, (connectErr, connectedDB) => {\n if (connectErr) {\n log('error', connectErr.message);\n return;\n }\n log('info', 'Database Connected');\n this.database = connectedDB;\n log('debug', 'Mounting routers....');\n context.routers = requireAll({\n dirname: `${__dirname}/routers`,\n filter: /^((?!spec).)+\\.js$/,\n map(name, path) {\n const filename = path.substring(\n path.lastIndexOf('/') + 1,\n path.lastIndexOf('.'),\n );\n return name.length === 1 ? filename : name;\n },\n });\n log('debug', Object.keys(context.routers));\n Object.keys(context.routers).forEach((router) => {\n context.routers[router].default({\n app: this.expressApp,\n database: this.database,\n logger: context.logger,\n });\n });\n log('info', 'Routers Mounted');\n log('debug', 'Launching Data API....');\n this.expressServer = this.expressApp.listen(this.port, (listenErr) => {\n if (listenErr) {\n log('error', listenErr.message);\n return;\n }\n log('info', `Data API listening on port ${this.port}`);\n if (callback) {\n callback();\n }\n });\n });\n return true;\n }\n\n stop(callback) {\n const log = (lvl, msg) => context.logger.log(lvl, msg, { tags: 'stop' });\n log('debug', 'Stopping Data API....');\n if (!this.expressServer) {\n log('info', 'Express Server Already Closed');\n if (callback) {\n callback();\n }\n return;\n }\n this.expressServer.close(() => {\n log('info', 'Express Server Closed');\n this.expressServer = null;\n if (!this.database) {\n if (callback) {\n callback();\n }\n return;\n }\n this.database.close(() => {\n log('info', 'Database Closed');\n this.database = null;\n if (callback) {\n callback();\n }\n });\n });\n }\n\n static get heartbeatInterval() {\n return context.heartbeatInterval;\n }\n}\n\nexport const logger = context.logger;\n//endregion\n"]}
\No newline at end of file