zapix 0.1.5 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # Zapix
2
2
 
3
- TODO: Write a gem description
3
+ Zapix is a tool which makes the communication with the zabbix's api simple.
4
+
5
+ If you need a more detailed information of how to use zapix see the specs.
4
6
 
5
7
  ## Installation
6
8
 
@@ -18,12 +20,358 @@ Or install it yourself as:
18
20
 
19
21
  ## Usage
20
22
 
21
- TODO: Write usage instructions here
23
+ ### Remote client
24
+ First we need the zapix remote client. Feel free to
25
+ disable the debug mode if you find it annoying.
26
+
27
+ ```ruby
28
+ require 'zapix'
29
+ zrc = ZabbixAPI.connect(
30
+ :service_url => http://ourzabbix.server-cp,,
31
+ :username => guybrush,
32
+ :password => threepwood,
33
+ :debug => true
34
+ )
35
+ ```
36
+
37
+ ### Remote client and the tests
38
+ In order to run the tests you need a running zabbix server.
39
+ You can get one if you run the test-kitchen tests for zabbix.
40
+
41
+ These environment variables also need to be set:
42
+
43
+ ZABBIX_API_URL
44
+ ZABBIX_API_LOGIN
45
+ ZABBIX_API_PASSWORD
46
+
47
+ ### Hostgroup Operations
48
+ #### Creating a hostgroup
49
+ ```ruby
50
+ zrc.hostgroups.create('test_hostgroup')
51
+ ```
52
+
53
+ #### Checking if a hostgroup exists
54
+ ```ruby
55
+ zrc.hostgroups.exists?('test_hostgroup')
56
+ ```
57
+
58
+ #### Checking if a hostgroup has any attached hosts
59
+ ```ruby
60
+ zrc.hostgroups.any_hosts?('test_hostgroup')
61
+ ```
62
+
63
+ #### Getting all host ids of hosts belonging to a hostgroup
64
+ ```ruby
65
+ zrc.hostgroups.get_host_ids_of('test_hostgroup')
66
+ ```
67
+
68
+ #### Deleting a hostgroup
69
+ Note that deleting a hostgroups with attached hosts also deletes the hosts.
70
+
71
+ ```ruby
72
+ zrc.hostgroups.delete('test_hostgroup')
73
+ ```
74
+
75
+ #### Getting the id of a hostgroup
76
+ ```ruby
77
+ zrc.hostgroups.get_id('test_hostgroup')
78
+ ```
79
+
80
+ #### Getting all hostgroups names
81
+ ```ruby
82
+ zrc.hostgroups.get_all
83
+ ```
84
+
85
+ ### Host Operations
86
+
87
+ #### Getting the id of a host
88
+ ```ruby
89
+ zrc.hosts.get_id('test_host')
90
+ ```
91
+
92
+ #### Checking if a host exists
93
+ ```ruby
94
+ zrc.hosts.exists?('test_host')
95
+ ```
96
+
97
+ #### Getting all host names
98
+ ```ruby
99
+ zrc.hosts.get_all
100
+ ```
101
+
102
+ #### Creating a host
103
+ Note that in zabbix host cannot exists on its own, it always needs a hostgroup.
104
+ ```ruby
105
+ hostgroup_id = zrc.hostgroups.get_id('test_hostgroup')
106
+
107
+ zabbix_interface = Interface.new(
108
+ 'ip' => '127.0.0.1',
109
+ 'dns' => 'abrakadabra.com'
110
+ )
111
+
112
+ jmx_interface = Interface.new(
113
+ 'ip' => '127.0.0.1',
114
+ 'dns' => 'abrakadabra.com',
115
+ 'type' => 4, # JMX
116
+ 'main' => 1, # default jmx interface
117
+ 'port' => 9003
118
+ )
119
+
120
+ template_1 = zrc.templates.get_id('example_template_1')
121
+ template_2 = zrc.templates.get_id('example_template_2')
122
+
123
+ example_host = Host.new
124
+ example_host.add_name('test_host')
125
+ example_host.add_interfaces(zabbix_interface.to_hash)
126
+ example_host.add_interfaces(jmx_interface.to_hash)
127
+ example_host.add_macros({'macro' => '{$TESTMACRO}', 'value' => 'test123'})
128
+ example_host.add_group_ids(hostgroup_id)
129
+ example_host.add_template_ids(template_1, template_2)
130
+ zrc.hosts.create(example_host.to_hash)
131
+ ```
132
+
133
+ #### Deleting a host
134
+ ```ruby
135
+ zrc.hosts.delete('test_host')
136
+ ```
137
+
138
+ ### Template Operations
139
+
140
+ #### Checking if a template exists
141
+ ```ruby
142
+ zrc.templates.exists?('test_template')
143
+ ```
144
+
145
+ #### Getting the id of a template
146
+ ```ruby
147
+ zrc.templates.get_id('test_template')
148
+ ```
149
+
150
+ #### Getting all templates for a host
151
+ ```ruby
152
+ zrc.templates.get_templates_for_host(zrc.hosts.get_id('test_host'))
153
+ ```
154
+
155
+ ### Application Operations
156
+
157
+ #### Getting the id of an application
158
+ Note that an application always belogs to a host.
159
+ ```ruby
160
+ zrc.applications.get_id({
161
+ 'name' => 'test_app',
162
+ 'hostid' => zrc.hosts.get_id('test_name')
163
+ })
164
+ ```
165
+
166
+ #### Creating an application for host
167
+ ```ruby
168
+ zrc.applications.create({
169
+ 'name' => 'test_application'
170
+ 'hostid' => zrc.hosts.get_id('test_host')
171
+ })
172
+ ```
173
+
174
+ ### Web Scenario Operations
175
+ Note that a web scenario needs a host and an application in zabbix 2.0.6. This is
176
+ going to change in the next versions of zabbix. When creating scenarios it also
177
+ makes sense to create triggers for them.
178
+
179
+ #### Checking if a scenario exists
180
+ ```ruby
181
+ zrc.scenarios.exists?({
182
+ 'name' => 'test_scenario'
183
+ 'hostid' => zrc.hosts.get_id('test_host')
184
+ })
185
+ ```
186
+
187
+ #### Getting the id of a scenario
188
+ ```ruby
189
+ zrc.scenarios.get_id({
190
+ 'name' => 'test_scenario'
191
+ 'hostid' => zrc.hosts.get_id('test_host')
192
+ })
193
+ ```
194
+
195
+ #### Creating a scenario
196
+ ```ruby
197
+
198
+ zrc.applications.create({
199
+ 'name' => 'test_app',
200
+ 'hostid' => zrc.hosts.get_id('test_name')
201
+ })
202
+
203
+ webcheck_options = Hash.new
204
+ webcheck_options['hostid'] = zrc.hosts.get_id('host')
205
+ webcheck_options['name'] = 'my first scenario'
206
+ webcheck_options['applicationid'] = zrc.applications.get_id('test_app')
207
+ webcheck_options['steps'] = [{'name' => 'Homepage', 'url' => 'm.test.de', 'status_codes' => 200, 'no' => 1}]
208
+ zrc.scenarios.create(webcheck_options)
209
+ ```
210
+
211
+ #### Deleting a scenario
212
+ ```ruby
213
+ zrc.scenarios.delete({
214
+ 'name' => 'test_scenario'
215
+ 'hostid' => zrc.hosts.get_id('test_host')
216
+ })
217
+ ```
218
+
219
+ ### Trigger Operations
220
+
221
+ #### Checking if a trigger exists
222
+ ```ruby
223
+ zrc.triggers.exists?({
224
+ 'expression' => "{test_host:web.test.fail[test_scenario].max(#3)}#0"
225
+ })
226
+ ```
227
+
228
+ ### Getting the id of a trigger
229
+ ```ruby
230
+ zrc.triggers.get_id({
231
+ 'expression' => "{test_host:web.test.fail[test_scenario].max(#3)}#0"
232
+ })
233
+ ```
234
+
235
+ ### Creating a trigger
236
+ ```ruby
237
+ options = Hash.new
238
+ options['description'] = 'Webpage failed on {HOST.NAME}'
239
+ options['expression'] = "{test_host:web.test.fail[test_scenario].max(#3)}#0"
240
+ options['priority'] = 2 # 2 means Warning
241
+ zrc.triggers.create(options)
242
+ ```
243
+
244
+ ### Deleting a trigger
245
+ ```ruby
246
+ trigger_id = zrc.triggers.get_id({
247
+ 'expression' => "{test_host:web.test.fail[test_scenario].max(#3)}#0"
248
+ })
249
+
250
+ zrc.triggers.delete(trigger_id)
251
+ ```
252
+
253
+ ### Usergroups Operations
254
+
255
+ #### Checking if a usergroup exists
256
+ ```ruby
257
+ zrc.usergroups.exists?({
258
+ 'name' => 'test_usergroup'
259
+ })
260
+ ```
261
+ #### Geting the id of a usergroup
262
+ ```ruby
263
+ zrc.usergroups.get_id({
264
+ 'name' = 'test_usergroup'
265
+ })
266
+ ```
267
+
268
+ #### Creating a usergroup
269
+ ```ruby
270
+ options = Hash.new
271
+ options['name'] = 'test_usergroup'
272
+ options['rights'] = {
273
+ 'permission' => 3,
274
+ 'id' => zrc.hostgroups.get_id('test_hostgroup')
275
+ }
276
+ zrc.usergroups.create(options)
277
+ ```
278
+
279
+ #### Deleting a user group
280
+ ```ruby
281
+ usergroup_id = zrc.usergroups.get_id({'name' => 'test_usergroup'})
282
+ zrc.usergroups.delete(usergroup_id)
283
+ ```
284
+
285
+ ### User Operations
286
+ #### Checking if a user exists
287
+ ```ruby
288
+ zrc.users.exists?({'alias' => 'max'})
289
+ ```
290
+
291
+ #### Getting the id of a user
292
+ ```ruby
293
+ zrc.users.get_id({'alias' => 'max'})
294
+ ```
295
+
296
+ #### Creating a user
297
+ ```ruby
298
+ group_id = zrc.usergroups.get_id({'name' => 'test_usergroup'})
299
+ user_options = Hash.new
300
+
301
+ user_options['alias'] = 'igor'
302
+ user_options['passwd'] = 'geheim'
303
+ user_options['usrgrps'] = [{
304
+ 'usrgrpid' => group_id
305
+ }]
306
+
307
+ user_options['user_medias'] = [{
308
+ 'mediatypeid' => 1,
309
+ 'sendto' => 'support@company.com',
310
+ 'active' => 0,
311
+ 'severity' => 63,
312
+ 'period' => '1-7,00:00-24:00'
313
+ }]
314
+
315
+ zrc.users.create(user_options)
316
+ ```
317
+
318
+ ### Actions Operations
319
+
320
+ #### Checking if an action exists
321
+ ```ruby
322
+ zrc.actions.exists?({'name' => 'Report problems to Zabbix administrators'})
323
+ ```
324
+
325
+ #### Getting the id of an action
326
+ ```ruby
327
+ zrc.actions.get_id({'name' => 'Report problems to Zabbix administrators'})
328
+ ```
329
+
330
+ #### Creating an action
331
+ ```ruby
332
+ usergroup_options = Hash.new({'name' = 'test_usergroup'})
333
+ action_options = Hash.new
334
+ action_options['name'] = 'Report problems to Zabbix administrators'
335
+ action_options['eventsource'] = 0
336
+ action_options['evaltype'] = 1 # AND
337
+ action_options['status'] = 1 # Disabled
338
+ action_options['esc_period'] = 3600
339
+ action_options['def_shortdata'] = '{TRIGGER.NAME}: {TRIGGER.STATUS}'
340
+ action_options['def_longdata'] = "{TRIGGER.NAME}: {TRIGGER.STATUS}\r\nLast value: {ITEM.LASTVALUE}\r\n\r\n{TRIGGER.URL}"
341
+ action_options['conditions'] = [{
342
+ 'conditiontype' => 0, # Hostgroup
343
+ 'operator' => 0, # =
344
+ 'value' => zrc.hostgroups.get_id('Templates')
345
+ },
346
+ # not in maintenance
347
+ {
348
+ 'conditiontype' => 16, # Maintenance
349
+ 'operator' => 7, # not in
350
+ 'value' => 'maintenance'
351
+ }]
352
+
353
+ action_options['operations'] = [{
354
+ 'operationtype' => 0,
355
+ 'esc_period' => 0,
356
+ 'esc_step_from' => 1,
357
+ 'esc_step_to' => 1,
358
+ 'evaltype' => 0,
359
+ 'opmessage_grp' => [{
360
+ 'usrgrpid' => zrc.usergroups.get_id(usergroup_options)
361
+ }],
362
+ 'opmessage' => {
363
+ 'default_msg' => 1,
364
+ 'mediatypeid' => 1
365
+ }
366
+ }]
367
+ zrc.actions.create(action_options)
368
+ ```
22
369
 
