Skip to content

Commit ce28b2c

Browse files
committed
Sub event type parser
1 parent cab2011 commit ce28b2c

File tree

1 file changed

+82
-10
lines changed

1 file changed

+82
-10
lines changed

workers/event_catcher/event_catcher.rb

Lines changed: 82 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -115,18 +115,92 @@ def wait_for_updates(vim, &block)
115115

116116
def parse_event(event)
117117
event_type = event.class.wsdl_name
118+
is_task = event_type == "TaskEvent"
119+
120+
if is_task
121+
sub_event_type = event.info&.name
122+
123+
# Handle special cases
124+
case sub_event_type
125+
when nil
126+
# Handle cases wehre event name is missing
127+
sub_event_type = "PowerOnVM_Task" if event.fullFormattedMessage.to_s.downcase == "task: power on virtual machine"
128+
sub_event_type ||= "DrsMigrateVM_Task" if event.info&.descriptionId == "Drm.ExecuteVMotionLRO"
129+
if sub_event_type.nil?
130+
puts "Event Type cannot be determined for TaskEvent. Using generic eventType [TaskEvent] instead"
131+
sub_event_type = "TaskEvent"
132+
end
133+
when "Rename_Task", "Destroy_Task"
134+
# Handle case where event name is overloaded
135+
sub_event_name = event.info.descriptionId.split(".").first
136+
sub_event_name = "VM" if sub_event_name == "VirtualMachine"
137+
sub_event_name = "Cluster" if sub_event_name == "ClusterComputeResource"
138+
sub_event_type.gsub!(/_/, "#{sub_event_name}_")
139+
end
140+
141+
event_type = sub_event_type
142+
elsif event_type == "EventEx"
143+
sub_event_type = event.eventTypeId
144+
event_type = sub_event_type if sub_event_type.present?
145+
end
118146

119147
result = {
120148
:ems_id => ems_id,
121149
:event_type => event_type,
122150
:chain_id => event.chainId,
123-
:is_task => event_type == "TaskEvent",
151+
:is_task => is_task,
124152
:source => "VC",
125153
:message => event.fullFormattedMessage,
126154
:timestamp => event.createdTime,
127155
:full_data => event.props
128156
}
129157

158+
result[:username] = event.userName if event.userName.present?
159+
160+
# Get the vm information
161+
vm_key = "vm" if event.props.key?("vm")
162+
vm_key = "sourceVm" if event.props.key?("sourceVm")
163+
vm_key = "srcTemplate" if event.props.key?("srcTemplate")
164+
if vm_key
165+
vm_data = event.send(vm_key)
166+
167+
result[:vm_ems_ref] = vm_data&.vm if vm_data&.vm
168+
result[:vm_name] = CGI.unescape(vm_data&.name) if vm_data&.name
169+
result[:vm_location] = vm_data&.path if vm_data&.path
170+
result[:vm_uid_ems] = vm_data&.uuid if vm_data&.uuid
171+
172+
result
173+
end
174+
175+
# Get the dest vm information
176+
has_dest = false
177+
if %w[sourceVm srcTemplate].include?(vm_key)
178+
vm_data = event.vm
179+
if vm_data
180+
result[:dest_vm_ems_ref] = vm_data&.vm if vm_data&.vm
181+
result[:dest_vm_name] = CGI.unescape(vm_data&.name) if vm_data&.name
182+
result[:dest_vm_location] = vm_data&.path if vm_data&.path
183+
end
184+
185+
has_dest = true
186+
elsif event.props.key?("destName")
187+
result[:dest_vm_name] = event.destName
188+
has_dest = true
189+
end
190+
191+
if event.props.key?(:host)
192+
result[:host_name] = event.host.name
193+
result[:host_ems_ref] = event.host.host
194+
end
195+
196+
if has_dest
197+
host_data = event.props["destHost"] || event.props["host"]
198+
if host_data
199+
result[:dest_host_ems_ref] = host_data["host"]
200+
result[:dest_host_name] = host_data["name"]
201+
end
202+
end
203+
130204
result
131205
end
132206

@@ -142,15 +216,13 @@ def publish_events(events)
142216
end
143217

144218
def messaging_client
145-
@messaging_client ||= begin
146-
ManageIQ::Messaging::Client.open(
147-
:host => messaging_host,
148-
:port => messaging_port,
149-
:protocol => :Kafka,
150-
:encoding => "json",
151-
:client_ref => "vmware-event-catcher-#{ems_id}"
152-
)
153-
end
219+
@messaging_client ||= ManageIQ::Messaging::Client.open(
220+
:host => messaging_host,
221+
:port => messaging_port,
222+
:protocol => :Kafka,
223+
:encoding => "json",
224+
:client_ref => "vmware-event-catcher-#{ems_id}"
225+
)
154226
end
155227

156228
def notify_started

0 commit comments

Comments
 (0)