| 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 | |
|---|
| 8 | require 'rexml/document' |
|---|
| 9 | require "mysql" |
|---|
| 10 | |
|---|
| 11 | include 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 |
|---|
| 28 | def debut_xml() |
|---|
| 29 | $doc = Document.new |
|---|
| 30 | $screens = Element.new("screens") |
|---|
| 31 | $doc.elements << $screens |
|---|
| 32 | end |
|---|
| 33 | |
|---|
| 34 | def 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 |
|---|
| 51 | end |
|---|
| 52 | |
|---|
| 53 | def 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 |
|---|
| 88 | end |
|---|
| 89 | |
|---|
| 90 | |
|---|
| 91 | |
|---|
| 92 | def 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 |
|---|
| 101 | end |
|---|
| 102 | |
|---|
| 103 | #-- MAIN -- |
|---|
| 104 | if 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) |
|---|
| 129 | else |
|---|
| 130 | #error message |
|---|
| 131 | puts "not enougth argument : \n host - user - passwd" |
|---|
| 132 | end |
|---|
| 133 | |
|---|
| 134 | |
|---|
| 135 | |
|---|
| 136 | |
|---|