23
370
  ## Contributing
24
371
 
25
372
  1. Fork it
26
373
  2. Create your feature branch (`git checkout -b my-new-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some feature'`)
28
- 4. Push to the branch (`git push origin my-new-feature`)
374
+ 3. Don't forget to write tests
375
+ 4. Commit your changes (`git commit -am 'Add some feature'`)
376
+ 5. Push to the branch (`git push origin my-new-feature`)
29
377
  5. Create new Pull Request
@@ -23,4 +23,13 @@ class Scenarios < Base
23
23
 
24
24
  result.to_i >= 1 ? true : false
25
25
  end
26
+
27
+ def get_all
28
+ scenarios = client.webcheck_get({'output' => 'extend'})
29
+ names = extract_names(scenarios)
30
+ end
31
+
32
+ def extract_names(scenarios)
33
+ scenarios.map {|scenario| scenario['name']}
34
+ end
26
35
  end
@@ -1,3 +1,3 @@
1
1
  module Zapix
2
- VERSION = "0.1.5"
2
+ VERSION = "0.1.7"
3
3
  end
@@ -133,7 +133,6 @@ describe ZabbixAPI do
133
133
  options['expression'] = trigger_expression
134
134
  options['priority'] = 2 # 2 means Warning
135
135
  zrc.triggers.create(options)
