zabcon 0.0.6 → 0.0.327
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/libs/argument_processor.rb +430 -567
- data/libs/command_help.rb +11 -61
- data/libs/command_tree.rb +480 -280
- data/libs/lexer.rb +846 -0
- data/libs/printer.rb +25 -25
- data/libs/revision.rb +1 -0
- data/libs/utility_items.rb +137 -0
- data/libs/zabbix_server.rb +379 -0
- data/libs/zabcon_commands.rb +558 -0
- data/libs/zabcon_core.rb +177 -316
- data/libs/zabcon_exceptions.rb +4 -4
- data/libs/zabcon_globals.rb +29 -6
- data/zabcon.conf.default +38 -3
- data/zabcon.rb +72 -50
- metadata +23 -48
- data/libs/zbxcliserver.rb +0 -325
@@ -0,0 +1,558 @@
|
|
1
|
+
#License:: GPL 2.0 http://www.gnu.org/licenses/gpl-2.0.html
|
2
|
+
#Copyright:: Copyright (C) 2009,2010 Andrew Nelson nelsonab(at)red-tux(dot)net
|
3
|
+
#
|
4
|
+
#This program is free software; you can redistribute it and/or
|
5
|
+
#modify it under the terms of the GNU General Public License
|
6
|
+
#as published by the Free Software Foundation; either version 2
|
7
|
+
#of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
#This program is distributed in the hope that it will be useful,
|
10
|
+
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
#GNU General Public License for more details.
|
13
|
+
#
|
14
|
+
#You should have received a copy of the GNU General Public License
|
15
|
+
#along with this program; if not, write to the Free Software
|
16
|
+
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
17
|
+
|
18
|
+
##########################################
|
19
|
+
# Subversion information
|
20
|
+
# $Id: zabcon_commands.rb 325 2011-09-26 08:57:00Z nelsonab $
|
21
|
+
# $Revision: 325 $
|
22
|
+
##########################################
|
23
|
+
|
24
|
+
require "zbxapi/zdebug"
|
25
|
+
|
26
|
+
|
27
|
+
ZabconCommand.add_command "exit" do
|
28
|
+
set_method do
|
29
|
+
puts "Exiting"
|
30
|
+
throw :exit
|
31
|
+
end
|
32
|
+
set_help_tag :exit
|
33
|
+
add_alias "quit"
|
34
|
+
end
|
35
|
+
|
36
|
+
ZabconCommand.add_command "help" do
|
37
|
+
set_method do |params|
|
38
|
+
if params.empty?
|
39
|
+
puts CommandHelp.get(:help)
|
40
|
+
else
|
41
|
+
cmd=CommandList.instance.get(params)
|
42
|
+
tag=!cmd.nil? ? cmd.help_tag : :_unknown
|
43
|
+
if tag==:_unknown or tag==:_none
|
44
|
+
puts "Unable to find help for: \"#{params.join(" ")}\""
|
45
|
+
else
|
46
|
+
puts CommandHelp.get(tag)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
set_flag :array_params
|
51
|
+
set_help_tag :help
|
52
|
+
end
|
53
|
+
|
54
|
+
ZabconCommand.add_command "help commands" do
|
55
|
+
set_method do
|
56
|
+
CommandList.instance.get_command_list.each {|item|
|
57
|
+
puts item
|
58
|
+
}
|
59
|
+
end
|
60
|
+
set_help_tag :help_commands
|
61
|
+
end
|
62
|
+
|
63
|
+
ZabconCommand.add_command "login" do
|
64
|
+
set_method do |params|
|
65
|
+
# login server username password
|
66
|
+
server.server_url=params[0]
|
67
|
+
server.username=params[1]
|
68
|
+
server.password=params[2]
|
69
|
+
server.login
|
70
|
+
end
|
71
|
+
set_help_tag :help
|
72
|
+
set_flag :array_params
|
73
|
+
end
|
74
|
+
|
75
|
+
ZabconCommand.add_command "logout" do
|
76
|
+
set_method do
|
77
|
+
server.logout
|
78
|
+
end
|
79
|
+
set_help_tag :logout
|
80
|
+
end
|
81
|
+
|
82
|
+
ZabconCommand.add_command "info" do
|
83
|
+
set_method do
|
84
|
+
puts "Current settings"
|
85
|
+
puts "Server"
|
86
|
+
if !server.connected?
|
87
|
+
puts "Not connected"
|
88
|
+
else
|
89
|
+
puts " Server Name: %s" % server.server_url
|
90
|
+
puts " Username: %-15s Password: %-12s" % [server.username, Array.new(server.password.length,'*')]
|
91
|
+
end
|
92
|
+
puts "Display"
|
93
|
+
puts " Current screen length #{env["sheight"]}"
|
94
|
+
puts "Other"
|
95
|
+
puts " Debug level %d" % env["debug"]
|
96
|
+
end
|
97
|
+
set_help_tag :info
|
98
|
+
end
|
99
|
+
|
100
|
+
ZabconCommand.add_command "set env" do
|
101
|
+
set_method do |params|
|
102
|
+
|
103
|
+
params.each { |key,val|
|
104
|
+
env[key]=val
|
105
|
+
puts "#{key} : #{val.inspect}"
|
106
|
+
}
|
107
|
+
end
|
108
|
+
set_help_tag :set_env
|
109
|
+
end
|
110
|
+
|
111
|
+
ZabconCommand.add_command "load config" do
|
112
|
+
set_method do |params|
|
113
|
+
env.load_config(params)
|
114
|
+
end
|
115
|
+
set_help_tag :load_config
|
116
|
+
end
|
117
|
+
|
118
|
+
ZabconCommand.add_command "set debug" do
|
119
|
+
set_method do |params|
|
120
|
+
env["debug"]=params[0]
|
121
|
+
end
|
122
|
+
depreciated "set env debug=N"
|
123
|
+
set_flag :array_params
|
124
|
+
set_help_tag :set_debug
|
125
|
+
end
|
126
|
+
|
127
|
+
ZabconCommand.add_command "set lines" do
|
128
|
+
set_method do |params|
|
129
|
+
env["lines"]=params[0]
|
130
|
+
end
|
131
|
+
depreciated "set env lines=N"
|
132
|
+
set_flag :array_params
|
133
|
+
set_help_tag :set_lines
|
134
|
+
end
|
135
|
+
|
136
|
+
ZabconCommand.add_command "set pause" do
|
137
|
+
set_method do |params|
|
138
|
+
if params.nil? then
|
139
|
+
puts "set pause requires either Off or On"
|
140
|
+
return
|
141
|
+
end
|
142
|
+
|
143
|
+
if params.keys[0].upcase=="OFF"
|
144
|
+
env["lines"]=env["lines"].abs*(-1)
|
145
|
+
elsif params.keys[0].upcase=="ON"
|
146
|
+
env["lines"]=env["lines"].abs
|
147
|
+
else
|
148
|
+
puts "set pause requires either Off or On"
|
149
|
+
end
|
150
|
+
env["lines"]=24 if env["lines"]==0
|
151
|
+
end
|
152
|
+
set_flag :array_params
|
153
|
+
set_help_tag :set_pause
|
154
|
+
end
|
155
|
+
|
156
|
+
ZabconCommand.add_command "show var" do
|
157
|
+
set_method do |params|
|
158
|
+
if params.empty?
|
159
|
+
if GlobalVars.instance.empty?
|
160
|
+
puts "No variables defined"
|
161
|
+
else
|
162
|
+
GlobalVars.instance.each { |key,val|
|
163
|
+
puts "#{key} : #{val.inspect}"
|
164
|
+
}
|
165
|
+
end
|
166
|
+
else
|
167
|
+
params.each { |item|
|
168
|
+
if GlobalVars.instance[item].nil?
|
169
|
+
puts "#{item} *** Not Defined ***"
|
170
|
+
else
|
171
|
+
puts "#{item} : #{GlobalVars.instance[item].inspect}"
|
172
|
+
end
|
173
|
+
}
|
174
|
+
end
|
175
|
+
end
|
176
|
+
set_help_tag :show_var
|
177
|
+
set_flag :array_params
|
178
|
+
end
|
179
|
+
|
180
|
+
ZabconCommand.add_command "show env" do
|
181
|
+
set_method do |params|
|
182
|
+
if params.empty?
|
183
|
+
if env.empty?
|
184
|
+
puts "No variables defined"
|
185
|
+
else
|
186
|
+
env.each { |key,val|
|
187
|
+
puts "#{key} : #{val.inspect}"
|
188
|
+
}
|
189
|
+
end
|
190
|
+
else
|
191
|
+
params.each { |item|
|
192
|
+
if env[item].nil?
|
193
|
+
puts "#{item} *** Not Defined ***"
|
194
|
+
else
|
195
|
+
puts "#{item} : #{env[item].inspect}"
|
196
|
+
end
|
197
|
+
}
|
198
|
+
end
|
199
|
+
end
|
200
|
+
set_help_tag :show_env
|
201
|
+
set_flag :array_params
|
202
|
+
end
|
203
|
+
|
204
|
+
ZabconCommand.add_command "set var" do
|
205
|
+
set_method do |params|
|
206
|
+
params.each { |key,val|
|
207
|
+
GlobalVars.instance[key]=val
|
208
|
+
puts "#{key} : #{val.inspect}"
|
209
|
+
}
|
210
|
+
end
|
211
|
+
set_help_tag :set_var
|
212
|
+
end
|
213
|
+
|
214
|
+
ZabconCommand.add_command "unset var" do
|
215
|
+
set_method do |params|
|
216
|
+
if params.empty?
|
217
|
+
puts "No variables given to unset"
|
218
|
+
else
|
219
|
+
params.each { |item|
|
220
|
+
if GlobalVars.instance[item].nil?
|
221
|
+
puts "#{item} *** Not Defined ***"
|
222
|
+
else
|
223
|
+
GlobalVars.instance.delete(item)
|
224
|
+
puts "#{item} Deleted"
|
225
|
+
end
|
226
|
+
}
|
227
|
+
end
|
228
|
+
end
|
229
|
+
set_flag :array_params
|
230
|
+
set_help_tag :unset_var
|
231
|
+
end
|
232
|
+
|
233
|
+
ZabconCommand.add_command "raw api" do
|
234
|
+
set_method do |params|
|
235
|
+
api_func=params[:method]
|
236
|
+
params=params[:params]
|
237
|
+
|
238
|
+
server.connection.raw_api(api_func, params)
|
239
|
+
end
|
240
|
+
|
241
|
+
arg_processor do |params,valid_args,flags|
|
242
|
+
parameter_error "Command \"raw api\" requires parameters" if params.empty?
|
243
|
+
params=params.split2
|
244
|
+
api_func=params[0]
|
245
|
+
params.delete_at(0)
|
246
|
+
retval= params_to_hash(params.join(" "))
|
247
|
+
{:method=>api_func, :params=>retval}
|
248
|
+
end
|
249
|
+
set_flag :login_required
|
250
|
+
set_flag :print_output
|
251
|
+
set_help_tag :raw_api
|
252
|
+
result_type :raw_api
|
253
|
+
end
|
254
|
+
|
255
|
+
ZabconCommand.add_command "raw json" do
|
256
|
+
set_method do |params|
|
257
|
+
begin
|
258
|
+
result=server.connection.do_request(params)
|
259
|
+
return result["result"]
|
260
|
+
rescue ZbxAPI_GeneralError => e
|
261
|
+
puts "An error was received from the Zabbix server"
|
262
|
+
if e.message.class==Hash
|
263
|
+
puts "Error code: #{e.message["code"]}"
|
264
|
+
puts "Error message: #{e.message["message"]}"
|
265
|
+
puts "Error data: #{e.message["data"]}"
|
266
|
+
end
|
267
|
+
puts "Original text:"
|
268
|
+
puts parameters
|
269
|
+
puts
|
270
|
+
return nil
|
271
|
+
end
|
272
|
+
end
|
273
|
+
set_flag :login_required
|
274
|
+
set_flag :print_output
|
275
|
+
set_help_tag :raw_api
|
276
|
+
result_type :raw_api
|
277
|
+
end
|
278
|
+
|
279
|
+
ZabconCommand.add_command "test" do
|
280
|
+
set_method do |params|
|
281
|
+
test="one=[one two three four=4] two three four=five=six=seven"
|
282
|
+
p test
|
283
|
+
p params_to_hash2(test)
|
284
|
+
end
|
285
|
+
# set_flag :print_output
|
286
|
+
set_help_tag :print
|
287
|
+
result_type :none
|
288
|
+
end
|
289
|
+
|
290
|
+
###############################################################################
|
291
|
+
#Application Application#
|
292
|
+
###############################################################################
|
293
|
+
|
294
|
+
ZabconCommand.add_command "add app" do
|
295
|
+
set_method do |params|
|
296
|
+
server.connection.application.create(params)
|
297
|
+
end
|
298
|
+
set_flag :login_required
|
299
|
+
set_flag :print_output
|
300
|
+
set_help_tag :add_app
|
301
|
+
end
|
302
|
+
|
303
|
+
|
304
|
+
ZabconCommand.add_command "get app" do
|
305
|
+
set_method do |params|
|
306
|
+
server.connection.application.get(params)
|
307
|
+
end
|
308
|
+
set_flag :login_required
|
309
|
+
set_flag :print_output
|
310
|
+
set_help_tag :get_app
|
311
|
+
end
|
312
|
+
|
313
|
+
###############################################################################
|
314
|
+
#Host Host#
|
315
|
+
###############################################################################
|
316
|
+
|
317
|
+
ZabconCommand.add_command "add host" do
|
318
|
+
set_method do |params|
|
319
|
+
result=server.connection.host.create(params)
|
320
|
+
set_result_message "The following host was created: #{result['hostids']}"
|
321
|
+
result
|
322
|
+
end
|
323
|
+
set_flag :login_required
|
324
|
+
set_flag :print_output
|
325
|
+
set_help_tag :add_host
|
326
|
+
result_type :host
|
327
|
+
end
|
328
|
+
|
329
|
+
ZabconCommand.add_command "delete host" do
|
330
|
+
set_method do |params|
|
331
|
+
result=server.connection.host.delete(params)
|
332
|
+
set_result_message "The following host was deleted: #{result['hostids']}"
|
333
|
+
result
|
334
|
+
end
|
335
|
+
set_flag :login_required
|
336
|
+
set_flag :print_output
|
337
|
+
set_help_tag :delete_host
|
338
|
+
result_type :host
|
339
|
+
end
|
340
|
+
|
341
|
+
ZabconCommand.add_command "get host" do
|
342
|
+
set_method do |params|
|
343
|
+
server.connection.host.get(params)
|
344
|
+
end
|
345
|
+
default_show ["hostid", "host", "dns", "ip"]
|
346
|
+
set_flag :login_required
|
347
|
+
set_flag :print_output
|
348
|
+
set_help_tag :get_host
|
349
|
+
result_type :host
|
350
|
+
end
|
351
|
+
|
352
|
+
###############################################################################
|
353
|
+
#Host Group Host Group#
|
354
|
+
###############################################################################
|
355
|
+
|
356
|
+
ZabconCommand.add_command "add host group" do
|
357
|
+
set_method do |params|
|
358
|
+
server.connection.hostgroup.create(params)
|
359
|
+
end
|
360
|
+
set_flag :login_required
|
361
|
+
set_flag :print_output
|
362
|
+
set_help_tag :add_host_group
|
363
|
+
result_type :host
|
364
|
+
end
|
365
|
+
|
366
|
+
ZabconCommand.add_command "get host group" do
|
367
|
+
set_method do |params|
|
368
|
+
server.connection.hostgroup.get(params)
|
369
|
+
end
|
370
|
+
default_show ["groupid", "name"]
|
371
|
+
set_flag :print_output
|
372
|
+
set_help_tag :get_host_group
|
373
|
+
result_type :host
|
374
|
+
end
|
375
|
+
|
376
|
+
###############################################################################
|
377
|
+
#Item Item#
|
378
|
+
###############################################################################
|
379
|
+
|
380
|
+
|
381
|
+
ZabconCommand.add_command "add item" do
|
382
|
+
set_method do |params|
|
383
|
+
server.connection.item.create(params)
|
384
|
+
end
|
385
|
+
set_flag :login_required
|
386
|
+
set_flag :print_output
|
387
|
+
set_help_tag :add_item
|
388
|
+
result_type :item
|
389
|
+
end
|
390
|
+
|
391
|
+
ZabconCommand.add_command "delete item" do
|
392
|
+
set_method do |params|
|
393
|
+
server.connection.item.delete(params)
|
394
|
+
end
|
395
|
+
set_flag :login_required
|
396
|
+
set_flag :print_output
|
397
|
+
set_help_tag :delete_item
|
398
|
+
result_type :item
|
399
|
+
end
|
400
|
+
|
401
|
+
|
402
|
+
ZabconCommand.add_command "get item" do
|
403
|
+
set_method do |params|
|
404
|
+
server.connection.item.get(params)
|
405
|
+
end
|
406
|
+
set_valid_args ['itemids','hostids','groupids', 'triggerids','applicationids',
|
407
|
+
'status','templated_items','editable','count','pattern','limit',
|
408
|
+
'order', 'show']
|
409
|
+
default_show ["itemid", "key_", "description"]
|
410
|
+
set_flag :login_required
|
411
|
+
set_flag :print_output
|
412
|
+
set_help_tag :get_item
|
413
|
+
result_type :item
|
414
|
+
end
|
415
|
+
|
416
|
+
###############################################################################
|
417
|
+
#Trigger Trigger#
|
418
|
+
###############################################################################
|
419
|
+
|
420
|
+
#TODO Improve parameter checking for add trigger
|
421
|
+
# addtrigger( { trigger1, trigger2, triggern } )
|
422
|
+
# Only expression and description are mandatory.
|
423
|
+
# { { expression, description, type, priority, status, comments, url }, { ...} }
|
424
|
+
ZabconCommand.add_command "add trigger" do
|
425
|
+
set_method do |params|
|
426
|
+
server.connection.trigger.create(params)
|
427
|
+
end
|
428
|
+
default_show ["triggerid","description", "status"]
|
429
|
+
set_flag :login_required
|
430
|
+
set_flag :print_output
|
431
|
+
set_help_tag :add_trigger
|
432
|
+
result_type :trigger
|
433
|
+
end
|
434
|
+
|
435
|
+
ZabconCommand.add_command "get trigger" do
|
436
|
+
set_method do |params|
|
437
|
+
server.connection.trigger.get(params)
|
438
|
+
end
|
439
|
+
default_show ["triggerid","description", "status"]
|
440
|
+
set_flag :login_required
|
441
|
+
set_flag :print_output
|
442
|
+
set_help_tag :get_trigger
|
443
|
+
result_type :trigger
|
444
|
+
end
|
445
|
+
|
446
|
+
###############################################################################
|
447
|
+
#User User#
|
448
|
+
###############################################################################
|
449
|
+
|
450
|
+
ZabconCommand.add_command "add user" do
|
451
|
+
set_method do |params|
|
452
|
+
uid=server.connection.user.create(params)
|
453
|
+
puts "Created userid: #{uid["userids"]}"
|
454
|
+
end
|
455
|
+
set_flag :login_required
|
456
|
+
set_help_tag :add_user
|
457
|
+
result_type :user
|
458
|
+
end
|
459
|
+
|
460
|
+
ZabconCommand.add_command "delete user" do
|
461
|
+
set_method do |params|
|
462
|
+
id=0
|
463
|
+
if !params["name"].nil?
|
464
|
+
users=server.connection.user.get({"pattern"=>params["name"], "extendoutput"=>true})
|
465
|
+
users.each { |user| id=user["userid"] if user["alias"]==parameter }
|
466
|
+
else
|
467
|
+
id=params["id"]
|
468
|
+
end
|
469
|
+
result=@connection.user.delete(id)
|
470
|
+
|
471
|
+
if !result.empty?
|
472
|
+
puts "Deleted user id #{result["userids"]}"
|
473
|
+
else
|
474
|
+
puts "Error deleting #{params.to_a[0][1]}"
|
475
|
+
end
|
476
|
+
end
|
477
|
+
set_flag :login_required
|
478
|
+
set_help_tag :delete_user
|
479
|
+
result_type :user
|
480
|
+
end
|
481
|
+
|
482
|
+
ZabconCommand.add_command "get user" do
|
483
|
+
set_method do |params|
|
484
|
+
server.connection.user.get(params)
|
485
|
+
end
|
486
|
+
default_show ["userid","name","surname","alias"]
|
487
|
+
set_flag :login_required
|
488
|
+
set_flag :print_output
|
489
|
+
set_help_tag :get_user
|
490
|
+
result_type :user
|
491
|
+
end
|
492
|
+
|
493
|
+
#TODO Test this command
|
494
|
+
ZabconCommand.add_command "update user" do
|
495
|
+
set_method do |params|
|
496
|
+
if parameters.nil? or parameters["userid"].nil? then
|
497
|
+
puts "Edit User requires arguments, valid fields are:"
|
498
|
+
puts "name, surname, alias, passwd, url, autologin, autologout, lang, theme, refresh"
|
499
|
+
puts "rows_per_page, type"
|
500
|
+
puts "userid is a required field"
|
501
|
+
puts "example: edit user userid=<id> name=someone alias=username passwd=pass autologout=0"
|
502
|
+
return nil
|
503
|
+
else
|
504
|
+
p_keys = parameters.keys
|
505
|
+
|
506
|
+
valid_parameters.each {|key| p_keys.delete(key)}
|
507
|
+
if !p_keys.empty? then
|
508
|
+
puts "Invalid items"
|
509
|
+
p p_keys
|
510
|
+
return false
|
511
|
+
elsif parameters["userid"].nil?
|
512
|
+
puts "Missing required userid statement."
|
513
|
+
end
|
514
|
+
@connection.user.update([parameters])
|
515
|
+
end
|
516
|
+
end
|
517
|
+
set_valid_args ['userid','name', 'surname', 'alias', 'passwd', 'url',
|
518
|
+
'autologin', 'autologout', 'lang', 'theme', 'refresh',
|
519
|
+
'rows_per_page', 'type',]
|
520
|
+
default_show ["itemid", "key_", "description"]
|
521
|
+
set_flag :login_required
|
522
|
+
set_flag :print_output
|
523
|
+
set_help_tag :update_user
|
524
|
+
result_type :user
|
525
|
+
end
|
526
|
+
|
527
|
+
###############################################################################
|
528
|
+
#Special Special#
|
529
|
+
###############################################################################
|
530
|
+
|
531
|
+
|
532
|
+
#ZabconCommand.add_command "add host" do
|
533
|
+
# set_method do |params|
|
534
|
+
# result=server.connection.host.create(params)
|
535
|
+
# set_result_message "The following host was created: #{result['hostids']}"
|
536
|
+
# result
|
537
|
+
# end
|
538
|
+
# set_flag :login_required
|
539
|
+
# set_flag :print_output
|
540
|
+
# set_help_tag :add_host
|
541
|
+
# result_type :host
|
542
|
+
#end
|
543
|
+
|
544
|
+
ZabconCommand.add_command "clone host" do
|
545
|
+
set_method do |params|
|
546
|
+
source=params["source"]
|
547
|
+
p source_info=server.connection.host.get({"output"=>"extend", "selectParentTemplates"=>"refer", "filter"=>{"host"=>[source]}})
|
548
|
+
p source_hostid=source_info[0]["hostid"]
|
549
|
+
p source_templates=source_info[0]["parentTemplates"].map{|i| i["hostid"]}
|
550
|
+
|
551
|
+
end
|
552
|
+
|
553
|
+
set_flag :login_required
|
554
|
+
set_flag :print_output
|
555
|
+
set_help_tag :clone_host
|
556
|
+
result_type :host
|
557
|
+
end
|
558
|
+
|