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/zdebug.rb
ADDED
@@ -0,0 +1,163 @@
|
|
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: zdebug.rb 222 2010-10-07 14:25:08Z nelsonab $
|
21
|
+
# $Revision: 222 $
|
22
|
+
##########################################
|
23
|
+
|
24
|
+
module ZDebug
|
25
|
+
|
26
|
+
# Either set_debug_level or set_facility_debug_level must be called before
|
27
|
+
# the debug functions can be used.
|
28
|
+
def set_debug_level(level) # sets the current debug level for printing messages
|
29
|
+
@@debug_level=level
|
30
|
+
|
31
|
+
# Create faciltiy_level if it's not created already
|
32
|
+
@@facility_level= {} if !defined?(@@facility_level)
|
33
|
+
end
|
34
|
+
|
35
|
+
# facility is a symbol, level is an integer
|
36
|
+
def set_facility_debug_level(facility,level)
|
37
|
+
# Create faciltiy_level if it's not created already
|
38
|
+
@@facility_level= {} if !defined?(@@facility_level)
|
39
|
+
|
40
|
+
@@facility_level[facility]=level
|
41
|
+
|
42
|
+
# Create debug level if it's not already created
|
43
|
+
@@debug_level=0 if !defined?(@@debug_level)
|
44
|
+
end
|
45
|
+
|
46
|
+
def debug_level
|
47
|
+
@@debug_level
|
48
|
+
end
|
49
|
+
|
50
|
+
# level - level to show message (Integer)
|
51
|
+
# variable - variable to show (Object)
|
52
|
+
# message - message to be prepended before variable (String)
|
53
|
+
# overload - do show or error if debug_level is not set
|
54
|
+
def debug(level,variable="",message=nil,truncate=nil,overload=false)
|
55
|
+
return if overload
|
56
|
+
raise "Call set_debug before using debug" if !defined?(@@debug_level)
|
57
|
+
if level<=@@debug_level
|
58
|
+
#parse the caller array to determine who called us, what line, and what file
|
59
|
+
caller[0]=~/(.*):(\d+):.*`(.*?)'/
|
60
|
+
|
61
|
+
#sometimes the debug function gets called from within an exception block, in which cases the backtrace is not
|
62
|
+
#available.
|
63
|
+
file_tmp=$1.nil? ? "n/a" : $1
|
64
|
+
debug_line=$2.nil? ? "" : $2
|
65
|
+
debug_func=$3.nil? ? "" : $3
|
66
|
+
tmp_split=file_tmp.split("/")
|
67
|
+
|
68
|
+
if (len=tmp_split.length)>2
|
69
|
+
debug_file=".../#{tmp_split[len-2]}/#{tmp_split[len-1]}"
|
70
|
+
else
|
71
|
+
debug_file=file_tmp
|
72
|
+
end
|
73
|
+
|
74
|
+
strval=""
|
75
|
+
if variable.nil?
|
76
|
+
strval="nil"
|
77
|
+
elsif variable.class==String
|
78
|
+
strval=variable
|
79
|
+
if !truncate.nil?
|
80
|
+
if truncate<strval.length then
|
81
|
+
o_strval=strval
|
82
|
+
strval=o_strval[0..(truncate/2)]
|
83
|
+
strval+= " ..... "
|
84
|
+
strval+=o_strval[(o_strval.length-(truncate/2))..o_strval.length]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
else
|
88
|
+
strval=variable.inspect
|
89
|
+
if !truncate.nil?
|
90
|
+
if truncate<strval.length then
|
91
|
+
o_strval=strval
|
92
|
+
strval=o_strval[0..(truncate/2)]
|
93
|
+
strval+= " ..... "
|
94
|
+
strval+=o_strval[(o_strval.length-(truncate/2))..o_strval.length]
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
if !message.nil?
|
100
|
+
strval = message + ": " + strval
|
101
|
+
end
|
102
|
+
puts "D#{level} #{debug_file}:#{debug_func}:#{debug_line} #{strval}"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# Debug_facility is a copy of the above function in an effort to shorten
|
107
|
+
# code path.
|
108
|
+
# facility - symbol denoting logging facility
|
109
|
+
# level - level to show message (Integer)
|
110
|
+
# variable - variable to show (Object)
|
111
|
+
# message - message to be prepended before variable (String)
|
112
|
+
def debug_facility(facility,level,variable="",message=nil,truncate=nil)
|
113
|
+
facility_level=@@facility_level[facility]
|
114
|
+
raise "Call set_debug before using debug" if !defined?(@@debug_level)
|
115
|
+
raise "Unknown facility type: #{facility.to_s}" if facility_level.nil?
|
116
|
+
if level<=facility_level
|
117
|
+
#parse the caller array to determine who called us, what line, and what file
|
118
|
+
caller[0]=~/(.*):(\d+):.*`(.*?)'/
|
119
|
+
|
120
|
+
file_tmp=$1
|
121
|
+
debug_line=$2
|
122
|
+
debug_func=$3
|
123
|
+
tmp_split=file_tmp.split("/")
|
124
|
+
|
125
|
+
if (len=tmp_split.length)>2
|
126
|
+
debug_file=".../#{tmp_split[len-2]}/#{tmp_split[len-1]}"
|
127
|
+
else
|
128
|
+
debug_file=file_tmp
|
129
|
+
end
|
130
|
+
|
131
|
+
strval=""
|
132
|
+
if variable.nil?
|
133
|
+
strval="nil"
|
134
|
+
elsif variable.class==String
|
135
|
+
strval=variable
|
136
|
+
if !truncate.nil?
|
137
|
+
if truncate<strval.length then
|
138
|
+
o_strval=strval
|
139
|
+
strval=o_strval[0..(truncate/2)]
|
140
|
+
strval+= " ..... "
|
141
|
+
strval+=o_strval[(o_strval.length-(truncate/2))..o_strval.length]
|
142
|
+
end
|
143
|
+
end
|
144
|
+
else
|
145
|
+
strval=variable.inspect
|
146
|
+
if !truncate.nil?
|
147
|
+
if truncate<strval.length then
|
148
|
+
o_strval=strval
|
149
|
+
strval=o_strval[0..(truncate/2)]
|
150
|
+
strval+= " ..... "
|
151
|
+
strval+=o_strval[(o_strval.length-(truncate/2))..o_strval.length]
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
if !message.nil?
|
157
|
+
strval = message + ": " + strval
|
158
|
+
end
|
159
|
+
puts "D#{level}(#{facility.to_s}) #{debug_file}:#{debug_func}:#{debug_line} #{strval}"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
end # end Debug module
|
data/zabcon.conf.default
ADDED
data/zabcon.rb
ADDED
@@ -0,0 +1,236 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
|
3
|
+
#GPL 2.0 http://www.gnu.org/licenses/gpl-2.0.html
|
4
|
+
#Zabbix CLI Tool and associated files
|
5
|
+
#Copyright (C) 2009,2010 Andrew Nelson nelsonab(at)red-tux(dot)net
|
6
|
+
#
|
7
|
+
#This program is free software; you can redistribute it and/or
|
8
|
+
#modify it under the terms of the GNU General Public License
|
9
|
+
#as published by the Free Software Foundation; either version 2
|
10
|
+
#of the License, or (at your option) any later version.
|
11
|
+
#
|
12
|
+
#This program is distributed in the hope that it will be useful,
|
13
|
+
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14
|
+
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
15
|
+
#GNU General Public License for more details.
|
16
|
+
#
|
17
|
+
#You should have received a copy of the GNU General Public License
|
18
|
+
#along with this program; if not, write to the Free Software
|
19
|
+
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
20
|
+
|
21
|
+
##########################################
|
22
|
+
# Subversion information
|
23
|
+
# $Id: zabcon.rb 250 2010-12-24 06:56:38Z nelsonab $
|
24
|
+
# $Revision: 250 $
|
25
|
+
##########################################
|
26
|
+
|
27
|
+
|
28
|
+
#setup our search path or libraries
|
29
|
+
$: << File.expand_path(File.join(File.dirname(__FILE__), '.'))
|
30
|
+
|
31
|
+
begin
|
32
|
+
require 'rubygems'
|
33
|
+
rescue LoadError
|
34
|
+
puts
|
35
|
+
puts "Ruby Gems failed to load. Please install Ruby Gems using your systems"
|
36
|
+
puts "package management program or downlaod it from http://rubygems.org."
|
37
|
+
puts
|
38
|
+
exit 1
|
39
|
+
end
|
40
|
+
|
41
|
+
require 'optparse'
|
42
|
+
require 'ostruct'
|
43
|
+
require 'libs/zdebug'
|
44
|
+
require 'libs/zabcon_globals'
|
45
|
+
|
46
|
+
if RUBY_VERSION=="1.8.6" #Ruby 1.8.6 lacks the each_char function in the string object, so we add it here
|
47
|
+
String.class_eval do
|
48
|
+
def each_char
|
49
|
+
if block_given?
|
50
|
+
scan(/./m) do |x|
|
51
|
+
yield x
|
52
|
+
end
|
53
|
+
else
|
54
|
+
scan(/./m)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
class ZabconApp
|
62
|
+
|
63
|
+
def initialize
|
64
|
+
setup_opt_parser
|
65
|
+
end
|
66
|
+
|
67
|
+
def setup_opt_parser
|
68
|
+
@cmd_opts=OpenStruct.new
|
69
|
+
# @options.debug=0
|
70
|
+
|
71
|
+
|
72
|
+
@opts = OptionParser.new do |opts|
|
73
|
+
opts.banner = "Usage: #{$0} [options] [command file]"
|
74
|
+
opts.separator "------------------------------------"
|
75
|
+
opts.separator ""
|
76
|
+
opts.separator "If command file is specified Zabcon will read from the file"
|
77
|
+
opts.separator "line by line and execute the commands in order. If '-' is "
|
78
|
+
opts.separator "used, Zabcon will read from stdin as though it were a file."
|
79
|
+
opts.separator ""
|
80
|
+
opts.separator "Options"
|
81
|
+
opts.on("-h", "-?", "--help", "Display this help message") do
|
82
|
+
@cmd_opts.echo=false
|
83
|
+
@cmd_opts.help=true
|
84
|
+
puts opts
|
85
|
+
end
|
86
|
+
opts.on("-l", "--load FILE", "load configuration file supplied or ","default if none") do |file|
|
87
|
+
@cmd_opts.config_file=file
|
88
|
+
end
|
89
|
+
opts.on("--no-config", "Do not attempt to automatically load","the configuration file") do
|
90
|
+
@cmd_opts.load_config=false
|
91
|
+
end
|
92
|
+
opts.on("-d", "--debug LEVEL", Integer, "Specify debug level (Overrides config","file)") do |level|
|
93
|
+
@cmd_opts.debug=level
|
94
|
+
end
|
95
|
+
opts.on("-e", "--[no-]echo", "Enable startup echo. Default is on ","for interactive") do |echo|
|
96
|
+
@cmd_opts.echo=echo
|
97
|
+
end
|
98
|
+
opts.on("-s", "--separator CHAR", "Seperator character for csv styple output.",
|
99
|
+
"Use \\t for tab separated output.") do |sep|
|
100
|
+
@cmd_opts.table_separator=sep
|
101
|
+
end
|
102
|
+
opts.on("--no-header", "Do not show headers on output.") do
|
103
|
+
@cmd_opts.table_header=false
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def setup_globals
|
109
|
+
env=EnvVars.instance # we must instantiate a singleton before using it
|
110
|
+
vars=GlobalVars.instance
|
111
|
+
|
112
|
+
env["debug"]=0
|
113
|
+
env["show_help"]=false
|
114
|
+
env["server"]=nil
|
115
|
+
env["username"]=nil
|
116
|
+
env["password"]=nil
|
117
|
+
env["lines"]=24
|
118
|
+
env["language"]="english"
|
119
|
+
env["logged_in"]=false
|
120
|
+
env["have_tty"]=STDIN.tty?
|
121
|
+
env["echo"]=STDIN.tty? ? true: false
|
122
|
+
env["config_file"]="zabcon.conf"
|
123
|
+
env["load_config"]=true
|
124
|
+
|
125
|
+
#output related environment variables
|
126
|
+
env["table_output"]=STDIN.tty? # Is the output a well formatted table, or csv like?
|
127
|
+
env["table_header"]=true
|
128
|
+
env["table_separator"]=","
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
#checks to ensure all dependencies are available, forcefully exits with an
|
133
|
+
# exit code of 1 if the dependency check fails
|
134
|
+
# * ruby_rev is a string denoting the minimum version of ruby suitable
|
135
|
+
# * *dependencies is an array of libraries which are required
|
136
|
+
def check_dependencies(required_rev,*dependencies)
|
137
|
+
puts "Checking dependencies" if EnvVars.instance["echo"]
|
138
|
+
depsok=true #assume we will not fail dependencies
|
139
|
+
|
140
|
+
required_rev=required_rev.split('.')
|
141
|
+
ruby_rev=RUBY_VERSION.split('.')
|
142
|
+
items=ruby_rev.length < required_rev.length ? ruby_rev.length : required_rev.length
|
143
|
+
|
144
|
+
for i in 0..items-1 do
|
145
|
+
if ruby_rev[i]<required_rev[i]
|
146
|
+
puts
|
147
|
+
puts "Zabcon requires Ruby version #{required_rev.join('.')} or higher."
|
148
|
+
puts "you are using Ruby version #{RUBY_VERSION}."
|
149
|
+
puts
|
150
|
+
exit(1)
|
151
|
+
elsif ruby_rev[i]>required_rev[i]
|
152
|
+
break
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
#Convert the inbound array to a hash
|
157
|
+
deps = Hash[*dependencies.collect { |v|
|
158
|
+
[v,true]
|
159
|
+
}.flatten]
|
160
|
+
|
161
|
+
deps.each_key {|dep|
|
162
|
+
val=Gem.source_index.find_name(dep).map {|x| x.name}==[]
|
163
|
+
puts " #{dep} : Not Installed" if val
|
164
|
+
depsok=false if val
|
165
|
+
}
|
166
|
+
if !depsok
|
167
|
+
puts
|
168
|
+
puts "One or more dependencies failed"
|
169
|
+
puts "Please see the dependencies file for instructions on installing the"
|
170
|
+
puts "required dependencies"
|
171
|
+
puts
|
172
|
+
exit(1)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
|
177
|
+
def run
|
178
|
+
begin
|
179
|
+
setup_globals # step 1, set up the global environment variables
|
180
|
+
@opts.parse!(ARGV) # step 2, parse the command line and setup the class variable @cmd_opts
|
181
|
+
|
182
|
+
h = @cmd_opts.marshal_dump() #dump the hash to a temporary variable
|
183
|
+
cmd_hash={}
|
184
|
+
h.each_pair do |k,v|
|
185
|
+
cmd_hash[k.to_s]=v
|
186
|
+
end
|
187
|
+
EnvVars.instance.load_config(cmd_hash)
|
188
|
+
rescue OptionParser::InvalidOption => e
|
189
|
+
puts e
|
190
|
+
puts
|
191
|
+
puts @opts
|
192
|
+
exit(1)
|
193
|
+
rescue OptionParser::InvalidArgument => e
|
194
|
+
puts e
|
195
|
+
puts
|
196
|
+
puts @opts
|
197
|
+
exit(1)
|
198
|
+
rescue OptionParser::MissingArgument => e
|
199
|
+
puts e
|
200
|
+
puts
|
201
|
+
puts @opts
|
202
|
+
exit(1)
|
203
|
+
end
|
204
|
+
|
205
|
+
puts RUBY_PLATFORM if EnvVars.instance["echo"]
|
206
|
+
|
207
|
+
check_dependencies("1.8.6","parseconfig", "json", "highline")
|
208
|
+
#check_dependencies("0.0.0","parseconfig", "json", "highline")
|
209
|
+
|
210
|
+
begin
|
211
|
+
require 'readline'
|
212
|
+
rescue LoadError
|
213
|
+
puts "Readline support was not compiled into Ruby. Readline support is required."
|
214
|
+
exit
|
215
|
+
end
|
216
|
+
|
217
|
+
#If we don't have the each_char method for the string class include the module that has it.
|
218
|
+
if !String.method_defined?("each_char")
|
219
|
+
begin
|
220
|
+
require 'jcode'
|
221
|
+
rescue LoadError
|
222
|
+
puts "Module jcode is required for your version of Ruby"
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
require 'libs/zabcon_core' #Require placed after deps check
|
227
|
+
|
228
|
+
if @cmd_opts.help.nil?
|
229
|
+
zabcon=ZabconCore.new
|
230
|
+
zabcon.start()
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
zabconapp=ZabconApp.new()
|
236
|
+
zabconapp.run()
|
metadata
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: zabcon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- A. Nelson
|
14
|
+
autorequire:
|
15
|
+
bindir: .
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2010-12-28 00:00:00 -05:00
|
19
|
+
default_executable: zabcon
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: zbxapi
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: parseconfig
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: highline
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
63
|
+
description: Zabcon is a command line interface for Zabbix written in Ruby
|
64
|
+
email: nelsonab@red-tux.net
|
65
|
+
executables:
|
66
|
+
- zabcon.rb
|
67
|
+
extensions: []
|
68
|
+
|
69
|
+
extra_rdoc_files: []
|
70
|
+
|
71
|
+
files:
|
72
|
+
- zabcon.rb
|
73
|
+
- zabcon.conf.default
|
74
|
+
- README
|
75
|
+
- libs/argument_processor.rb
|
76
|
+
- libs/command_help.rb
|
77
|
+
- libs/command_tree.rb
|
78
|
+
- libs/defines.rb
|
79
|
+
- libs/exceptions.rb
|
80
|
+
- libs/help.xml
|
81
|
+
- libs/input.rb
|
82
|
+
- libs/printer.rb
|
83
|
+
- libs/zabcon_core.rb
|
84
|
+
- libs/zabcon_exceptions.rb
|
85
|
+
- libs/zabcon_globals.rb
|
86
|
+
- libs/zbxcliserver.rb
|
87
|
+
- libs/zdebug.rb
|
88
|
+
- ./zabcon.rb
|
89
|
+
has_rdoc: true
|
90
|
+
homepage: http://trac.red-tux.net/
|
91
|
+
licenses:
|
92
|
+
- LGPL 2.1
|
93
|
+
post_install_message:
|
94
|
+
rdoc_options: []
|
95
|
+
|
96
|
+
require_paths:
|
97
|
+
- .
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
hash: 3
|
104
|
+
segments:
|
105
|
+
- 0
|
106
|
+
version: "0"
|
107
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 3
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
requirements:
|
117
|
+
- Requires zbxapi, parseconfig and highline
|
118
|
+
rubyforge_project: zabcon
|
119
|
+
rubygems_version: 1.3.7
|
120
|
+
signing_key:
|
121
|
+
specification_version: 3
|
122
|
+
summary: Zabcon command line interface for Zabbix
|
123
|
+
test_files: []
|
124
|
+
|