Транзакционная работа с БД для избежания блокировок.
[weathermon.git] / bin / weathermon
index ade5bfaa3f4cd80a468daaea58cecd6b3e75558a..dbffa82d187ae22071ad84b144c48dbc1753ff28 100755 (executable)
@@ -105,13 +105,17 @@ function submitValue(type,id,param,val)
 
     if code ~= 200 and backlog_con then
       printLog("writing record to backlog...")
+      backlog_con:execute('BEGIN TRANSACTION')
       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:execute('COMMIT')
     end
 
   end
   
   if logdb then
+    log_con:execute('BEGIN TRANSACTION')
     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:execute('COMMIT')
   end
 
 end
@@ -157,9 +161,6 @@ function processJson(str)
   end
 
   if not (sensor_type==nil or sensor_id==nil or sensor_type=='' or sensor_id=='') then
-    if next(sensor)==nil then
-      sensor["command"]="alarm"
-    end
     local record = {}
     for k,v in pairs(sensor) do
       storeRecord(sensor_id,sensor_type,k,v)
@@ -248,6 +249,9 @@ function processLine(str)
                 return '{'..name..'}'
               end      
             end)
+          if not mqtt_client:socket() then
+            mqtt_client:reconnect()
+          end  
           mqtt_client:publish(mqtt_path,v,0,false)
           mqtt_client:loop()
         end  
@@ -289,6 +293,9 @@ function processLine(str)
               return '{'..name..'}'
             end      
           end)
+        if not mqtt_client:socket() then
+          mqtt_client:reconnect()
+        end  
         mqtt_client:publish(mqtt_path,msg_body,0,false)
         mqtt_client:loop()
       end