136
-
137
136
  end
138
137
 
139
138
  after(:each) do
@@ -254,12 +253,18 @@ describe ZabbixAPI do
254
253
  zrc.scenarios.exists?(options).should be_true
255
254
  end
256
255
 
256
+ it 'returns all web scenarios' do
257
+ options = {}
258
+ (zrc.scenarios.get_all).should include(scenario)
259
+ end
260
+
257
261
  it 'gets the id of a web scenario' do
258
262
  options = {}
259
263
  options['name'] = scenario
260
264
  options['hostid'] = zrc.hosts.get_id(host)
261
265
  zrc.scenarios.exists?(options).should be_true
262
- zrc.scenarios.get_id(options)
266
+ result = zrc.scenarios.get_id(options)
267
+ (result.to_i).should >= 0
263
268
  end
264
269
 
265
270
  it 'returns false if a web scenario does not exist' do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zapix
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-28 00:00:00.000000000 Z
12
+ date: 2013-09-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -138,7 +138,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
138
138
  version: '0'
139
139
  segments:
140
140
  - 0
141
- hash: 2168957800152438882
141
+ hash: -2133943749775290873
142
142
  required_rubygems_version: !ruby/object:Gem::Requirement
143
143
  none: false
144
144
  requirements:
@@ -147,7 +147,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
147
147
  version: '0'
148
148
  segments:
149
149
  - 0
150
- hash: 2168957800152438882
150
+ hash: -2133943749775290873
151
151
  requirements: []
152
152
  rubyforge_project:
153
153
  rubygems_version: 1.8.24