UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

72 lines (55 loc) 2.39 kB
logger = require 'winston' config = require './config/config' config.caching = config.get('caching') Channel = require("./model/channels").Channel Keystore = require("./model/keystore").Keystore momentTZ = require 'moment-timezone' # function to log errors and return response exports.logAndSetResponse = (ctx, status, msg, logLevel) -> logger[logLevel] msg ctx.body = msg ctx.status = status cacheValueStore = {} refreshMillis = config.caching.refreshMillis getCachedValues = (store, callback) -> lastCheck = cacheValueStore["#{store}"]?.lastCheck if not config.caching.enabled or not lastCheck? or ((new Date)-lastCheck) > refreshMillis handler = (err, results) -> return callback err if err if config.caching.enabled if not lastCheck then cacheValueStore["#{store}"] = {} cacheValueStore["#{store}"].value = results cacheValueStore["#{store}"].lastCheck = new Date callback null, results #TODO make this more generic (had issues passing Channel.find as a param [higher order function]) if store is 'channels' Channel.find({}).sort(priority: 1).exec (err, channels) -> return handler err if err noPriorityChannels = [] sortedChannels = [] channels.forEach (channel) -> if not channel.priority? noPriorityChannels.push channel else sortedChannels.push channel handler null, sortedChannels.concat(noPriorityChannels) else if store is 'keystore' Keystore.findOne {}, handler else callback "Internal error: Invalid store #{store}" else callback null, cacheValueStore["#{store}"].value exports.getAllChannelsInPriorityOrder = (callback) -> getCachedValues 'channels', callback exports.getKeystore = (callback) -> getCachedValues 'keystore', callback # function to check if string match status code pattern exports.statusCodePatternMatch = (string, callback) -> /\dxx/.test string # returns an array with no duplicates exports.uniqArray = (arr) -> dict = {} dict[k] = k for k in arr return (v for k, v of dict) # thanks to https://coffeescript-cookbook.github.io/chapters/arrays/check-type-is-array exports.typeIsArray = Array.isArray || ( value ) -> return {}.toString.call( value ) is '[object Array]' # get the server timezone exports.serverTimezone = () -> return momentTZ.tz.guess()