From b72aca978975361555697574e22fe32f4e5cddcd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pavel=20Czern=C3=BD?= Date: Mon, 22 Nov 2021 20:05:13 +0100 Subject: [PATCH] B #5581: Fix monitoring sync_state (#1562) (cherry picked from commit 4ac61ef922a7c465eccde3b4b6426633d98425de) --- src/im_mad/remotes/lib/probe_db.rb | 41 +++++++++--------------------- 1 file changed, 12 insertions(+), 29 deletions(-) diff --git a/src/im_mad/remotes/lib/probe_db.rb b/src/im_mad/remotes/lib/probe_db.rb index b40e488795..2434f0618f 100644 --- a/src/im_mad/remotes/lib/probe_db.rb +++ b/src/im_mad/remotes/lib/probe_db.rb @@ -104,12 +104,18 @@ class VirtualMachineDB last = @db.execute("SELECT MAX(timestamp) from #{@dataset}").flatten![0] last ||= @mtime.to_i - return sync_status(@host, @host_id) if last == 0 || time > (last + @conf[:sync].to_i) + sync_state = last == 0 || time > (last + @conf[:sync].to_i) status_str = '' monitor_ids = [] - vms = DomainList.state_info(@host, @host_id) + if sync_state then + status_str = "SYNC_STATE=yes\nMISSING_STATE=#{@conf[:missing_state]}\n" + + @db.execute("REPLACE INTO #{@settings} VALUES ('LAST_SYNC', #{time.to_s})") + end + + vms = DomainList.state_info(@host, @host_id) # ---------------------------------------------------------------------- # report state changes in vms @@ -142,6 +148,7 @@ class VirtualMachineDB ) status_str << vm_to_status(vm) + next end @@ -156,7 +163,7 @@ class VirtualMachineDB "#{filter}" ) - if vm_db[col_name_to_idx('state')] != vm[:state] + if sync_state || vm_db[col_name_to_idx('state')] != vm[:state] status_str << vm_to_status(vm) end end @@ -181,6 +188,8 @@ class VirtualMachineDB @db.execute("DELETE FROM #{@dataset} WHERE uuid = \"#{uuid}\"") else + status_str << vm_db_to_status(vm_db) if sync_state + @db.execute( "UPDATE #{@dataset} SET " \ "timestamp = #{time}, " \ @@ -206,32 +215,6 @@ class VirtualMachineDB private - def sync_status(host, host_id) - time = Time.now.to_i - - @db.execute("DELETE FROM #{@dataset}") - - status_str = "SYNC_STATE=yes\nMISSING_STATE=#{@conf[:missing_state]}\n" - - DomainList.state_info(host, host_id).each do |uuid, vm| - @db.execute( - "INSERT INTO #{@dataset} VALUES (?, ?, ?, ?, ?, ?, ?, ?)", - [uuid, - vm[:id].to_i, - vm[:name], - vm[:deploy_id], - time, - 0, - vm[:state], - @conf[:hyperv]] - ) - - status_str << vm_to_status(vm) - end - - status_str - end - def vm_to_status(vm, state = vm[:state]) "VM = [ ID=\"#{vm[:id]}\", DEPLOY_ID=\"#{vm[:deploy_id]}\", " \ " STATE=\"#{state}\" ]\n"