forked from ManageIQ/manageiq
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxmldata_helper.rb
72 lines (61 loc) · 1.56 KB
/
xmldata_helper.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
require 'xml/xml_utils'
class XmlData < ActiveRecord::Base
def self.emsinventory(emsId, data)
doc = REXML::Document.new(data)
_log.info "request received from ems id: #{emsId}"
Storage.save_emsinventory(emsId, Xml2Array.getNodeDetails(doc, "Datastores"))
Host.save_ems_inventory(emsId, Xml2Array.getNodeDetails(doc, "HostSystems"))
end
def self.emsevents(emsId, data)
_log.info "request received from ems id: #{emsId}"
handler = EventXmlHandler.new
Document.parse_stream(data, handler)
$log.debug handler.result.inspect
handler.result.each { |event| eval "VmwareEmsEvent.#{event[:type]}(event)" }
end
end
# Generic event processor class
require 'rexml/document'
require 'rexml/streamlistener'
class EventXmlHandler
include REXML
include StreamListener
def initialize
@tags = []
@result = []
@event = {}
@host = {}
@vm = {}
end
attr_reader :result
def tag_start(name, _attrs)
@tags.push name
end
def tag_end(name)
@tags.pop
case name
when "emsEvents"
when "event"
@result.push(@event)
@event = {}
when "host", "srcHost", "destHost"
@event[name.to_sym] = @host
@host = {}
when "vm", "srcVm", "destVm"
@event[name.to_sym] = @vm
@vm = {}
end
end
def text(value)
return if value.strip.blank?
obj, name = @tags.last(2)
case obj
when "event"
@event[name.to_sym] = value
when "host", "srcHost", "destHost"
@host[name.to_sym] = value
when "vm", "srcVm", "destVm"
@vm[name.to_sym] = value
end
end
end