# var dbFile = "/usr/db/data.db"; dbFile = '/mnt/usb/data.db' # var dbFile = '/Users/patrickjmcd/data.db'; dString_to_sqlite = (dString) -> ###* * Takes a date string in the form YYYYMMDD_HHmmSS and returns it in SQLite format (YYYY-MM-DD HH:mm:SS) * @param {String} dString * @return {String} sqliteString ### re = /(\d{4})(\d{2})(\d{2})_(\d{2})(\d{2})(\d{2})/ fd = re.exec(dString) if fd sqliteString = '' sqliteString.concat fd[1], '-', fd[2], '-', fd[3], ' ', fd[4], ':', fd[5], ':', fd[6] else null sqlite_to_dString = (sqliteDate) -> ###* * Takes a sqlite date string in the form YYYY-MM-DD HH:mm:SS and returns it in format YYYYMMDD_HHmmSS * @param {String} sqliteDate * @return {String} dString ### re = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/ fd = re.exec(sqliteDate) if fd dString = '' dString.concat fd[1], fd[2], fd[3], '_', fd[4], fd[5], fd[6] else null getAllTags = (pool, callback) -> pool.getConnection (err, db)-> query = 'SELECT * FROM tags WHERE deleted = 0' db.query query, (err, rows, fields) -> db.release() if err return callback(err, null) console.log err else return callback(null, rows) undefined exports.getAllTags = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT * FROM tags WHERE deleted = 0' db.query query, (err, rows, fields) -> if err res.json status: 'error' message: err console.log err else res.json status: 'OK' tags: rows undefined exports.createTag = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'INSERT INTO tags (tag, units, minExpected, maxExpected, name, description, class) VALUES (?, ?, ?, ?, ?, ?, 5)' db.query query, [req.body.tag, req.body.units, req.body.minExpected, req.body.maxExpected, req.body.name, req.body.description], (err, results) -> if err res.json status: 'error' message: err console.log err else res.json status: 'OK' undefined exports.getTag = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT * FROM tags WHERE id = ?' db.query query, [req.params.id], (err, rows) -> db.release() if err res.json status: 'error' message: err console.log err else res.json status: 'OK' tags: rows undefined exports.updateTag = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'UPDATE tags set tag = ?, units = ?, minExpected = ?, maxExpected = ?, name = ?, description = ? WHERE id = ?' db.query query, [req.body.tag, req.body.units, req.body.minExpected, req.body.maxExpected, req.body.name, req.body.description, req.body.id], (err, results) -> db.release() if err res.json status: 'error' message: err console.log err else res.json status: 'OK' undefined exports.deleteTag = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'UPDATE tags SET deleted = 1 WHERE id = ?' db.query query, [req.params.tag], (err, results) -> db.release() if err res.json status: 'error' message: err console.log err else res.json status: 'OK' undefined exports.seriesTagValues = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT * FROM tag_vals WHERE tagID = ? AND dateAdded >= DATE_SUB(NOW(), INTERVAL 1 HOUR)' db.query query, [parseInt(req.params.tag)], (err, rows) -> db.release() if err console.log err res.json status: 'error' message: err query: query else res.json status: 'OK' tag: req.params.tag vals: rows undefined exports.seriesTagValuesBetween = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT * FROM tag_vals WHERE tagID = ? AND dtime >= ? AND dtime <= ?' db.query query, [parseInt(req.params.tag), dString_to_sqlite(req.params.startDatetime), dString_to_sqlite(req.params.endDatetime)], (err, rows) -> db.release() if err console.log err res.json status: 'error' message: err query: query else res.json status: 'OK' tag: req.params.tag startDatetime: dString_to_sqlite(req.params.startDatetime) endDatetime: dString_to_sqlite(req.params.endDatetime) vals: rows undefined createCSVrow = (header, dataRow) -> i = header.indexOf(dataRow.name) csvRow = dataRow.id.toString() + ',' + dataRow.dtime + ',' if i >= 0 j = 2 while j < header.length if j == i csvRow = csvRow + dataRow.val.toString() + ',' else csvRow = csvRow + ',' j++ csvRow = csvRow.slice(0, -1) + '\u000d' return csvRow return exports.allDataCSV = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT v.id, t.name, v.val, v.dtime FROM tags t JOIN tag_vals v ON t.id = v.tagID' db.query query, (err, rows) -> db.release() if err console.log err res.json status: 'error' message: err query: query else getAllTags req.app.locals.pool, (err, tags) -> if err console.log err else csvString = '' da = [ 'id' 'DateAdded' ] tagVanityNames = tags.map((t) -> t.name ) h = da.concat(tagVanityNames) console.log h csvString = csvString + h.join(',') + '\u000d' i = 0 while i < rows.length csvString = csvString + createCSVrow(h, rows[i]) i++ res.set 'Content-Type', 'text/csv' res.set 'Content-Disposition', 'attachment;filename=tagdata.csv' res.send csvString undefined exports.seriesCSV = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT v.id, t.name, v.val, v.dateAdded FROM tags t JOIN tag_vals v ON t.id = v.tagID WHERE tagID = ? AND v.dateAdded > DATETIME(\'now\', \'-1 HOUR\')' db.query query, [parseInt(req.params.tag)], (err, rows) -> db.release() if err console.log err res.json status: 'error' message: err query: query else csvString = '' h = [ 'id' 'DateAdded' rows[0].vanityName ] csvString = csvString + h.join(',') + '\u000d' i = 0 while i < rows.length csvString = csvString + [ rows[i].id rows[i].dateAdded rows[i].val ].join(',') + '\u000d' i++ res.set 'Content-Type', 'text/csv' res.set 'Content-Disposition', 'attachment;filename=tagdata.csv' res.send csvString undefined exports.seriesCSVBetween = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT v.id, t.name, v.val, v.dtime FROM tags t JOIN tag_vals v ON t.id = v.tagID WHERE tagID = ? AND v.dtime >= ? AND v.dtime <= ?' db.query query, [parseInt(req.params.tag), dString_to_sqlite(req.params.startDatetime), dString_to_sqlite(req.params.endDatetime)], (err, rows) -> db.release() if err console.log err res.json status: 'error' message: err query: query else csvString = '' h = [ 'id' 'DateAdded' rows[0].name ] csvString = csvString + h.join(',') + '\u000d' i = 0 while i < rows.length csvString = csvString + [ rows[i].id rows[i].dtime rows[i].val ].join(',') + '\u000d' i++ res.set 'Content-Type', 'text/csv' res.set 'Content-Disposition', 'attachment;filename=tagdata.csv' res.send csvString undefined exports.latestValueSingleTag = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT * FROM tag_vals WHERE id = (SELECT MAX(id) FROM tag_vals WHERE tagID = ?)' db.query query, [req.params.tag], (err, rows) -> db.release() console.log rows if err res.json status: 'error' message: err console.log err else res.json status: 'OK' tag_val: rows[0] undefined exports.latestValueAllTags = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT v1.id as id, v1.dtime as dtime, t.id as t_id, t.name as name, t.tag as tag, v1.val as val, t.units as units, t.description as description, t.minExpected as minExpected, t.maxExpected as maxExpected FROM tag_vals v1 LEFT JOIN tags t ON t.id = v1.tagID WHERE v1.id = (SELECT v2.id FROM tag_vals v2 WHERE v2.tagID = v1.tagID ORDER BY v2.id DESC LIMIT 1)' db.query query, [req.params.id], (err, rows) -> db.release() if err res.json status: 'error' message: err console.log err else res.json status: 'OK' vals: rows undefined exports.checkLoggerStatus = (req, res) -> fs = require('fs') # var ps = require("ps-node"); running = require('is-running') fs.readFile '/root/tagserver.pid', (derr, ddata) -> if derr console.log 'Problem getting PID of tagserver' res.json status: 'error' message: 'Problem getting PID of tagserver' else res.json status: 'OK' running: running(ddata) return return exports.restartLogger = (req, res) -> exec = require('child_process').exec exec '/etc/init.d/loggers start', (error, stdout, stderr) -> if error res.json status: 'error' message: error else res.json status: 'OK' return return exports.getSetup = (req, res) -> req.app.locals.pool.getConnection (err, db) -> query = 'SELECT parameter, val, dateAdded FROM config GROUP BY parameter;' db.query query, [req.params.id], (err, rows) -> db.release() if err res.json status: 'error' message: err console.log err else res.json status: 'OK' config: rows undefined exports.updateSetup = (req, res) -> exec = require('child_process').exec req.app.locals.pool.getConnection (err, db) -> query = 'INSERT INTO config (parameter, val) VALUES (?, ?)'; db.query query, [req.body.parameter, req.body.val], (err) -> db.release() if err console.log runErr: err res.json status: 'error' message: err query: query else res.redirect '/#/setup' exec '/etc/init.d/loggers stop', (error, stdout, stderr) -> if error console.log status: 'error' message: error query: query setTimeout (-> exec '/etc/init.d/loggers start', (error, stdout, stderr) -> if error console.log status: 'error' message: error query: query ), 5000 undefined