Dias(function(dias) { var serverId = { id: pkg.name, ver: pkg.version, node: dias.node, pid: process.pid } var paas = (dias.paas) ? 'paas/' + dias.paas + ' host/' + dias.host : undefined var ua = process.env.USERAGENT || dias.useragent || paas if (ua) serverId.ua = ua var logVariables = { server: serverId } var logLevel = (process.env.DEBUG) ? 'debug' : undefined logLevel = logLevel || process.env.LOG_LEVEL var logger = new Logger(logVariables, false, logLevel) var config = { dir: './tmp', logger: logger, } proxy(config) apiLatest.init({ packages: packages }) apiPackage.init({ packages: packages }) function extractPackageVersionFile(url) { var atPos = url.indexOf('@') var name = url.substr(0,atPos) var url = url.substr(atPos+1, url.length - atPos) var slash = url.indexOf('/') var version = url.substr(0,slash) var file = url.substr(slash+1, url.length - slash) return { name: name, version: version, file: file } } function respondWithData(req, res, data) { if (data.redirect) { logger.info(req.url + ', redirect: ' + data.redirect) res.set('Cache-Control', 'public, max-age=' + cacheDur) res.redirect(307, data.redirect) return } var headers = data.headers var stream = data.stream var body = data.body if (headers.type) res.set('Content-Type', headers.type) res.set('Cache-Control', 'public, max-age=' + cacheDur) if (stream) { stream.pipe(res) logger.debug(headers.code + ' ' + req.url + ', type: ' + headers.type + ', stream') return } else if (headers.code && headers.code >= 400) { res.status(headers.code).send(body) logger.info(headers.code + ' ' + req.url + ', type: ' + headers.type + ', length: ' + data.body.length) } else { res.send(body) logger.debug(headers.code + ' ' + req.url + ', type: ' + headers.type + ', length: ' + data.body.length) } } function packageMiddle(req, res, next) { if (req.url.indexOf(prefix) != 0) return next() // prefix must match req.url = req.url.replace(prefix, '') // remove prefix var cachedData = cache.get(req.url) if (cachedData) { logger.debug('LRU Cached: ' + req.url) return respondWithData(req, res, JSON.parse(cachedData)) } var parts = extractPackageVersionFile(req.url) var pack = packages[parts.name] if (!pack) { return respondWithData(req, res, { headers: { code: 404 }, body: '' }) } req.url = pack.url + '/' + parts.version + '/' + parts.file proxy(req, function proxyResults(err, data) { if (err) return next(err) respondWithData(req, res, data) if (!data.stream) { logger.debug('LRU Cache: ' + req.url) cache.set(req.url, JSON.stringify(data)) } }) } function logError(err, req, res, next) { logger.debug('logError:' + err) if ('string' == typeof err) { if (err.indexOf('Not Found') >= 0) { logger.info(err + ' logError') res.status(404).send({ code: 404, error: err.replace(': /', ': ') }) return } else { logger.warn(err) } } else { logger.error(err) if (err.stack) logger.error(err.stack) } res.status(500).send({ code: 500, error: err.message || err }) next(err) } process.on('uncaughtException', function (err) { logger.error('uncaughtException') logger.error(err) logger.error(err.stack) }) var app = middleServer({ logger: logger, pre: [ compression, middleServer.log, favicon, apiDoc, apiLatest, apiPackage ], post: [ packageMiddle ] }) app.use(logError) app.locals._log = logger })
Dias(function(dias) { var serverId = { id: pkg.name, ver: pkg.version, node: dias.node, pid: process.pid } var paas = (dias.paas) ? 'paas/' + dias.paas + ' host/' + dias.host : undefined var ua = process.env.USERAGENT || dias.useragent || paas if (ua) serverId.ua = ua var logVariables = { server: serverId } var logLevel = (process.env.DEBUG) ? 'debug' : undefined logLevel = logLevel || process.env.LOG_LEVEL var logger = new Logger(logVariables, false, logLevel) var config = { dir: './tmp', logger: logger, domain: domain, skipInit: true, // skip initial initialization in proxyPackage() below, as init will be done manually. avoids double loading packageDataUrl: packageList } proxyPackage(config) var packages = proxyPackage.init() apiLatest.init({ packages: packages }) apiPackage.init({ packages: packages }) function respondWithData(req, res, data) { if (data.redirect) { logger.info(req.url + ', redirect: ' + data.redirect) res.set('Cache-Control', 'public, max-age=' + cacheDur) res.redirect(307, data.redirect) return } var headers = data.headers var stream = data.stream var body = data.body if (headers.type) res.set('Content-Type', headers.type) res.set('Cache-Control', 'public, max-age=' + cacheDur) if (stream) { stream.pipe(res) logger.debug(headers.code + ' ' + req.url + ', type: ' + headers.type + ', stream') return } else if (headers.code && headers.code >= 400) { res.status(headers.code).send(body) logger.info(headers.code + ' ' + req.url + ', type: ' + headers.type + ', length: ' + data.body.length) } else { res.send(body) logger.debug(headers.code + ' ' + req.url + ', type: ' + headers.type + ', length: ' + data.body.length) } } function packageMiddle(req, res, next) { if (req.url.indexOf(prefix) != 0) return next() // prefix must match req.url = req.url.replace(prefix, '') // remove prefix var cachedData = cache.get(req.url) if (cachedData) { logger.debug('LRU Cached: ' + req.url) return respondWithData(req, res, JSON.parse(cachedData)) } proxyPackage(req, function proxyResults(err, data) { if (err) return next(err) respondWithData(req, res, data) if (!data.stream) { logger.debug('LRU Cache: ' + req.url) cache.set(req.url, JSON.stringify(data)) } }) } function logError(err, req, res, next) { logger.debug('logError:' + err) if ('string' == typeof err) { if (err.indexOf('Not Found') >= 0) { logger.info(err + ' logError') res.status(404).send({ code: 404, error: err.replace(': /', ': ') }) return } else { logger.warn(err) } } else { logger.error(err) if (err.stack) logger.error(err.stack) } res.status(500).send({ code: 500, error: err.message || err }) next(err) } process.on('uncaughtException', function (err) { logger.error('uncaughtException') logger.error(err) logger.error(err.stack) }) var app = middleServer({ logger: logger, pre: [ // compression, middleServer.log, favicon, apiDoc, apiLatest, apiPackage ], post: [ packageMiddle ] }) app.use(logError) app.locals._log = logger })