local array = require("database.array") local flatdb = require('database.flatdb') local date = require('date') local db = flatdb(ngx.var.document_root..'/database') local _M = {} local fields = { {sensor_id = 'ID сенсора'}, {name = 'Название емкости'}, {volume = 'Объем емкости'}, {date_start = 'Дата постановки на брожение'}, {raw_volume = 'Объем сока'}, {honey_weight = 'Начальная масса добавленного меда'}, {fructose_weight = 'Начальная масса добавленной фруктозы'}, {dextrose_weight = 'Начальная масса добавленной декстрозы'}, {polisugar_weight = 'Начальная масса добавленных полисахаров'}, {ph = 'PH'}, {sugar = 'Сахаристость'}, {date_end = 'Дата снятия с осадка'}, {date_restart = 'Дата постановки на повторное брожение'}, {date_reend = 'Дата повторного снятия с осадка'}, {date_blending = 'Дата купажа'}, {date_fructose_add = 'Дата добавления фруктозы'}, {add_fructose_weight = 'Масса добавляемой фруктозы'}, {date_dextrose_add = 'Дата добавления декстрозы'}, {add_dextrose_weight = 'Масса добавляемой декстрозы'}, {date_polisugar_add = 'Дата добавления полисахаров'}, {add_polisugar_weight = 'Масса добавляемых полисахаров'}, {comment = 'Комментарии'}, {archive = 'Архивная емкость'} } local count = 0 local results = {} for line in io.lines(ngx.var.document_root..'/tanks.csv') do if count>0 then local data = array.explode(line,',') results[count] = {notification = {typ = 'is-success', text = 'Брожение протекает нормально'}, status = 'is-primary'} for n,value in pairs(data) do local key,text = array.first(fields[n]) if key:find('date_') and value ~='' and pcall(date(),value) and date(value) < date() then results[count].notification = {typ = 'is-danger', text = text} end results[count][key] = {value = value, text = text, order = n} end if not db[results[count].sensor_id.value] then db[results[count].sensor_id.value] = { {temp = 0, date = date():fmt('%Y-%d-%m')}, {temp = 0, date = date():fmt('%Y-%d-%m')} } db:save() end results[count].stat = db[results[count].sensor_id.value] if (results[count]['date_blending'].value ~= '' and pcall(date(),results[count]['date_blending'].value) and date(results[count]['date_blending'].value) < date()) or (results[count]['date_end'].value ~= '' and date(results[count]['date_end'].value) < date()) then results[count].status = 'is-success' end end count = count + 1 end function _M.all() return results end function _M.active(start,ends) if not start then start = date(start) else start = date():addhours(-24) end if not ends then ends = date(ends) else ends = date() end local res = {} for key,result in pairs(results) do if result.archive and result.archive.value ~= '' and tonumber(result.archive.value) ~= 1 then local stat = {} for i,val in pairs(result.stat) do if date(val.date) >= start and date(val.date) <= ends then table.insert(stat,val) end end result.stat = stat table.insert(res,result) end end return res end function _M.archive() local res = {} for key,result in pairs(results) do if (result.archive and result.archive.value ~= '' and tonumber(result.archive.value) == 1) or (result['date_blending'].value ~= '' and pcall(date(),result['date_blending'].value) and date(result['date_blending'].value) < date()) then table.insert(res,result) end end return res end return _M