zabcon 0.0.1
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 +10 -0
- data/libs/argument_processor.rb +768 -0
- data/libs/command_help.rb +106 -0
- data/libs/command_tree.rb +307 -0
- data/libs/defines.rb +46 -0
- data/libs/exceptions.rb +119 -0
- data/libs/help.xml +275 -0
- data/libs/input.rb +55 -0
- data/libs/printer.rb +383 -0
- data/libs/zabcon_core.rb +742 -0
- data/libs/zabcon_exceptions.rb +45 -0
- data/libs/zabcon_globals.rb +210 -0
- data/libs/zbxcliserver.rb +310 -0
- data/libs/zdebug.rb +163 -0
- data/zabcon.conf.default +6 -0
- data/zabcon.rb +236 -0
- metadata +124 -0
data/libs/exceptions.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
#License:: LGPL 2.1 http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
|
2
|
+
#Copyright:: Copyright (C) 2009,2010 Andrew Nelson nelsonab(at)red-tux(dot)net
|
3
|
+
#
|
4
|
+
#This library is free software; you can redistribute it and/or
|
5
|
+
#modify it under the terms of the GNU Lesser General Public
|
6
|
+
#License as published by the Free Software Foundation; either
|
7
|
+
#version 2.1 of the License, or (at your option) any later version.
|
8
|
+
#
|
9
|
+
#This library 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 GNU
|
12
|
+
#Lesser General Public License for more details.
|
13
|
+
#
|
14
|
+
#You should have received a copy of the GNU Lesser General Public
|
15
|
+
#License along with this library; 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: exceptions.rb 258 2010-12-28 22:49:21Z nelsonab $
|
21
|
+
# $Revision: 258 $
|
22
|
+
##########################################
|
23
|
+
|
24
|
+
require 'libs/zdebug'
|
25
|
+
|
26
|
+
#------------------------------------------------------------------------------
|
27
|
+
#
|
28
|
+
# Class ZError
|
29
|
+
#
|
30
|
+
# This is the superclass for all Zabcon and ZabbixAPI exceptions.
|
31
|
+
#
|
32
|
+
#------------------------------------------------------------------------------
|
33
|
+
class ZError < RuntimeError
|
34
|
+
|
35
|
+
include ZDebug
|
36
|
+
|
37
|
+
attr_reader :help_func, :message, :retry
|
38
|
+
|
39
|
+
# list of valid params
|
40
|
+
# :help_func, the help function with more information for the exception
|
41
|
+
# : retry, is the exception eligable for retry?
|
42
|
+
def initialize(message=nil, params=nil)
|
43
|
+
debug(2,self.class,"Exception raised")
|
44
|
+
debug(2,params,"params")
|
45
|
+
raise "Exception not called correctly" if params.class!=Hash if !params.nil?
|
46
|
+
params={} if params.nil?
|
47
|
+
@help_func=params[:help_func]
|
48
|
+
@message=message
|
49
|
+
@local_msg="Error"
|
50
|
+
@retry = params[:retry]
|
51
|
+
super(message)
|
52
|
+
end
|
53
|
+
|
54
|
+
def show_message
|
55
|
+
puts "** #{self.class}"
|
56
|
+
if @message.nil? && @help_func.nil?
|
57
|
+
puts "** #{@local_msg}"
|
58
|
+
puts
|
59
|
+
else
|
60
|
+
if !@message.nil?
|
61
|
+
@message.each_line {|line|
|
62
|
+
puts "** #{line}"
|
63
|
+
}
|
64
|
+
puts
|
65
|
+
puts "---" if !@help_func.nil?
|
66
|
+
end
|
67
|
+
@help_func.call if !@help_func.nil?
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
#show the backtrace, if override is true it will be shown even if there is a help function
|
72
|
+
def show_backtrace(override=false)
|
73
|
+
if @help_func.nil? || override
|
74
|
+
puts "Backtrace:"
|
75
|
+
puts backtrace.join("\n")
|
76
|
+
end
|
77
|
+
end
|
78
|
+
def retry?
|
79
|
+
#the following may be worthy of a sig on "The Daily WTF", but this guarantees a boolean gets returned.
|
80
|
+
#@retry is not guaranteed to be a boolean.
|
81
|
+
if @retry
|
82
|
+
return true
|
83
|
+
else
|
84
|
+
return false
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
class ParameterError < ZError
|
90
|
+
def initialize(message=nil, params=nil)
|
91
|
+
super(message, params)
|
92
|
+
@local_msg="Parameter Error"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
#----------------------------------------------------------
|
97
|
+
|
98
|
+
class ParameterError_Invalid < ZError
|
99
|
+
def initialize(message=nil, params=nil)
|
100
|
+
super(message, params)
|
101
|
+
@local_msg="Invalid Parameters"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class ParameterError_Missing < ZError
|
106
|
+
def initialize(message=nil, params=nil)
|
107
|
+
super(message, params)
|
108
|
+
@local_msg="Missing required parameters"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
#----------------------------------------------------------
|
113
|
+
|
114
|
+
class ParseError < ZError
|
115
|
+
def initialize(message=nil, params=nil)
|
116
|
+
super(message, params)
|
117
|
+
@local_msg="Parse Error"
|
118
|
+
end
|
119
|
+
end
|
data/libs/help.xml
ADDED
@@ -0,0 +1,275 @@
|
|
1
|
+
<?xml version="1.0" encoding="ISO-8859-15"?>
|
2
|
+
|
3
|
+
<!--
|
4
|
+
GPL 2.0 http://www.gnu.org/licenses/gpl-2.0.html
|
5
|
+
Zabbix CLI Tool and associated files
|
6
|
+
Copyright (C) 2009,2010 Andrew Nelson nelsonab(at)red-tux(dot)net
|
7
|
+
|
8
|
+
This program is free software; you can redistribute it and/or
|
9
|
+
modify it under the terms of the GNU General Public License
|
10
|
+
as published by the Free Software Foundation; either version 2
|
11
|
+
of the License, or (at your option) any later version.
|
12
|
+
|
13
|
+
This program is distributed in the hope that it will be useful,
|
14
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
GNU General Public License for more details.
|
17
|
+
|
18
|
+
You should have received a copy of the GNU General Public License
|
19
|
+
along with this program; if not, write to the Free Software
|
20
|
+
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
21
|
+
|
22
|
+
##########################################
|
23
|
+
Subversion information
|
24
|
+
$Id: help.xml 243 2010-11-11 15:59:02Z nelsonab $
|
25
|
+
$Revision: 243 $
|
26
|
+
##########################################
|
27
|
+
|
28
|
+
Zabcon help file
|
29
|
+
|
30
|
+
All help items except for "help" are organized alphabetically.
|
31
|
+
-->
|
32
|
+
|
33
|
+
<!-- 80 Col Marker ######################################################## -->
|
34
|
+
|
35
|
+
<zabcon_help>
|
36
|
+
<help language="english">
|
37
|
+
<item command="help">
|
38
|
+
General help
|
39
|
+
Prompt
|
40
|
+
The prompt has the following format "XXs >"
|
41
|
+
XX = number representing the current debug level, one or two digits
|
42
|
+
s = + or - symbol representing current login state.
|
43
|
+
+ represents a current login
|
44
|
+
|
45
|
+
Command help
|
46
|
+
<> Mandatory argument/command
|
47
|
+
() Optional argument/command
|
48
|
+
help - Show this help list
|
49
|
+
info - show information about current state
|
50
|
+
exit - quit
|
51
|
+
quit - quit
|
52
|
+
history - Show current history list
|
53
|
+
login <server> <username> <password>
|
54
|
+
- server is a fully qualified url
|
55
|
+
load configuration <config file>
|
56
|
+
- loads configuration settings from a file and logs
|
57
|
+
into server
|
58
|
+
import <file> - Import configuration from an XML file
|
59
|
+
set <command> - Sets various variables
|
60
|
+
debug <num> - Sets the debug level to <num> **Deprecated**
|
61
|
+
prompt - Prompt related commands
|
62
|
+
debug <1/0> - Turn the debug portion of the prompt on or off
|
63
|
+
lines <num> - Set the screen height. 0 turns off Screen pausing
|
64
|
+
|
65
|
+
Variables:
|
66
|
+
Zabcon has basic variable support, the commands are as follows
|
67
|
+
set var/env - sets a variable or variables
|
68
|
+
show var/env - shows the currently set variables
|
69
|
+
unset var - unsets a variable
|
70
|
+
|
71
|
+
To use a variable preface the name with a $ character such as $variable.
|
72
|
+
If the $ character is escaped with a \ variable substitution will not occur.
|
73
|
+
Variables will be substituted if they are found within string blocks enclosed
|
74
|
+
by either single or double quotes.
|
75
|
+
|
76
|
+
One variable is automatically assigned upon login, auth. This is the
|
77
|
+
authorization token from the server.
|
78
|
+
|
79
|
+
Environmental variables cannot be used for substitution at this time, they
|
80
|
+
control the various aspects behind the scenes such as debug level.
|
81
|
+
The current list of environment variables is:
|
82
|
+
debug, language, sheight (screen height)
|
83
|
+
|
84
|
+
|
85
|
+
To view the commands which require a valid login use the command:
|
86
|
+
|
87
|
+
help commands
|
88
|
+
|
89
|
+
Zabcon Copyright (C) 2009,2010 Andrew Nelson. Zabcon comes with ABSOLUTELY
|
90
|
+
NO WARRANTY; for details see the text of the GNU General Public License 2.0
|
91
|
+
at http://www.gnu.org/licenses/gpl-2.0.html
|
92
|
+
</item>
|
93
|
+
|
94
|
+
<!-- 80 Col Marker ######################################################## -->
|
95
|
+
|
96
|
+
<item command="help_commands">
|
97
|
+
Help Commands
|
98
|
+
The following commands require a valid login
|
99
|
+
|
100
|
+
To get help on a specific command type:
|
101
|
+
help <command>
|
102
|
+
|
103
|
+
For instance "help get user" would return help for the "get user" command.
|
104
|
+
|
105
|
+
<> Mandatory argument/command
|
106
|
+
() Optional argument/command
|
107
|
+
|
108
|
+
get user - returns a list of all users
|
109
|
+
get host - returns a list of hosts
|
110
|
+
get item - returns a list of items
|
111
|
+
hostids=<num> - returns a list of items for host
|
112
|
+
extendoutput=true
|
113
|
+
- displays more information
|
114
|
+
|
115
|
+
add user - Adds a user to Zabbix
|
116
|
+
without parameters causes help message to be displayed
|
117
|
+
add host - Add a host
|
118
|
+
add host group - Adds a host group
|
119
|
+
add item - Add an item
|
120
|
+
|
121
|
+
delete user <num> - Deletes user with uid=num
|
122
|
+
delete host - Deletes a host
|
123
|
+
|
124
|
+
raw api - Allows for raw api calls, many of the underlying details
|
125
|
+
are handled by this call
|
126
|
+
raw json - Allows for raw json calls to the API, this allows for a
|
127
|
+
much more direct API call than the "raw api" call
|
128
|
+
No syntax checking is performed!
|
129
|
+
</item>
|
130
|
+
|
131
|
+
<!-- 80 Col Marker ######################################################## -->
|
132
|
+
|
133
|
+
<item command="add_host">
|
134
|
+
Add Host adds a host to the Zabbix server.
|
135
|
+
|
136
|
+
Required arguments:
|
137
|
+
host, port, ip and/or dns, status, proxy_hostid, groups, useip
|
138
|
+
Optional arguments:
|
139
|
+
available, disable_until, status, templates
|
140
|
+
maintenanceid, maintenance_from, maintenance_status, maintenance_type,
|
141
|
+
useipmi, ipmi_authtype, ipmi_available, ipmi_disable_until, ipmi_errors_from,
|
142
|
+
ipmi_ip, ipmi_password, ipmi_port, ipmi_privilege, ipmi_username,
|
143
|
+
snmp_available, snmp_disable_until, snmp_errors_from,
|
144
|
+
outbytes, error, lastaccess, errors_from, inbytes
|
145
|
+
|
146
|
+
example:
|
147
|
+
add host host=servername dns=host.dom port=10050 proxy_hostid=0 groups=[{groupid=1}] useip=0
|
148
|
+
|
149
|
+
Adding a host to a template:
|
150
|
+
add host host=servername dns=host.dom port=10050 proxy_hostid=0 groups=[{groupid=1}] useip=0 templates=[{templateid=10001}]
|
151
|
+
|
152
|
+
</item>
|
153
|
+
|
154
|
+
<!-- 80 Col Marker ######################################################## -->
|
155
|
+
|
156
|
+
<item command="delete_host">
|
157
|
+
Delete Host takes a list of host ids or one host id
|
158
|
+
example: delete host id=1,2,3
|
159
|
+
delete host id=1
|
160
|
+
</item>
|
161
|
+
|
162
|
+
<!-- 80 Col Marker ######################################################## -->
|
163
|
+
|
164
|
+
<item command="add_item">
|
165
|
+
Add Item
|
166
|
+
syntax: add item type=active hostid=num description="some text" key="item.key"
|
167
|
+
|
168
|
+
valid parameters:
|
169
|
+
hostid, snmpv3_securitylevel, snmp_community, publickey, delta, history,
|
170
|
+
key, snmp_oid, delay_flex, multiplier, delay, mtime, username, authtype,
|
171
|
+
data_type, ipmi_sensor,snmpv3_authpassphrase, prevorgvalue, units, trends,
|
172
|
+
snmp_port, formula, type, params, logtimefmt, snmpv3_securityname,
|
173
|
+
trapper_hosts, description, password, snmpv3_privpassphrase,
|
174
|
+
status, privatekey, valuemapid, templateid, value_type, groups
|
175
|
+
|
176
|
+
valid values for 'type':
|
177
|
+
active, passive, trapper
|
178
|
+
</item>
|
179
|
+
|
180
|
+
<!-- 80 Col Marker ######################################################## -->
|
181
|
+
|
182
|
+
<item command="add_user">
|
183
|
+
Add User requires arguments, valid fields are:
|
184
|
+
name, surname, alias, passwd, url, autologin, autologout, lang, theme, refresh
|
185
|
+
rows_per_page, type
|
186
|
+
example: add user name=someone alias=username passwd=pass autologout=0
|
187
|
+
</item>
|
188
|
+
|
189
|
+
<!-- 80 Col Marker ######################################################## -->
|
190
|
+
|
191
|
+
<item command="add_user_media">
|
192
|
+
Adds a media type to a user
|
193
|
+
|
194
|
+
Example:
|
195
|
+
add user media userid=33 mediatypeid=1 sendto=ddd severity=1 period=""
|
196
|
+
</item>
|
197
|
+
|
198
|
+
<!-- 80 Col Marker ######################################################## -->
|
199
|
+
|
200
|
+
<item command="get">
|
201
|
+
Get Commands
|
202
|
+
app
|
203
|
+
host
|
204
|
+
host group
|
205
|
+
host group id
|
206
|
+
item
|
207
|
+
user
|
208
|
+
trigger
|
209
|
+
</item>
|
210
|
+
|
211
|
+
<!-- 80 Col Marker ######################################################## -->
|
212
|
+
|
213
|
+
<item command="get_user">
|
214
|
+
Get User
|
215
|
+
syntax: get user show=headers limit=n
|
216
|
+
</item>
|
217
|
+
|
218
|
+
<!-- 80 Col Marker ######################################################## -->
|
219
|
+
|
220
|
+
<item command="get_item">
|
221
|
+
Get Item
|
222
|
+
syntax: get item show=headers limit=n
|
223
|
+
Returns a list of items based on the parameters given
|
224
|
+
hostids - A list or single host to return items for, if a list is given
|
225
|
+
it must be encased in [], example:
|
226
|
+
get item hostids=[1,2]
|
227
|
+
show - a list of headers encased in [] or "all" to show all headers
|
228
|
+
limit - how many items to show before stopping
|
229
|
+
The default limit is 100
|
230
|
+
</item>
|
231
|
+
|
232
|
+
|
233
|
+
<!-- 80 Col Marker ######################################################## -->
|
234
|
+
|
235
|
+
<item command="delete_user">
|
236
|
+
Delete User
|
237
|
+
syntax: delete user id=num
|
238
|
+
id must be a number
|
239
|
+
</item>
|
240
|
+
|
241
|
+
<!-- 80 Col Marker ######################################################## -->
|
242
|
+
|
243
|
+
<item command="delete_item">
|
244
|
+
Delete Item
|
245
|
+
syntax: delete item itemid=num
|
246
|
+
itemid must be a number
|
247
|
+
</item>
|
248
|
+
|
249
|
+
<!-- 80 Col Marker ######################################################## -->
|
250
|
+
|
251
|
+
<item command="raw_api">
|
252
|
+
raw api
|
253
|
+
syntax: raw api method parameter=value parameter=value
|
254
|
+
|
255
|
+
The following example will mimic the get user call:
|
256
|
+
+> raw api user.get extendoutput=true limit=100
|
257
|
+
</item>
|
258
|
+
|
259
|
+
<!-- 80 Col Marker ######################################################## -->
|
260
|
+
|
261
|
+
<item command="raw_api">
|
262
|
+
raw json
|
263
|
+
syntax: raw json {json call}
|
264
|
+
|
265
|
+
The following example will mimic the get user call:
|
266
|
+
+> raw json {"auth":"$auth","method":"user.get","id":2,"params":{"extendoutput":true,"limit":100},"jsonrpc":"2.0"}
|
267
|
+
|
268
|
+
note:
|
269
|
+
The automatically updated variable $auth was used. You can choose to use
|
270
|
+
this variable or you can use a different one, however the $auth variable
|
271
|
+
is the one provided by the server upon login.
|
272
|
+
</item>
|
273
|
+
|
274
|
+
</help>
|
275
|
+
</zabcon_help>
|
data/libs/input.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
#GPL 2.0 http://www.gnu.org/licenses/gpl-2.0.html
|
2
|
+
#Zabbix CLI Tool and associated files
|
3
|
+
#Copyright (C) 2009,2010 Andrew Nelson nelsonab(at)red-tux(dot)net
|
4
|
+
#
|
5
|
+
#This program is free software; you can redistribute it and/or
|
6
|
+
#modify it under the terms of the GNU General Public License
|
7
|
+
#as published by the Free Software Foundation; either version 2
|
8
|
+
#of the License, or (at your option) any later version.
|
9
|
+
#
|
10
|
+
#This program is distributed in the hope that it will be useful,
|
11
|
+
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
#GNU General Public License for more details.
|
14
|
+
#
|
15
|
+
#You should have received a copy of the GNU General Public License
|
16
|
+
#along with this program; if not, write to the Free Software
|
17
|
+
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
18
|
+
|
19
|
+
##########################################
|
20
|
+
# Subversion information
|
21
|
+
# $Id: input.rb 215 2010-09-25 21:22:37Z richlv $
|
22
|
+
# $Revision: 215 $
|
23
|
+
##########################################
|
24
|
+
|
25
|
+
require 'readline'
|
26
|
+
|
27
|
+
class Input_Super
|
28
|
+
|
29
|
+
def get_line
|
30
|
+
#place holder
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
class Readline_Input < Input_Super
|
35
|
+
|
36
|
+
def set_prompt_func(prompt_func)
|
37
|
+
@promptfunc=prompt_func
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_line
|
41
|
+
line = Readline.readline(@promptfunc.call, true)
|
42
|
+
return nil if line.nil?
|
43
|
+
if line =~ /^\s*$/ or Readline::HISTORY.to_a[-2] == line
|
44
|
+
Readline::HISTORY.pop
|
45
|
+
end
|
46
|
+
return line
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
class STDIN_Input < Input_Super
|
52
|
+
def get_line
|
53
|
+
gets
|
54
|
+
end
|
55
|
+
end
|