zabcon 0.0.370 → 0.0.392
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 +2 -372
- data/libs/command_tree.rb +9 -8
- data/libs/lexer.rb +135 -29
- data/libs/revision.rb +1 -1
- data/libs/utility_items.rb +21 -2
- data/libs/zabbix_server.rb +79 -135
- data/libs/zabcon_commands.rb +92 -16
- data/libs/zabcon_core.rb +79 -35
- data/libs/zabcon_globals.rb +12 -116
- data/zabcon.conf.default +25 -3
- data/zabcon.rb +105 -43
- metadata +17 -46
data/libs/revision.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
REVISION=
|
1
|
+
REVISION=392
|
data/libs/utility_items.rb
CHANGED
@@ -17,8 +17,8 @@
|
|
17
17
|
|
18
18
|
##########################################
|
19
19
|
# Subversion information
|
20
|
-
# $Id: utility_items.rb
|
21
|
-
# $Revision:
|
20
|
+
# $Id: utility_items.rb 379 2012-04-21 03:43:19Z nelsonab $
|
21
|
+
# $Revision: 379 $
|
22
22
|
##########################################
|
23
23
|
|
24
24
|
require "zbxapi/zdebug"
|
@@ -27,8 +27,27 @@ Object.class_eval do
|
|
27
27
|
def env
|
28
28
|
EnvVars.instance
|
29
29
|
end
|
30
|
+
|
31
|
+
def vars
|
32
|
+
GlobalVars.instance
|
33
|
+
end
|
30
34
|
end
|
31
35
|
|
36
|
+
Hash.class_eval do
|
37
|
+
def select_keys(keys)
|
38
|
+
result={}
|
39
|
+
keys.each {|k|
|
40
|
+
result.merge!({k=>self[k]})
|
41
|
+
}
|
42
|
+
result
|
43
|
+
end
|
44
|
+
|
45
|
+
def delete_keys(keys)
|
46
|
+
keys.each {|k|
|
47
|
+
self.delete(k)
|
48
|
+
}
|
49
|
+
end
|
50
|
+
end
|
32
51
|
|
33
52
|
String.class_eval do
|
34
53
|
# String::split2(*options)
|
data/libs/zabbix_server.rb
CHANGED
@@ -18,8 +18,8 @@
|
|
18
18
|
|
19
19
|
##########################################
|
20
20
|
# Subversion information
|
21
|
-
# $Id: zabbix_server.rb
|
22
|
-
# $Revision:
|
21
|
+
# $Id: zabbix_server.rb 384 2012-04-23 04:50:17Z nelsonab $
|
22
|
+
# $Revision: 384 $
|
23
23
|
##########################################
|
24
24
|
|
25
25
|
require 'yaml'
|
@@ -60,57 +60,72 @@ class ZabbixServer
|
|
60
60
|
end
|
61
61
|
end
|
62
62
|
|
63
|
-
attr_accessor :server_url, :username, :password
|
63
|
+
# attr_accessor :server_url, :username, :password
|
64
64
|
attr_reader :version, :connected, :connection
|
65
65
|
|
66
66
|
def initialize
|
67
|
-
@
|
68
|
-
|
69
|
-
|
67
|
+
@credentials={}
|
68
|
+
#@server_url=nil
|
69
|
+
#@username=nil
|
70
|
+
#@password=nil
|
70
71
|
@connected=false
|
71
72
|
@version=nil
|
72
73
|
@connection=nil
|
73
74
|
end
|
74
75
|
|
76
|
+
def server_url
|
77
|
+
@credentials["server"]
|
78
|
+
end
|
79
|
+
|
80
|
+
def server_url=(server)
|
81
|
+
@credentials["server"]=server
|
82
|
+
end
|
83
|
+
|
84
|
+
def username
|
85
|
+
@credentials["username"]
|
86
|
+
end
|
87
|
+
|
88
|
+
def username=(username)
|
89
|
+
@credentials["username"]=username
|
90
|
+
end
|
91
|
+
|
92
|
+
def password
|
93
|
+
@credentials["password"]
|
94
|
+
end
|
95
|
+
|
96
|
+
def password=(password)
|
97
|
+
@credentials["password"]=password
|
98
|
+
end
|
99
|
+
|
75
100
|
#login
|
76
101
|
# Perform the actual login to the Zabbix server
|
77
102
|
# If the object variables url, username, and password have not been
|
78
103
|
# set previously, an attempt will be made to use the global environment
|
79
104
|
# variables. If that does not work an exception will be raised.
|
80
|
-
def login
|
81
|
-
@
|
82
|
-
@username = @username.nil? ? env["username"] : @username
|
83
|
-
@password = @password.nil? ? env["password"] : @password
|
105
|
+
def login(server={})
|
106
|
+
@credentials.merge!(server)
|
84
107
|
|
85
108
|
error_msg=[]
|
86
|
-
error_msg<<"Url not set" if
|
87
|
-
error_msg<<"Username not set" if
|
88
|
-
error_msg<<"Password not set" if
|
109
|
+
error_msg<<"Url not set" if !@credentials["server"]
|
110
|
+
error_msg<<"Username not set" if !@credentials["username"]
|
111
|
+
error_msg<<"Password not set" if !@credentials["password"]
|
89
112
|
|
90
113
|
raise ConnectionProblem.new(error_msg.join(", ")) if !error_msg.empty?
|
91
114
|
|
92
|
-
@connection = ZabbixServer_overload.new(@
|
93
|
-
if
|
94
|
-
|
95
|
-
|
96
|
-
@connection.set_proxy(env["proxy_server"],env["proxy_port"],
|
97
|
-
env["proxy_user"],env["proxy_password"])
|
115
|
+
@connection = ZabbixServer_overload.new(@credentials["server"],env["debug"])
|
116
|
+
if @credentials["proxy_server"]
|
117
|
+
@connection.set_proxy(@credentials["proxy_server"],@credentials["proxy_port"],
|
118
|
+
@credentials["proxy_user"],@credentials["proxy_password"])
|
98
119
|
end
|
99
|
-
@connection.login(@username,@password)
|
120
|
+
@connection.login(@credentials["username"],@credentials["password"])
|
100
121
|
@connected=true
|
101
|
-
|
122
|
+
ServerCredentials.instance[@credentials["name"]]["auth"]=
|
123
|
+
@connection.auth
|
102
124
|
@version=@connection.API_version
|
103
125
|
puts "#{@server_url} connected" if env["echo"]
|
104
126
|
puts "API Version: #{@version}" if env["echo"]
|
105
127
|
|
106
|
-
|
107
|
-
path=File.expand_path(env["session_file"])
|
108
|
-
File.open(path,"w") do |f|
|
109
|
-
f.write({"auth"=>@connection.auth}.to_yaml)
|
110
|
-
end
|
111
|
-
#Enforce that the auth cache file isn't world readable
|
112
|
-
File.chmod(0600,path)
|
113
|
-
end
|
128
|
+
save_auth
|
114
129
|
|
115
130
|
end
|
116
131
|
|
@@ -124,16 +139,46 @@ class ZabbixServer
|
|
124
139
|
@connection=nil
|
125
140
|
@connected=false
|
126
141
|
@version=nil
|
142
|
+
|
143
|
+
if @credentials["name"]
|
144
|
+
ServerCredentials.instance[@credentials["name"]].delete("auth")
|
145
|
+
end
|
127
146
|
GlobalVars.instance.delete("auth")
|
128
|
-
|
147
|
+
save_auth
|
148
|
+
puts "Logout complete from #{server_url}" if env["echo"]
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
def save_auth
|
153
|
+
if env["session_file"] && !env["session_file"].empty?
|
154
|
+
path=File.expand_path(env["session_file"])
|
155
|
+
creds={}
|
156
|
+
ServerCredentials.instance.each {|name,values|
|
157
|
+
creds[name]=values["auth"] if values["auth"]
|
158
|
+
}
|
159
|
+
File.open(path,"w") do |f|
|
160
|
+
f.write({"auth"=>creds}.to_yaml)
|
161
|
+
end
|
162
|
+
#Enforce that the auth cache file isn't world readable
|
163
|
+
File.chmod(0600,path)
|
129
164
|
end
|
165
|
+
|
130
166
|
end
|
131
167
|
|
132
|
-
def use_auth(
|
133
|
-
|
168
|
+
def use_auth(server)
|
169
|
+
debug(6,:msg=>"Server",:var=>server)
|
170
|
+
@credentials.merge!(server)
|
171
|
+
debug(6,:msg=>"credentials",:var=>@credentials)
|
172
|
+
|
173
|
+
# @server_url = server["server"] || @server_url
|
174
|
+
|
175
|
+
@connection = ZabbixServer_overload.new(server_url,env["debug"])
|
176
|
+
@connection.auth=@credentials["auth"]
|
177
|
+
if @credentials["proxy_server"]
|
178
|
+
@connection.set_proxy(@credentials["proxy_server"],@credentials["proxy_port"],
|
179
|
+
@credentials["proxy_user"],@credentials["proxy_password"])
|
180
|
+
end
|
134
181
|
|
135
|
-
@connection = ZabbixServer_overload.new(@server_url,env["debug"])
|
136
|
-
@connection.auth=auth
|
137
182
|
major,minor=@connection.do_request(@connection.json_obj('APIInfo.version',{}))['result'].split('.')
|
138
183
|
@connection.major=major.to_i
|
139
184
|
@connection.minor=minor.to_i
|
@@ -163,107 +208,6 @@ class ZabbixServer
|
|
163
208
|
@connection.login(@user,@password)
|
164
209
|
end
|
165
210
|
|
166
|
-
# def getuser(parameters)
|
167
|
-
# debug(6,parameters)
|
168
|
-
#
|
169
|
-
# result=@connection.user.get(parameters)
|
170
|
-
# {:class=>:user, :result=>result}
|
171
|
-
# end
|
172
|
-
#
|
173
|
-
# def gethost(parameters)
|
174
|
-
# debug(6,parameters)
|
175
|
-
#
|
176
|
-
# result=@connection.host.get(parameters)
|
177
|
-
# {:class=>:host, :result=>result}
|
178
|
-
# end
|
179
|
-
|
180
|
-
# def addhost(parameters)
|
181
|
-
# debug(6,parameters)
|
182
|
-
# result=@connection.host.create(parameters)
|
183
|
-
# {:class=>:host, :message=>"The following host was created: #{result['hostids']}", :result=>result}
|
184
|
-
# end
|
185
|
-
|
186
|
-
# def deletehost(parameters)
|
187
|
-
# debug(6,parameters)
|
188
|
-
# result=@connection.host.delete(parameters)
|
189
|
-
# {:class=>:host, :message=>"The following host(s) was/were deleted: #{result['hostids']}", :result=>result}
|
190
|
-
# end
|
191
|
-
|
192
|
-
# def getitem(parameters)
|
193
|
-
# debug(6,parameters)
|
194
|
-
#
|
195
|
-
# result=@connection.item.get(parameters)
|
196
|
-
# {:class=>:item, :result=>result}
|
197
|
-
# end
|
198
|
-
|
199
|
-
# def additem(parameters)
|
200
|
-
# debug(6,parameters)
|
201
|
-
# {:class=>:item, :result=>@connection.item.create(parameters)}
|
202
|
-
# end
|
203
|
-
|
204
|
-
# def deleteitem(parameters)
|
205
|
-
# debug(6,parameters)
|
206
|
-
# {:class=>:item, :result=>@connection.item.delete(parameters)}
|
207
|
-
# end
|
208
|
-
|
209
|
-
# def adduser(parameters)
|
210
|
-
# debug(6,parameters)
|
211
|
-
# begin
|
212
|
-
# uid=@connection.user.create(parameters)
|
213
|
-
# puts "Created userid: #{uid["userids"]}"
|
214
|
-
# rescue ZbxAPI_ParameterError => e
|
215
|
-
# puts "Add user failed, error: #{e.message}"
|
216
|
-
# end
|
217
|
-
# end
|
218
|
-
|
219
|
-
# def deleteuser(parameter)
|
220
|
-
# debug(6,parameter)
|
221
|
-
# id=0 #id to delete
|
222
|
-
## if parameters.nil? then
|
223
|
-
## puts "User id required"
|
224
|
-
## return
|
225
|
-
## end
|
226
|
-
#
|
227
|
-
# if !parameter["name"].nil?
|
228
|
-
# users=@connection.user.get({"pattern"=>parameter["name"], "extendoutput"=>true})
|
229
|
-
# users.each { |user| id=user["userid"] if user["alias"]==parameter }
|
230
|
-
# else
|
231
|
-
# id=parameter["id"]
|
232
|
-
# end
|
233
|
-
# result=@connection.user.delete(id)
|
234
|
-
# if !result.empty?
|
235
|
-
# puts "Deleted user id #{result["userids"]}"
|
236
|
-
# else
|
237
|
-
# puts "Error deleting #{parameter.to_a[0][1]}"
|
238
|
-
# end
|
239
|
-
# end
|
240
|
-
|
241
|
-
# def updateuser(parameters)
|
242
|
-
# debug(6,parameters)
|
243
|
-
# valid_parameters=['userid','name', 'surname', 'alias', 'passwd', 'url', 'autologin',
|
244
|
-
# 'autologout', 'lang', 'theme', 'refresh', 'rows_per_page', 'type',]
|
245
|
-
# if parameters.nil? or parameters["userid"].nil? then
|
246
|
-
# puts "Edit User requires arguments, valid fields are:"
|
247
|
-
# puts "name, surname, alias, passwd, url, autologin, autologout, lang, theme, refresh"
|
248
|
-
# puts "rows_per_page, type"
|
249
|
-
# puts "userid is a required field"
|
250
|
-
# puts "example: edit user userid=<id> name=someone alias=username passwd=pass autologout=0"
|
251
|
-
# return false
|
252
|
-
# else
|
253
|
-
# p_keys = parameters.keys
|
254
|
-
#
|
255
|
-
# valid_parameters.each {|key| p_keys.delete(key)}
|
256
|
-
# if !p_keys.empty? then
|
257
|
-
# puts "Invalid items"
|
258
|
-
# p p_keys
|
259
|
-
# return false
|
260
|
-
# elsif parameters["userid"].nil?
|
261
|
-
# puts "Missing required userid statement."
|
262
|
-
# end
|
263
|
-
# p @connection.user.update([parameters]) #TODO: remove print statement or comment if needed
|
264
|
-
# end
|
265
|
-
# end
|
266
|
-
|
267
211
|
def addusermedia(parameters)
|
268
212
|
debug(6,:var=>parameters)
|
269
213
|
valid_parameters=["userid", "mediatypeid", "sendto", "severity", "active", "period"]
|
data/libs/zabcon_commands.rb
CHANGED
@@ -17,8 +17,8 @@
|
|
17
17
|
|
18
18
|
##########################################
|
19
19
|
# Subversion information
|
20
|
-
# $Id: zabcon_commands.rb
|
21
|
-
# $Revision:
|
20
|
+
# $Id: zabcon_commands.rb 392 2012-05-17 22:24:15Z nelsonab $
|
21
|
+
# $Revision: 392 $
|
22
22
|
##########################################
|
23
23
|
|
24
24
|
require "zbxapi/zdebug"
|
@@ -64,10 +64,18 @@ end
|
|
64
64
|
ZabconCommand.add_command "login" do
|
65
65
|
set_method do |params|
|
66
66
|
# login server username password
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
67
|
+
servers=ServerCredentials.instance
|
68
|
+
if servers[params[0]]
|
69
|
+
creds=servers[params[0]]
|
70
|
+
elsif params.length==0
|
71
|
+
creds=servers["global"]
|
72
|
+
else
|
73
|
+
creds=servers["global"].select_keys(["proxy_server",
|
74
|
+
"proxy_port","proxy_user","proxy_password"])
|
75
|
+
creds.merge!({"server"=>params[0],"username"=>params[1],
|
76
|
+
"password"=>params[2]})
|
77
|
+
end
|
78
|
+
server.login(creds)
|
71
79
|
end
|
72
80
|
set_help_tag :help
|
73
81
|
# set_flag :array_params
|
@@ -93,11 +101,11 @@ end
|
|
93
101
|
ZabconCommand.add_command "logout" do
|
94
102
|
set_method do
|
95
103
|
server.logout
|
96
|
-
path=File.expand_path(env["session_file"])
|
97
|
-
begin
|
98
|
-
|
99
|
-
rescue Errno::ENOENT
|
100
|
-
end
|
104
|
+
#path=File.expand_path(env["session_file"])
|
105
|
+
#begin
|
106
|
+
# File.delete(path)
|
107
|
+
#rescue Errno::ENOENT
|
108
|
+
#end
|
101
109
|
end
|
102
110
|
set_help_tag :logout
|
103
111
|
end
|
@@ -229,6 +237,30 @@ ZabconCommand.add_command "show env" do
|
|
229
237
|
tokenizer SimpleTokenizer
|
230
238
|
end
|
231
239
|
|
240
|
+
ZabconCommand.add_command "show credentials" do
|
241
|
+
set_method do |params|
|
242
|
+
if params.empty?
|
243
|
+
if ServerCredentials.instance.empty?
|
244
|
+
puts "No Server Credentials Defined"
|
245
|
+
else
|
246
|
+
ServerCredentials.instance.each{|k,v|
|
247
|
+
puts "#{k} : #{v.inspect}"
|
248
|
+
}
|
249
|
+
end
|
250
|
+
else
|
251
|
+
params.each {|item|
|
252
|
+
if ServerCredentials.instance[item].nil?
|
253
|
+
puts "#{item} is not a valid server name"
|
254
|
+
else
|
255
|
+
puts "#{item} : #{ServerCredentials.instance[item].inspect}"
|
256
|
+
end
|
257
|
+
}
|
258
|
+
end
|
259
|
+
end
|
260
|
+
set_help_tag :show_credentials
|
261
|
+
tokenizer(SimpleTokenizer.options(:remove_whitespace))
|
262
|
+
end
|
263
|
+
|
232
264
|
ZabconCommand.add_command "set var" do
|
233
265
|
set_method do |params|
|
234
266
|
params.each { |key,val|
|
@@ -305,8 +337,7 @@ ZabconCommand.add_command "raw api" do
|
|
305
337
|
set_flag :print_output
|
306
338
|
set_help_tag :raw_api
|
307
339
|
result_type :raw_api
|
308
|
-
tokenizer
|
309
|
-
# tokenizer SimpleTokenizer
|
340
|
+
tokenizer ExpressionTokenizer
|
310
341
|
end
|
311
342
|
|
312
343
|
ZabconCommand.add_command "raw json" do
|
@@ -331,7 +362,7 @@ ZabconCommand.add_command "raw json" do
|
|
331
362
|
#arg_processor do |params,args,flags|
|
332
363
|
# params
|
333
364
|
#end
|
334
|
-
set_flag :login_required
|
365
|
+
# set_flag :login_required
|
335
366
|
set_flag :print_output
|
336
367
|
set_help_tag :raw_api
|
337
368
|
result_type :raw_api
|
@@ -451,6 +482,45 @@ end
|
|
451
482
|
#Item Item#
|
452
483
|
###############################################################################
|
453
484
|
|
485
|
+
# Item types
|
486
|
+
# 0 Zabbix agent - Passive
|
487
|
+
# 1 SNMPv1 agent - SNMP
|
488
|
+
# 2 Zabbix trapper - Trapper
|
489
|
+
# 3 Simple check - Simple
|
490
|
+
# 4 SNMPv2 agent - SNMP2
|
491
|
+
# 5 Zabbix internal - Internal
|
492
|
+
# 6 SNMPv3 agent - SNMP3
|
493
|
+
# 7 Zabbix agent (active) - Active
|
494
|
+
# 8 Zabbix aggregate - Aggregate
|
495
|
+
# 10 External check - External
|
496
|
+
# 11 Database monitor - Database
|
497
|
+
# 12 IPMI agent - IPMI
|
498
|
+
# 13 SSH agent - SSH
|
499
|
+
# 14 TELNET agent - Telnet
|
500
|
+
# 15 Calculated - Calculated
|
501
|
+
|
502
|
+
#value types
|
503
|
+
# 0 Numeric (float)
|
504
|
+
# 1 Character
|
505
|
+
# 2 Log
|
506
|
+
# 3 Numeric (unsigned)
|
507
|
+
# 4 Text
|
508
|
+
|
509
|
+
# Data Types
|
510
|
+
# 0 Decimal
|
511
|
+
# 1 Octal
|
512
|
+
# 2 Hexadecimal
|
513
|
+
|
514
|
+
# Status Types
|
515
|
+
# 0 Active
|
516
|
+
# 1 Disabled
|
517
|
+
# 2 Not Supported
|
518
|
+
|
519
|
+
# Delta Types
|
520
|
+
# 0 As is
|
521
|
+
# 1 Delta (Speed per second)
|
522
|
+
# 2 Delta (simple change)
|
523
|
+
|
454
524
|
|
455
525
|
ZabconCommand.add_command "add item" do
|
456
526
|
set_method do |params|
|
@@ -478,8 +548,14 @@ ZabconCommand.add_command "get item" do
|
|
478
548
|
server.connection.item.get(params)
|
479
549
|
end
|
480
550
|
set_valid_args 'itemids','hostids','groupids', 'triggerids','applicationids',
|
481
|
-
'
|
482
|
-
'
|
551
|
+
'editable','pattern','limit','search','nodeids','templateids',
|
552
|
+
'proxyids','graphids','webitems','inherited','templated','host',
|
553
|
+
'monitored','filter','group','application','belongs',
|
554
|
+
'with_triggers','startSearch','excludeSearch','searchWildcardsEnabled',
|
555
|
+
'output','select_hosts','select_triggers','select_graphs',
|
556
|
+
'select_applications','countOutput','groupOutput','preservekeys',
|
557
|
+
'sortfield','sortorder','show'
|
558
|
+
|
483
559
|
default_show ["itemid", "key_", "description"]
|
484
560
|
set_flag :login_required
|
485
561
|
set_flag :print_output
|