UNPKG

epiquery2

Version:

run templated queries from the http's using learnings from 1

72 lines (60 loc) 2.43 kB
fs = require 'fs' _ = require 'underscore' path = require 'path' log = require 'simplog' config = require './config.coffee' events = require 'events' buffer = require './util/buffer.coffee' DRIVERS={} QUERY_EXEC_TIME_STATS={} QUERIES_EXECUTED={} loadDrivers = (driverPath) -> log.info "loading drivers from %s", driverPath for file in fs.readdirSync(driverPath) # ignore hidden files continue if file[0] is '.' log.debug "loading driver from #{file}" driverModule = require path.join(driverPath, file) if driverModule.DriverClass driverName = file.replace(/\.coffee$/,'').replace(/\.js/,'') DRIVERS[driverName] = class: driverModule.DriverClass module: driverModule name: driverName log.info "driver '#{driverName}' loaded" else log.error "Unable to find execute in module #{file}" selectDriver = (connectionConfig) -> DRIVERS[connectionConfig.driver] init = () -> # load out-of-the-box drivers loadDrivers(path.join(__dirname, 'drivers')) # load any additional drivers indicated by configuration config.driverDirectory and loadDrivers(config.driverDirectory) trackExecutionTime = (templateName, executionTime) -> if QUERY_EXEC_TIME_STATS[templateName] == undefined QUERY_EXEC_TIME_STATS[templateName] = new buffer.CircularBuffer(25) QUERY_EXEC_TIME_STATS[templateName].store(executionTime) trackInflightQuery = (templateName) -> if not QUERIES_EXECUTED[templateName] QUERIES_EXECUTED[templateName] = 0 QUERIES_EXECUTED[templateName]++ removeInflightQuery = (templateName) -> if QUERIES_EXECUTED[templateName] QUERIES_EXECUTED[templateName] = QUERIES_EXECUTED[templateName] - 1 getInflightQueries = () -> inflightQueries = {} _.each QUERIES_EXECUTED, (v, k, l) -> inflightQueries[k] = v if v > 0 return inflightQueries module.exports.init = init module.exports.loadDrivers = loadDrivers module.exports.selectDriver = selectDriver module.exports.drivers = DRIVERS module.exports.QueryStats = {buffer: new buffer.CircularBuffer(25)} module.exports.storeQueryExecutionTime = trackExecutionTime module.exports.getQueryExecutionTimes = QUERY_EXEC_TIME_STATS module.exports.trackInflightQuery = trackInflightQuery module.exports.removeInflightQuery = removeInflightQuery module.exports.getInflightQueries = getInflightQueries module.exports.events = new events.EventEmitter()