zabbixapi 0.1.4 → 0.1.5a1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +16 -3
- data/examples/config.yml +4 -0
- data/examples/zabbix_availability +73 -0
- data/examples/zabbix_disk_io +152 -0
- data/examples/zabbix_filesystem +249 -0
- data/examples/zabbix_la +101 -0
- data/examples/zabbix_memory +276 -0
- data/examples/zabbix_net +82 -0
- data/lib/{application.rb → zabbixapi/application.rb} +25 -4
- data/lib/zabbixapi/base.rb +133 -0
- data/lib/{graph.rb → zabbixapi/graph.rb} +8 -10
- data/lib/zabbixapi/group.rb +78 -0
- data/lib/zabbixapi/host.rb +86 -0
- data/lib/zabbixapi/item.rb +169 -0
- data/lib/zabbixapi/screen.rb +166 -0
- data/lib/{template.rb → zabbixapi/template.rb} +22 -26
- data/lib/zabbixapi/trigger.rb +95 -0
- data/lib/zabbixapi/usermacro.rb +74 -0
- data/lib/zabbixapi.rb +10 -10
- data/spec/item.rb +60 -0
- data/zabbixapi.gemspec +4 -5
- metadata +39 -49
- data/lib/base.rb +0 -126
- data/lib/group.rb +0 -78
- data/lib/host.rb +0 -98
- data/lib/item.rb +0 -128
- data/lib/screen.rb +0 -169
- data/lib/trigger.rb +0 -98
- data/lib/usermacro.rb +0 -75
@@ -0,0 +1,276 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'yaml'
|
5
|
+
require 'getopt/std'
|
6
|
+
require 'zabbixapi'
|
7
|
+
|
8
|
+
opt = Getopt::Std.getopts("g:E:")
|
9
|
+
|
10
|
+
group_name = opt["g"]
|
11
|
+
zabbix_env = opt["E"]
|
12
|
+
|
13
|
+
template_name = "TMPL_Memory"
|
14
|
+
|
15
|
+
# read config
|
16
|
+
config = YAML::load(open('./config.yml'))
|
17
|
+
|
18
|
+
api_url = config[zabbix_env]["api_url"]
|
19
|
+
api_login = config[zabbix_env]["api_login"]
|
20
|
+
api_password = config[zabbix_env]["api_password"]
|
21
|
+
|
22
|
+
# Esablish new connection
|
23
|
+
zbx = Zabbix::ZabbixApi.new(api_url, api_login, api_password)
|
24
|
+
|
25
|
+
# Create new template
|
26
|
+
p " * Creating template #{template_name}."
|
27
|
+
g_id = zbx.get_group_id(group_name)
|
28
|
+
|
29
|
+
options = {
|
30
|
+
'groups' => [ g_id.to_i ],
|
31
|
+
'host' => template_name
|
32
|
+
}
|
33
|
+
|
34
|
+
t_id = zbx.add_template(options)
|
35
|
+
|
36
|
+
# Create application #{app_name}
|
37
|
+
app_name = "Memory"
|
38
|
+
p " ** Create application #{app_name}."
|
39
|
+
application = {
|
40
|
+
'hostid' => t_id.to_i,
|
41
|
+
'name' => app_name
|
42
|
+
}
|
43
|
+
a_id = zbx.add_application(application)
|
44
|
+
|
45
|
+
# 'Buffers memory'
|
46
|
+
options = {
|
47
|
+
'description' => "Buffers memory",
|
48
|
+
'key_' => "vm.memory.size[buffers]",
|
49
|
+
'hostid' => t_id.to_i,
|
50
|
+
'applications' => [ a_id.to_i ],
|
51
|
+
'units' => 'B',
|
52
|
+
'history' => 7,
|
53
|
+
'trends' => 30,
|
54
|
+
'value_type' => 0
|
55
|
+
}
|
56
|
+
p " ** Add 'Buffers memory' to #{template_name}."
|
57
|
+
|
58
|
+
buffers_in_b_item_id = zbx.add_item(options)
|
59
|
+
|
60
|
+
# 'Cached memory'
|
61
|
+
options = {
|
62
|
+
'description' => "Cached memory",
|
63
|
+
'key_' => "vm.memory.size[cached]",
|
64
|
+
'hostid' => t_id.to_i,
|
65
|
+
'applications' => [ a_id.to_i ],
|
66
|
+
'units' => 'B',
|
67
|
+
'history' => 7,
|
68
|
+
'trends' => 30,
|
69
|
+
'value_type' => 0
|
70
|
+
}
|
71
|
+
p " ** Add 'Cached memory' to #{template_name}."
|
72
|
+
|
73
|
+
cached_in_b_item_id = zbx.add_item(options)
|
74
|
+
|
75
|
+
# 'Total memory'
|
76
|
+
options = {
|
77
|
+
'description' => "Total memory",
|
78
|
+
'key_' => "vm.memory.size[total]",
|
79
|
+
'hostid' => t_id.to_i,
|
80
|
+
'applications' => [ a_id.to_i ],
|
81
|
+
'delay' => '300',
|
82
|
+
'units' => 'B',
|
83
|
+
'history' => 7,
|
84
|
+
'trends' => 30,
|
85
|
+
'value_type' => 0
|
86
|
+
}
|
87
|
+
p " ** Add 'Total memory' to #{template_name}."
|
88
|
+
|
89
|
+
total_in_b_item_id = zbx.add_item(options)
|
90
|
+
|
91
|
+
# 'Used memory with buffers and cache'
|
92
|
+
options = {
|
93
|
+
'description' => "Used memory",
|
94
|
+
'key_' => "vm.memory.size[used]",
|
95
|
+
'hostid' => t_id.to_i,
|
96
|
+
'applications' => [ a_id.to_i ],
|
97
|
+
'delay' => '300',
|
98
|
+
'units' => 'B',
|
99
|
+
'history' => 7,
|
100
|
+
'trends' => 30,
|
101
|
+
'value_type' => 0
|
102
|
+
}
|
103
|
+
p " ** Add 'Used memory' to #{template_name}."
|
104
|
+
|
105
|
+
used_in_b_item_id = zbx.add_item(options)
|
106
|
+
|
107
|
+
# 'Free memory'
|
108
|
+
options = {
|
109
|
+
'description' => "Free memory",
|
110
|
+
'key_' => "vm.memory.size[free]",
|
111
|
+
'hostid' => t_id.to_i,
|
112
|
+
'applications' => [ a_id.to_i ],
|
113
|
+
'units' => 'B',
|
114
|
+
'history' => 7,
|
115
|
+
'trends' => 30,
|
116
|
+
'value_type' => 0
|
117
|
+
}
|
118
|
+
p " ** Add 'Free memory' to #{template_name}."
|
119
|
+
|
120
|
+
i_id = zbx.add_item(options)
|
121
|
+
|
122
|
+
# 'Free mmeory with buffers and cache'
|
123
|
+
options = {
|
124
|
+
'description' => "Free memory with buffers and cache",
|
125
|
+
'key_' => "vm.memory.size[free_with_buffer_cache]",
|
126
|
+
'params' => "last(\"vm.memory.size[free]\") + last(\"vm.memory.size[cached]\") + last(\"vm.memory.size[buffers]\")",
|
127
|
+
'hostid' => t_id.to_i,
|
128
|
+
'type' => '15', #calculated
|
129
|
+
'applications' => [ a_id.to_i ],
|
130
|
+
'units' => 'B',
|
131
|
+
'history' => 7,
|
132
|
+
'trends' => 30,
|
133
|
+
'value_type' => 0
|
134
|
+
}
|
135
|
+
p " ** Add 'Free memory with buffers and cache' to #{template_name}."
|
136
|
+
|
137
|
+
i_id = zbx.add_item(options)
|
138
|
+
|
139
|
+
# 'Swap in all'
|
140
|
+
options = {
|
141
|
+
'description' => "Swap in all",
|
142
|
+
'key_' => "system.swap.in[]",
|
143
|
+
'hostid' => t_id.to_i,
|
144
|
+
'applications' => [ a_id.to_i ],
|
145
|
+
'multiplier' => 1,
|
146
|
+
'formula' => 512,
|
147
|
+
'units' => 'B',
|
148
|
+
'history' => 7,
|
149
|
+
'trends' => 30,
|
150
|
+
'value_type' => 0
|
151
|
+
}
|
152
|
+
p " ** Add 'Swap in all' to #{template_name}."
|
153
|
+
|
154
|
+
i_id = zbx.add_item(options)
|
155
|
+
|
156
|
+
# 'Swap out all'
|
157
|
+
options = {
|
158
|
+
'description' => "Swap out all",
|
159
|
+
'key_' => "system.swap.out[]",
|
160
|
+
'hostid' => t_id.to_i,
|
161
|
+
'applications' => [ a_id.to_i ],
|
162
|
+
'multiplier' => 1,
|
163
|
+
'formula' => 512,
|
164
|
+
'units' => 'B',
|
165
|
+
'history' => 7,
|
166
|
+
'trends' => 30,
|
167
|
+
'value_type' => 0
|
168
|
+
}
|
169
|
+
p " ** Add 'Swap out all' to #{template_name}."
|
170
|
+
|
171
|
+
i_id = zbx.add_item(options)
|
172
|
+
|
173
|
+
# TRIGGERS
|
174
|
+
options = {
|
175
|
+
'description' => "Free memory without cache, %",
|
176
|
+
'expression' => "{#{template_name}:vm.memory.size[free].last(0)}<15",
|
177
|
+
'priority' => 2, # warning
|
178
|
+
'templateid' => 0,
|
179
|
+
'comments' => "Free memory without cache, % warning trigger",
|
180
|
+
'type' => 0,
|
181
|
+
'status' => '0'
|
182
|
+
}
|
183
|
+
|
184
|
+
p " ** Add 'Free memory without cache, %'"
|
185
|
+
tr_id = zbx.add_trigger(options)
|
186
|
+
|
187
|
+
options = {
|
188
|
+
'description' => "Free memory without cache, %",
|
189
|
+
'expression' => "{#{template_name}:vm.memory.size[free].last(0)}<10",
|
190
|
+
'priority' => 5, # disaster
|
191
|
+
'templateid' => 0,
|
192
|
+
'commenty' => "Free memory without cache, %",
|
193
|
+
'type' => 0,
|
194
|
+
'status' => '0'
|
195
|
+
}
|
196
|
+
|
197
|
+
p " ** Add 'Free memory without cache, % disaster trigger'"
|
198
|
+
tr_id = zbx.add_trigger(options)
|
199
|
+
|
200
|
+
options = {
|
201
|
+
'description' => "Swap usage in, B",
|
202
|
+
'expression' => "{#{template_name}:system.swap.in[].last(0)}#0",
|
203
|
+
'priority' => 2, # warning
|
204
|
+
'templateid' => 0,
|
205
|
+
'comments' => "Swap usage in, B",
|
206
|
+
'type' => 0,
|
207
|
+
'status' => '0'
|
208
|
+
}
|
209
|
+
|
210
|
+
p " ** Add 'Swap usage in, B warning trigger'"
|
211
|
+
tr_id = zbx.add_trigger(options)
|
212
|
+
|
213
|
+
options = {
|
214
|
+
'description' => "Swap usage out, B",
|
215
|
+
'expression' => "{#{template_name}:system.swap.out[].last(0)}#0",
|
216
|
+
'priority' => 2, # warning
|
217
|
+
'templateid' => 0,
|
218
|
+
'comments' => "Swap usage out, B",
|
219
|
+
'type' => 0,
|
220
|
+
'status' => '0'
|
221
|
+
}
|
222
|
+
|
223
|
+
p " ** Add 'Swap usage out, B warning trigger'"
|
224
|
+
tr_id = zbx.add_trigger(options)
|
225
|
+
|
226
|
+
options = {
|
227
|
+
'gitems' => [
|
228
|
+
{
|
229
|
+
"itemid" => total_in_b_item_id,
|
230
|
+
"drawtype" => "0",
|
231
|
+
"sortorder" => "0",
|
232
|
+
"color" => "AA0000",
|
233
|
+
"yaxisside" => "0",
|
234
|
+
"calc_fnc" => "2",
|
235
|
+
"type" => "0",
|
236
|
+
"periods_cnt" => "5"
|
237
|
+
},
|
238
|
+
{
|
239
|
+
"itemid" => used_in_b_item_id,
|
240
|
+
"drawtype" => "0",
|
241
|
+
"sortorder" => "0",
|
242
|
+
"color" => "009900",
|
243
|
+
"yaxisside" => "0",
|
244
|
+
"calc_fnc" => "2",
|
245
|
+
"type" => "0",
|
246
|
+
"periods_cnt" => "5"
|
247
|
+
},
|
248
|
+
{
|
249
|
+
"itemid" => cached_in_b_item_id,
|
250
|
+
"drawtype" => "0",
|
251
|
+
"sortorder" => "0",
|
252
|
+
"color" => "0000AA",
|
253
|
+
"yaxisside" => "0",
|
254
|
+
"calc_fnc" => "2",
|
255
|
+
"type" => "0",
|
256
|
+
"periods_cnt" => "5"
|
257
|
+
},
|
258
|
+
{
|
259
|
+
"itemid" => buffers_in_b_item_id,
|
260
|
+
"drawtype" => "0",
|
261
|
+
"sortorder" => "0",
|
262
|
+
"color" => "AA00AA",
|
263
|
+
"yaxisside" => "0",
|
264
|
+
"calc_fnc" => "2",
|
265
|
+
"type" => "0",
|
266
|
+
"periods_cnt" => "5"
|
267
|
+
}
|
268
|
+
],
|
269
|
+
"show_triggers" => "1",
|
270
|
+
"name" => "Memory usage",
|
271
|
+
"width" => "900",
|
272
|
+
"height" => "200",
|
273
|
+
"templateid" => "0"
|
274
|
+
}
|
275
|
+
|
276
|
+
g_id = zbx.add_graph(options)
|
data/examples/zabbix_net
ADDED
@@ -0,0 +1,82 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'getopt/std'
|
5
|
+
require 'yaml'
|
6
|
+
require 'zabbixapi'
|
7
|
+
|
8
|
+
opt = Getopt::Std.getopts("g:i:E:")
|
9
|
+
|
10
|
+
group_name = opt["g"]
|
11
|
+
interface_name = opt["i"]
|
12
|
+
zabbix_env = opt["E"]
|
13
|
+
|
14
|
+
template_name = "TMPL_Net_#{interface_name}"
|
15
|
+
app_name = "Net_#{interface_name}"
|
16
|
+
|
17
|
+
|
18
|
+
# read config
|
19
|
+
config = YAML::load(open('./config.yml'))
|
20
|
+
|
21
|
+
api_url = config[zabbix_env]["api_url"]
|
22
|
+
api_login = config[zabbix_env]["api_login"]
|
23
|
+
api_password = config[zabbix_env]["api_password"]
|
24
|
+
|
25
|
+
# Esablish new connection
|
26
|
+
zbx = Zabbix::ZabbixApi.new(api_url, api_login, api_password)
|
27
|
+
|
28
|
+
# Create new template
|
29
|
+
p " * Creating template #{template_name}."
|
30
|
+
g_id = zbx.get_group_id(group_name)
|
31
|
+
|
32
|
+
options = {
|
33
|
+
'groups' => [ g_id.to_i ],
|
34
|
+
'host' => template_name
|
35
|
+
}
|
36
|
+
|
37
|
+
t_id = zbx.add_template(options)
|
38
|
+
|
39
|
+
# Create application #{app_name}
|
40
|
+
p " ** Create application #{app_name}."
|
41
|
+
application = {
|
42
|
+
'hostid' => t_id.to_i,
|
43
|
+
'name' => app_name
|
44
|
+
}
|
45
|
+
a_id = zbx.add_application(application)
|
46
|
+
|
47
|
+
# 'Net #{interface_name} incoming traffic'
|
48
|
+
options = {
|
49
|
+
'description' => "Net #{interface_name} incoming, B",
|
50
|
+
'key_' => "net.if.in[#{interface_name}, bytes]",
|
51
|
+
'hostid' => t_id.to_i,
|
52
|
+
'applications' => [ a_id.to_i ],
|
53
|
+
'history' => 7,
|
54
|
+
'trends' => 30,
|
55
|
+
'delay' => 60,
|
56
|
+
'value_type' => 0,
|
57
|
+
'units' => 'Bps',
|
58
|
+
'value_type' => '3', # Numeric (unsigned)
|
59
|
+
'delta' => 1 # Store as delta (Speed per second)
|
60
|
+
}
|
61
|
+
p " ** Add 'Net #{interface_name} incoming, B' to #{template_name}."
|
62
|
+
|
63
|
+
i_id = zbx.add_item(options)
|
64
|
+
|
65
|
+
# 'Net #{interface_name} outgoing traffic'
|
66
|
+
options = {
|
67
|
+
'description' => "Net #{interface_name} outgoing, B",
|
68
|
+
'key_' => "net.if.out[#{interface_name}, bytes]",
|
69
|
+
'hostid' => t_id.to_i,
|
70
|
+
'applications' => [ a_id.to_i ],
|
71
|
+
'history' => 7,
|
72
|
+
'trends' => 30,
|
73
|
+
'delay' => 60,
|
74
|
+
'value_type' => 0,
|
75
|
+
'units' => 'Bps',
|
76
|
+
'value_type' => '3', # Numeric (unsigned)
|
77
|
+
'delta' => 1 # Store as delta (Speed per second)
|
78
|
+
|
79
|
+
}
|
80
|
+
p " ** Add 'Net #{interface_name} outgoing, B' to #{template_name}."
|
81
|
+
|
82
|
+
i_id = zbx.add_item(options)
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'base'
|
2
|
-
|
3
1
|
module Zabbix
|
4
2
|
class ZabbixApi
|
5
3
|
def add_application(app_options)
|
@@ -17,13 +15,36 @@ module Zabbix
|
|
17
15
|
|
18
16
|
responce = send_request(message)
|
19
17
|
|
20
|
-
|
18
|
+
unless responce.empty? then
|
21
19
|
result = responce['applicationids'][0].to_i
|
22
20
|
else
|
23
|
-
result = nil
|
21
|
+
result = nil
|
24
22
|
end
|
25
23
|
|
26
24
|
return result
|
27
25
|
end
|
28
26
|
end
|
27
|
+
|
28
|
+
def get_app_id(host_id, app_name)
|
29
|
+
|
30
|
+
message = {
|
31
|
+
'method' => 'application.get',
|
32
|
+
'params' => {
|
33
|
+
'filter' => {
|
34
|
+
'name' => app_name,
|
35
|
+
'hostid' => host_id
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}
|
39
|
+
|
40
|
+
responce = send_request(message)
|
41
|
+
|
42
|
+
unless responce.empty? then
|
43
|
+
result = responce[0]['applicationid']
|
44
|
+
else
|
45
|
+
result = nil
|
46
|
+
end
|
47
|
+
|
48
|
+
return result
|
49
|
+
end
|
29
50
|
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'net/http'
|
5
|
+
require 'net/https'
|
6
|
+
|
7
|
+
module Zabbix
|
8
|
+
|
9
|
+
class SocketError < RuntimeError
|
10
|
+
end
|
11
|
+
|
12
|
+
class ResponseCodeError < RuntimeError
|
13
|
+
end
|
14
|
+
|
15
|
+
class ResponseError < RuntimeError
|
16
|
+
end
|
17
|
+
|
18
|
+
class AlreadyExist < RuntimeError
|
19
|
+
end
|
20
|
+
|
21
|
+
class ArgumentError < RuntimeError
|
22
|
+
end
|
23
|
+
|
24
|
+
class ZabbixApi
|
25
|
+
|
26
|
+
attr_accessor :debug
|
27
|
+
|
28
|
+
def initialize ( api_url, api_user, api_password )
|
29
|
+
@api_url = api_url
|
30
|
+
@api_user = api_user
|
31
|
+
@api_password = api_password
|
32
|
+
|
33
|
+
@debug = false # Disable debug by default
|
34
|
+
end
|
35
|
+
|
36
|
+
def do_request(message)
|
37
|
+
|
38
|
+
id = rand 100_000
|
39
|
+
|
40
|
+
message['id'] = id
|
41
|
+
message['jsonrpc'] = '2.0'
|
42
|
+
|
43
|
+
message_json = JSON.generate(message)
|
44
|
+
|
45
|
+
uri = URI.parse(@api_url)
|
46
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
47
|
+
|
48
|
+
if ( uri.scheme == "https" ) then
|
49
|
+
http.use_ssl = true
|
50
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
51
|
+
end
|
52
|
+
|
53
|
+
request = Net::HTTP::Post.new(uri.request_uri)
|
54
|
+
request.add_field('Content-Type', 'application/json-rpc')
|
55
|
+
request.body=(message_json)
|
56
|
+
|
57
|
+
begin
|
58
|
+
puts "[ZBXAPI] : INFO : Do request. Body => #{request.body}" if @debug
|
59
|
+
response = http.request(request)
|
60
|
+
rescue ::SocketError => e
|
61
|
+
puts "[ZBXAPI] : ERROR : SocketError => #{e.message}" if @debug
|
62
|
+
raise Zabbix::SocketError.new(e.message)
|
63
|
+
end
|
64
|
+
|
65
|
+
if @debug
|
66
|
+
puts "[ZBXAPI] : INFO : Response start"
|
67
|
+
puts response
|
68
|
+
puts "[ZBXAPI] : INFO : Response end"
|
69
|
+
end
|
70
|
+
|
71
|
+
if response.code != "200"
|
72
|
+
raise Zabbix::ResponseCodeError.new("Responce code from [" + @api_url + "] is #{response.code}")
|
73
|
+
end
|
74
|
+
|
75
|
+
response_body_hash = JSON.parse(response.body)
|
76
|
+
|
77
|
+
if error = response_body_hash['error']
|
78
|
+
error_message = error['message']
|
79
|
+
error_data = error['data']
|
80
|
+
error_code = error['code']
|
81
|
+
|
82
|
+
e_message = "Code: [" + error_code.to_s + "]. Message: [" + error_message +\
|
83
|
+
"]. Data: [" + error_data + "]."
|
84
|
+
|
85
|
+
case error_code.to_s
|
86
|
+
when '-32602'
|
87
|
+
raise Zabbix::AlreadyExist.new(e_message)
|
88
|
+
else
|
89
|
+
raise Zabbix::ResponseError.new(e_message)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
result = response_body_hash['result']
|
94
|
+
|
95
|
+
return result
|
96
|
+
end
|
97
|
+
|
98
|
+
def send_request(message)
|
99
|
+
message['auth'] = auth()
|
100
|
+
do_request(message)
|
101
|
+
end
|
102
|
+
|
103
|
+
def auth()
|
104
|
+
|
105
|
+
auth_message = {
|
106
|
+
'auth' => nil,
|
107
|
+
'method' => 'user.authenticate',
|
108
|
+
'params' => {
|
109
|
+
'user' => @api_user,
|
110
|
+
'password' => @api_password,
|
111
|
+
'0' => '0'
|
112
|
+
}
|
113
|
+
}
|
114
|
+
|
115
|
+
auth_id = do_request(auth_message)
|
116
|
+
|
117
|
+
return auth_id
|
118
|
+
end
|
119
|
+
|
120
|
+
# Utils.
|
121
|
+
def merge_opt(a, b)
|
122
|
+
c = {}
|
123
|
+
|
124
|
+
b.each_pair do |key, value|
|
125
|
+
if a.has_key?(key) then
|
126
|
+
c[key] = value
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
return a.merge(c)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -7,15 +7,13 @@ module Zabbix
|
|
7
7
|
'params' => graph
|
8
8
|
}
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
puts "DEBUG: #{responce.inspect}"
|
10
|
+
response = send_request(message)
|
13
11
|
|
14
12
|
return 0
|
15
13
|
end
|
16
14
|
|
17
15
|
def get_graph_id(host_id, graph_name)
|
18
|
-
|
16
|
+
|
19
17
|
message = {
|
20
18
|
'method' => 'graph.get',
|
21
19
|
'params' => {
|
@@ -26,10 +24,10 @@ module Zabbix
|
|
26
24
|
}
|
27
25
|
}
|
28
26
|
|
29
|
-
|
27
|
+
response = send_request(message)
|
30
28
|
|
31
|
-
unless (
|
32
|
-
result =
|
29
|
+
unless ( response.empty? ) then
|
30
|
+
result = response[0]['graphid']
|
33
31
|
else
|
34
32
|
result = nil
|
35
33
|
end
|
@@ -47,12 +45,12 @@ module Zabbix
|
|
47
45
|
}
|
48
46
|
}
|
49
47
|
|
50
|
-
|
48
|
+
response = send_request(message)
|
51
49
|
|
52
|
-
unless (
|
50
|
+
unless ( response.empty? ) then
|
53
51
|
result = {}
|
54
52
|
|
55
|
-
|
53
|
+
response.each() do |graph|
|
56
54
|
graph_id = graph['graphid']
|
57
55
|
graph_name = graph['name']
|
58
56
|
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Zabbix
|
2
|
+
|
3
|
+
class ZabbixApi
|
4
|
+
def get_group_id(pattern)
|
5
|
+
|
6
|
+
message = {
|
7
|
+
'method' => 'hostgroup.get',
|
8
|
+
'params' => {
|
9
|
+
'filter' => {
|
10
|
+
'name' => pattern
|
11
|
+
}
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
response = send_request(message)
|
16
|
+
|
17
|
+
if not ( response.empty? ) then
|
18
|
+
result = response[0]['groupid']
|
19
|
+
else
|
20
|
+
result = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
return result
|
24
|
+
end
|
25
|
+
|
26
|
+
def group_exist?(pattern)
|
27
|
+
|
28
|
+
group_id = get_groups_id(pattern)
|
29
|
+
|
30
|
+
if ( group_id ) then
|
31
|
+
return true
|
32
|
+
else
|
33
|
+
return false
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def add_group(groupname)
|
38
|
+
|
39
|
+
message = {
|
40
|
+
'method' => 'hostgroup.create',
|
41
|
+
'params' => {
|
42
|
+
'name' => groupname
|
43
|
+
}
|
44
|
+
}
|
45
|
+
|
46
|
+
response = send_request(message)
|
47
|
+
|
48
|
+
if ( response ) then
|
49
|
+
result = response['groupids'][0].to_i
|
50
|
+
else
|
51
|
+
result = nil
|
52
|
+
end
|
53
|
+
|
54
|
+
return result
|
55
|
+
end
|
56
|
+
|
57
|
+
def add_host_to_group(host_id, group_id)
|
58
|
+
|
59
|
+
message = {
|
60
|
+
'method' => 'hostgroup.massAdd',
|
61
|
+
'params' => {
|
62
|
+
'groups' => [ group_id ],
|
63
|
+
'hosts' => [ host_id ]
|
64
|
+
}
|
65
|
+
}
|
66
|
+
|
67
|
+
response = send_request(message)
|
68
|
+
|
69
|
+
if not ( response.empty? ) then
|
70
|
+
result = true
|
71
|
+
else
|
72
|
+
result = false
|
73
|
+
end
|
74
|
+
|
75
|
+
return result
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|