Files
DataLogger-Generic/www/functions_MySQL.coffee
2016-04-26 13:30:30 -05:00

419 lines
15 KiB
CoffeeScript

# 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, guarantee_sec, change_threshold, data_type) VALUES (?, ?, ?, ?, ?, ?, 5, ?, ?, ?)'
db.query query, [req.body.tag, req.body.units, req.body.minExpected, req.body.maxExpected, req.body.name, req.body.description, req.body.guarantee_sec, req.body.change_threshold, req.body.data_type], (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) ->
console.log(req.body)
req.app.locals.pool.getConnection (err, db) ->
query = 'UPDATE tags set tag = ?, units = ?, minExpected = ?, maxExpected = ?, name = ?, description = ?, guarantee_sec = ?, change_threshold = ?, data_type = ? 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.guarantee_sec, req.body.change_threshold, req.body.data_type, 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
exports.clearValues = (req, res) ->
if req.params.id
req.app.locals.pool.getConnection (err, db) ->
query = 'DELETE FROM tag_vals WHERE tagID = ?;';
db.query query, [req.params.id], (err) ->
db.release()
if err
res.json
status: 'error'
message: err
console.log err
else
res.json
status: 'OK'
else
req.app.locals.pool.getConnection (err, db) ->
query = 'DELETE FROM tag_vals WHERE id >= 0;';
db.query query, (err) ->
db.release()
if err
res.json
status: 'error'
message: err
console.log err
else
res.json
status: 'OK'
undefined