source: community/mandrou/script_autoadd_screens.rb @ 226

Revision 226, 3.4 KB checked in by eddriks, 20 months ago (diff)
Line 
1#!/usr/bin/ruby
2
3# Generate all screen for all host of zabbix DB ( with all graph owned by the hosts )
4# Written by Py MIMAULT <iMandrou@gmail.com>
5# personal site : http://mandrou.fr
6# company site oooo OVEA : www.oveaconnect.me
7
8require 'rexml/document'
9require "mysql"
10
11include REXML
12
13
14#Catch cli argument
15$mysql_host = ARGV[0]
16$mysql_user = ARGV[1]
17$mysql_passwd = ARGV[2]
18
19#Global variables
20$doc
21$screenitems
22$screen
23$screens
24$nbr
25$nbr_rows
26
27#Function
28def debut_xml()
29        $doc = Document.new
30        $screens = Element.new("screens")
31        $doc.elements << $screens
32end 
33 
34def boucle_xml_screen(hn) 
35        $screen = Element.new("screen")   
36        name = Element.new("name")
37                name.text = "#{hn}"
38        hsize = Element.new("hsize")
39                hsize.text = "1"
40        vsize = Element.new("vsize")
41                vsize.text = $nbr_rows
42 
43        $screen.elements << name
44        $screen.elements << hsize
45        $screen.elements << vsize
46       
47        $screens.elements << $screen   
48       
49        $screenitems = Element.new("screenitems")
50        $screen.elements << $screenitems
51end 
52   
53def boucle_xml_item(hn,y,gr_name)
54        screenitem = Element.new("screenitem")
55        screenitem.add_element("resourcetype")
56                screenitem.elements["resourcetype"].text = "0"
57        screenitem.add_element("width")
58                screenitem.elements["width"].text = "500"
59        screenitem.add_element("height")
60                screenitem.elements["height"].text = "100"
61        screenitem.add_element("x")
62                screenitem.elements["x"].text = "0"
63        screenitem.add_element("y")
64                screenitem.elements["y"].text= "#{y}"
65        screenitem.add_element("colspan")
66                screenitem.elements["colspan"].text = "0"
67        screenitem.add_element("rowspan")
68                screenitem.elements["rowspan"].text = "0"
69        screenitem.add_element("elements")
70                screenitem.elements["elements"].text = "0"
71        screenitem.add_element("valign")
72                screenitem.elements["valign"].text = "0"
73        screenitem.add_element("halign")
74                screenitem.elements["halign"].text = "0"
75        screenitem.add_element("style")
76                screenitem.elements["style"].text = "0"
77        screenitem.add_element("dynamic")
78                screenitem.elements["dynamic"].text = "0"
79       
80        resourceid = Element.new("resourceid")
81        resourceid.add_element("host")
82                resourceid.elements["host"].text ="#{hn}"
83        resourceid.add_element("name")
84                resourceid.elements["name"].text = "#{gr_name}"
85       
86        screenitem.elements << resourceid
87        $screenitems.elements << screenitem
88end
89
90
91
92def get_graph_for_host(hostid)
93        graphs = $my.query("SELECT DISTINCT g.name FROM hosts h, graphs g, graphs_items gi, items i WHERE h.hostid = i.hostid AND gi.graphid = g.graphid AND gi.itemid = i.itemid AND h.status = 0 AND h.hostid = #{hostid} order by h.host ASC;")
94       
95        $graphs_row = Array.new
96        while row = graphs.fetch_row do
97                $graphs_row << row[0]
98        end
99        $nbr_rows = graphs.num_rows
100        return $graphs_row
101end
102
103#-- MAIN --
104if ARGV.length == 3 # if all three arguments are here.
105        $my = Mysql::new($mysql_host, $mysql_user,$mysql_passwd, "zabbix")
106
107        hosts = $my.query("SELECT DISTINCT h.hostid,h.host FROM hosts h, graphs g, graphs_items gi, items i WHERE h.hostid = i.hostid AND gi.graphid = g.graphid AND gi.itemid = i.itemid AND h.status = 0 AND h.hostid = i.hostid order by h.host ASC;")
108
109       
110
111#XML Generation
112        debut_xml()
113        while row = hosts.fetch_row do
114                hnid = row[0]
115                hn = row[1]
116                boucle_xml_screen(hn)
117                y=0
118                get_graph_for_host(hnid) 
119                for gr in $graphs_row
120                        boucle_xml_item(hn,y,gr)
121                        y=y+1   
122                end
123        end 
124
125#XML File creation
126        File::new("screens_to_import.xml", "w+")
127        xml_file = File.open("screens_to_import.xml", "w")
128        $doc.write(xml_file,-1)
129else
130        #error message
131        puts "not enougth argument : \n host - user - passwd"
132end
133
134
135
136
Note: See TracBrowser for help on using the repository browser.