X-Git-Url: https://git.rvb.name/weathermon.git/blobdiff_plain/21464a29a442522e1f34fe885f7060f0fecf9a59..2f1fc2f95f9688b5ddb0252228b969eb37c54031:/bin/weathermon?ds=sidebyside diff --git a/bin/weathermon b/bin/weathermon index bd9ca80..c789bea 100755 --- a/bin/weathermon +++ b/bin/weathermon @@ -89,6 +89,14 @@ function printLog(str) end end +function unlock_db(file) + + print("Unlocking DB "..file) + os.execute("sqlite3 -readonly \""..file.."\" \".backup /tmp/weathermon.db\"") + os.execute("mv /tmp/weathermon.db \""..file.."\"") + +end + function submitValue(type,id,param,val) val = tonumber(val) @@ -103,15 +111,30 @@ function submitValue(type,id,param,val) local result,code = http.request (url) - if code ~= 200 and backlog_con then + if code ~= 200 and backlogdb then printLog("writing record to backlog...") - backlog_con:execute(string.format("INSERT INTO queue(time_stamp,sensor_id,sensor,param,value) VALUES (datetime('now','localtime'),'%s','%s','%s',%f)",id,type,param,val)) + local backlog_con = assert(env:connect(backlogdb)) + local n,err = backlog_con:execute(string.format("INSERT INTO queue(time_stamp,sensor_id,sensor,param,value) VALUES (datetime('now','localtime'),'%s','%s','%s',%f)",id,type,param,val)) + backlog_con:close() + + if err == "LuaSQL: database is locked" then + unlock_db(backlogdb); + end + end end if logdb then - log_con:execute(string.format("INSERT INTO log(time_stamp,sensor_id,sensor,param,value) VALUES (datetime('now','localtime'),'%s','%s','%s',%f)",id,type,param,val)) + print(logdb) + local log_con = assert(env:connect(logdb)) + local n,err = log_con:execute(string.format("INSERT INTO log(time_stamp,sensor_id,sensor,param,value) VALUES (datetime('now','localtime'),'%s','%s','%s',%f)",id,type,param,val)) + log_con:close() + + if err == "LuaSQL: database is locked" then + unlock_db(logdb); + end + end end @@ -333,17 +356,19 @@ if backlogdb then if not file_exists(backlogdb) then touch(backlogdb) end - backlog_con = assert(env:connect(backlogdb)) + local backlog_con = assert(env:connect(backlogdb)) backlog_con:execute("CREATE TABLE queue(time_stamp datetime,sensor_id varchar(16),sensor varchar(16),param varchar(16),value float)") + backlog_con:close() end if logdb then if not file_exists(logdb) then touch(logdb) end - log_con = assert(env:connect(logdb)) + local log_con = assert(env:connect(logdb)) log_con:execute("CREATE TABLE log(time_stamp datetime,sensor_id varchar(16),sensor varchar(16),param varchar(16),value float)") log_con:execute("CREATE INDEX log_idx ON log(sensor_id,sensor,param,time_stamp)") + log_con:close() end if web_url then @@ -385,7 +410,7 @@ while 1 do break end - pcall(function () +-- pcall(function () printLog("Received: "..line) if startswith(line,'{') then @@ -408,7 +433,6 @@ while 1 do io.close(f) end) end - - end) +-- end) end