nagiosharder 0.3.0 → 0.4.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +26 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +46 -0
- data/README.rdoc +44 -13
- data/Rakefile +2 -51
- data/bin/nagiosharder +9 -0
- data/lib/nagiosharder.rb +130 -89
- data/lib/nagiosharder/cli.rb +281 -0
- data/lib/nagiosharder/filters.rb +140 -0
- data/nagiosharder.gemspec +22 -59
- metadata +141 -123
- data/spec/nagiosharder_spec.rb +0 -7
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -9
@@ -0,0 +1,281 @@
|
|
1
|
+
require 'terminal-table'
|
2
|
+
require 'optparse'
|
3
|
+
require 'nagiosharder'
|
4
|
+
|
5
|
+
class NagiosHarder
|
6
|
+
class Cli
|
7
|
+
|
8
|
+
attr_reader :options, :command, :param, :the_rest, :host, :service
|
9
|
+
|
10
|
+
def initialize(argv)
|
11
|
+
@options = parse_connection_options(argv)
|
12
|
+
@command, @param = argv
|
13
|
+
@host, @service = param.split("/") if param
|
14
|
+
@the_rest = argv[2..-1]
|
15
|
+
end
|
16
|
+
|
17
|
+
def run
|
18
|
+
return_value = case command
|
19
|
+
when 'status'
|
20
|
+
service_table do
|
21
|
+
client.host_status(host).select do |name, s|
|
22
|
+
service.nil? || service == name
|
23
|
+
end.map { |name, s| s }
|
24
|
+
end
|
25
|
+
true
|
26
|
+
when /^(ack|acknowledged)$/
|
27
|
+
if service.nil?
|
28
|
+
client.acknowledge_host(host, the_rest.join(' '))
|
29
|
+
else
|
30
|
+
client.acknowledge_service(host, service, the_rest.join(' '))
|
31
|
+
end
|
32
|
+
when /^unack/
|
33
|
+
client.unacknowledge_service(host, service)
|
34
|
+
when /^(mute|disable_notifications)$/
|
35
|
+
client.disable_service_notifications(host, service)
|
36
|
+
when /^(unmute|enable_notifications)$/
|
37
|
+
client.enable_service_notifications(host, service)
|
38
|
+
when 'check'
|
39
|
+
if service
|
40
|
+
client.schedule_service_check(host, service)
|
41
|
+
else
|
42
|
+
client.schedule_host_check(host)
|
43
|
+
end
|
44
|
+
when 'downtime'
|
45
|
+
if service
|
46
|
+
client.schedule_service_downtime(host, service, :type => :fixed, :start_time => Time.now, :end_time => Time.now + the_rest.first.to_i.minutes)
|
47
|
+
else
|
48
|
+
client.schedule_host_downtime(host, :type => :fixed, :start_time => Time.now, :end_time => Time.now + the_rest.first.to_i.minutes)
|
49
|
+
end
|
50
|
+
when 'problems'
|
51
|
+
service_table do
|
52
|
+
params = {
|
53
|
+
:service_status_types => [:critical, :warning, :unknown],
|
54
|
+
}
|
55
|
+
params[:group] = param
|
56
|
+
client.service_status(params)
|
57
|
+
end
|
58
|
+
true
|
59
|
+
when /^(critical|warning|unknown)/
|
60
|
+
service_table do
|
61
|
+
params = {
|
62
|
+
:service_status_types => [
|
63
|
+
$1,
|
64
|
+
],
|
65
|
+
:service_props => [
|
66
|
+
:hard_state,
|
67
|
+
:no_scheduled_downtime,
|
68
|
+
:state_unacknowledged,
|
69
|
+
:notifications_enabled
|
70
|
+
]
|
71
|
+
}
|
72
|
+
params[:group] = param
|
73
|
+
client.service_status(params)
|
74
|
+
end
|
75
|
+
true
|
76
|
+
when /^(triage|unhandled)/
|
77
|
+
service_table do
|
78
|
+
params = {
|
79
|
+
:service_status_types => [
|
80
|
+
:critical,
|
81
|
+
:warning,
|
82
|
+
:unknown
|
83
|
+
],
|
84
|
+
:host_props => [
|
85
|
+
:no_scheduled_downtime,
|
86
|
+
:state_unacknowledged,
|
87
|
+
:notifications_enabled
|
88
|
+
],
|
89
|
+
:service_props => [
|
90
|
+
:no_scheduled_downtime,
|
91
|
+
:state_unacknowledged,
|
92
|
+
:notifications_enabled
|
93
|
+
]
|
94
|
+
}
|
95
|
+
params[:group] = param
|
96
|
+
client.service_status(params)
|
97
|
+
end
|
98
|
+
true
|
99
|
+
when /^muted/
|
100
|
+
service_table do
|
101
|
+
params = {
|
102
|
+
:service_props => [
|
103
|
+
:notifications_disabled,
|
104
|
+
]
|
105
|
+
}
|
106
|
+
params[:group] = param
|
107
|
+
client.service_status(params)
|
108
|
+
end
|
109
|
+
true
|
110
|
+
when /^(acked|acknowledged)/
|
111
|
+
service_table do
|
112
|
+
params = {
|
113
|
+
:service_status_types => [
|
114
|
+
:critical,
|
115
|
+
:warning,
|
116
|
+
:unknown
|
117
|
+
],
|
118
|
+
:service_props => [
|
119
|
+
:state_acknowledged,
|
120
|
+
]
|
121
|
+
}
|
122
|
+
params[:group] = param
|
123
|
+
client.service_status(params)
|
124
|
+
end
|
125
|
+
true
|
126
|
+
else
|
127
|
+
debug "'#{command}'"
|
128
|
+
raise ArgumentError, help
|
129
|
+
end
|
130
|
+
if return_value
|
131
|
+
0
|
132
|
+
else
|
133
|
+
puts "Sorry, bro, nagios didn't like that."
|
134
|
+
1
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
protected
|
139
|
+
|
140
|
+
def client
|
141
|
+
debug "loading client with options #{options.inspect}"
|
142
|
+
@client ||= NagiosHarder::Site.new(options['nagios_url'], options['user'], options['password'], options['version'], options['time'])
|
143
|
+
end
|
144
|
+
|
145
|
+
def parse_connection_options(argv)
|
146
|
+
options = {
|
147
|
+
'version' => 3
|
148
|
+
}
|
149
|
+
|
150
|
+
optparse = OptionParser.new do |opts|
|
151
|
+
opts.banner = "Usage: nagiosharder [options] [command]"
|
152
|
+
|
153
|
+
opts.on( '-h', '--help') do
|
154
|
+
raise ArgumentError, opts.help
|
155
|
+
end
|
156
|
+
|
157
|
+
opts.on( '-c', '--config [/path/to/file]', 'YAML config file [optional, but recommended]') do |file|
|
158
|
+
options.merge!(YAML.load_file(file))
|
159
|
+
end
|
160
|
+
|
161
|
+
opts.on( '-u', '--user USER', 'Nagios user') do |user|
|
162
|
+
options['user'] = user
|
163
|
+
end
|
164
|
+
|
165
|
+
opts.on( '-p', '--password PASSWORD', 'Nagios password') do |password|
|
166
|
+
options['password'] = password
|
167
|
+
end
|
168
|
+
|
169
|
+
opts.on( '-n', '--nagios_url URL', 'Nagios cgi url') do |nagios_url|
|
170
|
+
options['nagios_url'] = nagios_url
|
171
|
+
end
|
172
|
+
|
173
|
+
opts.on( '-v', '--version [3]', 'Nagios version (2 or 3, defaults to 3)') do |version|
|
174
|
+
options['version'] = version
|
175
|
+
end
|
176
|
+
|
177
|
+
opts.on( '-t', '--time [us|euro]', 'Nagios time format') do |time|
|
178
|
+
options['time'] = time
|
179
|
+
end
|
180
|
+
|
181
|
+
end
|
182
|
+
|
183
|
+
begin
|
184
|
+
optparse.parse!(argv)
|
185
|
+
rescue OptionParser::InvalidOption, OptionParser::MissingArgument => e
|
186
|
+
raise ArgumentError, e.message + "\n\n" + optparse.help
|
187
|
+
end
|
188
|
+
|
189
|
+
unless options['nagios_url'] && options['user'] && options['password']
|
190
|
+
raise ArgumentError, optparse.help
|
191
|
+
end
|
192
|
+
|
193
|
+
options
|
194
|
+
end
|
195
|
+
|
196
|
+
def service_table
|
197
|
+
table = Terminal::Table.new(:headings => ['Service', 'Status', 'Details']) do |t|
|
198
|
+
services = yield
|
199
|
+
services.each do |service|
|
200
|
+
t << service_row(service)
|
201
|
+
end
|
202
|
+
t
|
203
|
+
end
|
204
|
+
table.align_column(1, :right)
|
205
|
+
puts table
|
206
|
+
end
|
207
|
+
|
208
|
+
def service_row(service)
|
209
|
+
service['status'] << "/ACK" if service['acknowledged']
|
210
|
+
service['status'] << "/MUTE" if service['notifications_disabled']
|
211
|
+
service['status'] << "/COMMENT" if service['comments_url']
|
212
|
+
[
|
213
|
+
service['host']+"/"+service["service"],
|
214
|
+
service['status'],
|
215
|
+
wrap_text(service['extended_info'], 40)
|
216
|
+
]
|
217
|
+
end
|
218
|
+
|
219
|
+
# wraps text at the specified column, 80 by default
|
220
|
+
def wrap_text(txt, col = 80)
|
221
|
+
txt.gsub(/(.{1,#{col}})( +|$\n?)|(.{1,#{col}})/,
|
222
|
+
"\\1\\3\n")
|
223
|
+
end
|
224
|
+
|
225
|
+
def debug(*args)
|
226
|
+
$stderr.puts *args if ENV['DEBUG']
|
227
|
+
end
|
228
|
+
|
229
|
+
def help
|
230
|
+
help = <<-HELP
|
231
|
+
NagiosHarder
|
232
|
+
|
233
|
+
USAGE:
|
234
|
+
|
235
|
+
nagiosharder --help
|
236
|
+
nagiosharder [options] [command]
|
237
|
+
|
238
|
+
COMMANDS:
|
239
|
+
|
240
|
+
nagiosharder commands
|
241
|
+
|
242
|
+
nagiosharder status aux1
|
243
|
+
nagiosharder status aux1/http
|
244
|
+
|
245
|
+
nagiosharder acknowledge aux1 [message]
|
246
|
+
|
247
|
+
nagiosharder acknowledge aux1/http [message]
|
248
|
+
nagiosharder ack aux1/http [message]
|
249
|
+
|
250
|
+
nagiosharder unacknowledge aux1/http
|
251
|
+
nagiosharder unack aux1/http
|
252
|
+
|
253
|
+
nagiosharder mute aux1
|
254
|
+
nagiosharder mute aux1/http
|
255
|
+
nagiosharder disable_notifications aux1/http
|
256
|
+
|
257
|
+
nagiosharder unmute aux1
|
258
|
+
nagiosharder unmute aux1/http
|
259
|
+
nagiosharder enable_notifications aux1/http
|
260
|
+
|
261
|
+
nagiosharder check aux1/http
|
262
|
+
|
263
|
+
nagiosharder downtime aux1 15
|
264
|
+
nagiosharder downtime aux1/http 15
|
265
|
+
|
266
|
+
nagiosharder problems
|
267
|
+
nagiosharder problems http-services
|
268
|
+
|
269
|
+
nagiosharder acknowledged
|
270
|
+
nagiosharder acked http-services
|
271
|
+
|
272
|
+
nagiosharder muted
|
273
|
+
nagiosharder muted http-services
|
274
|
+
|
275
|
+
nagiosharder triage
|
276
|
+
nagiosharder unhandled
|
277
|
+
nagiosharder unhandled http-services
|
278
|
+
HELP
|
279
|
+
end
|
280
|
+
end
|
281
|
+
end
|
@@ -0,0 +1,140 @@
|
|
1
|
+
module Nagiosharder
|
2
|
+
module Filters
|
3
|
+
|
4
|
+
# irb> Nagiosharder::Filters.value(:host)
|
5
|
+
# => 0
|
6
|
+
# irb> Nagiosharder::Filters.value(:host, :state_acknowledged)
|
7
|
+
# => 4
|
8
|
+
# irb> Nagiosharder::Filters.value(:host, :state_acknowledged, :checks_disabled)
|
9
|
+
# => 20
|
10
|
+
def self.value(type, *args)
|
11
|
+
args.each.inject(0) do |i, arg|
|
12
|
+
begin
|
13
|
+
i += const_get("#{type}_#{arg}".upcase)
|
14
|
+
rescue NameError
|
15
|
+
i
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
#/********************* EXTENDED INFO CGI DISPLAY TYPES *********************/
|
21
|
+
|
22
|
+
DISPLAY_PROCESS_INFO=0
|
23
|
+
DISPLAY_HOST_INFO=1
|
24
|
+
DISPLAY_SERVICE_INFO=2
|
25
|
+
DISPLAY_COMMENTS=3
|
26
|
+
DISPLAY_PERFORMANCE=4
|
27
|
+
DISPLAY_HOSTGROUP_INFO=5
|
28
|
+
DISPLAY_DOWNTIME=6
|
29
|
+
DISPLAY_SCHEDULING_QUEUE=7
|
30
|
+
DISPLAY_SERVICEGROUP_INFO=8
|
31
|
+
|
32
|
+
|
33
|
+
#/************************ COMMAND CGI COMMAND MODES *************************/
|
34
|
+
|
35
|
+
CMDMODE_NONE=0
|
36
|
+
CMDMODE_REQUEST=1
|
37
|
+
CMDMODE_COMMIT=2
|
38
|
+
|
39
|
+
|
40
|
+
|
41
|
+
#/******************** HOST AND SERVICE NOTIFICATION TYPES ******************/
|
42
|
+
|
43
|
+
NOTIFICATION_ALL=0 #/* all service and host notifications */
|
44
|
+
NOTIFICATION_SERVICE_ALL=1 #/* all types of service notifications */
|
45
|
+
NOTIFICATION_HOST_ALL=2 #/* all types of host notifications */
|
46
|
+
NOTIFICATION_SERVICE_WARNING=4
|
47
|
+
NOTIFICATION_SERVICE_UNKNOWN=8
|
48
|
+
NOTIFICATION_SERVICE_CRITICAL=16
|
49
|
+
NOTIFICATION_SERVICE_RECOVERY=32
|
50
|
+
NOTIFICATION_HOST_DOWN=64
|
51
|
+
NOTIFICATION_HOST_UNREACHABLE=128
|
52
|
+
NOTIFICATION_HOST_RECOVERY=256
|
53
|
+
NOTIFICATION_SERVICE_ACK=512
|
54
|
+
NOTIFICATION_HOST_ACK=1024
|
55
|
+
NOTIFICATION_SERVICE_FLAP=2048
|
56
|
+
NOTIFICATION_HOST_FLAP=4096
|
57
|
+
NOTIFICATION_SERVICE_CUSTOM=8192
|
58
|
+
NOTIFICATION_HOST_CUSTOM=16384
|
59
|
+
|
60
|
+
|
61
|
+
#/********************** HOST AND SERVICE ALERT TYPES **********************/
|
62
|
+
|
63
|
+
HISTORY_ALL=0 #/* all service and host alert */
|
64
|
+
HISTORY_SERVICE_ALL=1 #/* all types of service alerts */
|
65
|
+
HISTORY_HOST_ALL=2 #/* all types of host alerts */
|
66
|
+
HISTORY_SERVICE_WARNING=4
|
67
|
+
HISTORY_SERVICE_UNKNOWN=8
|
68
|
+
HISTORY_SERVICE_CRITICAL=16
|
69
|
+
HISTORY_SERVICE_RECOVERY=32
|
70
|
+
HISTORY_HOST_DOWN=64
|
71
|
+
HISTORY_HOST_UNREACHABLE=128
|
72
|
+
HISTORY_HOST_RECOVERY=256
|
73
|
+
|
74
|
+
|
75
|
+
#/****************************** SORT TYPES *******************************/
|
76
|
+
|
77
|
+
SORT_NONE=0
|
78
|
+
SORT_ASCENDING=1
|
79
|
+
SORT_DESCENDING=2
|
80
|
+
|
81
|
+
|
82
|
+
#/***************************** SORT OPTIONS ******************************/
|
83
|
+
|
84
|
+
SORT_NOTHING=0
|
85
|
+
SORT_HOSTNAME=1
|
86
|
+
SORT_SERVICENAME=2
|
87
|
+
SORT_SERVICESTATUS=3
|
88
|
+
SORT_LASTCHECKTIME=4
|
89
|
+
SORT_CURRENTATTEMPT=5
|
90
|
+
SORT_STATEDURATION=6
|
91
|
+
SORT_NEXTCHECKTIME=7
|
92
|
+
SORT_HOSTSTATUS=8
|
93
|
+
SORT_HOSTURGENCY=9
|
94
|
+
|
95
|
+
|
96
|
+
#/****************** HOST AND SERVICE FILTER PROPERTIES *******************/
|
97
|
+
|
98
|
+
HOST_SCHEDULED_DOWNTIME=1
|
99
|
+
HOST_NO_SCHEDULED_DOWNTIME=2
|
100
|
+
HOST_STATE_ACKNOWLEDGED=4
|
101
|
+
HOST_STATE_UNACKNOWLEDGED=8
|
102
|
+
HOST_CHECKS_DISABLED=16
|
103
|
+
HOST_CHECKS_ENABLED=32
|
104
|
+
HOST_EVENT_HANDLER_DISABLED=64
|
105
|
+
HOST_EVENT_HANDLER_ENABLED=128
|
106
|
+
HOST_FLAP_DETECTION_DISABLED=256
|
107
|
+
HOST_FLAP_DETECTION_ENABLED=512
|
108
|
+
HOST_IS_FLAPPING=1024
|
109
|
+
HOST_IS_NOT_FLAPPING=2048
|
110
|
+
HOST_NOTIFICATIONS_DISABLED=4096
|
111
|
+
HOST_NOTIFICATIONS_ENABLED=8192
|
112
|
+
HOST_PASSIVE_CHECKS_DISABLED=16384
|
113
|
+
HOST_PASSIVE_CHECKS_ENABLED=32768
|
114
|
+
HOST_PASSIVE_CHECK=65536
|
115
|
+
HOST_ACTIVE_CHECK=131072
|
116
|
+
HOST_HARD_STATE=262144
|
117
|
+
HOST_SOFT_STATE=524288
|
118
|
+
|
119
|
+
SERVICE_SCHEDULED_DOWNTIME=1
|
120
|
+
SERVICE_NO_SCHEDULED_DOWNTIME=2
|
121
|
+
SERVICE_STATE_ACKNOWLEDGED=4
|
122
|
+
SERVICE_STATE_UNACKNOWLEDGED=8
|
123
|
+
SERVICE_CHECKS_DISABLED=16
|
124
|
+
SERVICE_CHECKS_ENABLED=32
|
125
|
+
SERVICE_EVENT_HANDLER_DISABLED=64
|
126
|
+
SERVICE_EVENT_HANDLER_ENABLED=128
|
127
|
+
SERVICE_FLAP_DETECTION_ENABLED=256
|
128
|
+
SERVICE_FLAP_DETECTION_DISABLED=512
|
129
|
+
SERVICE_IS_FLAPPING=1024
|
130
|
+
SERVICE_IS_NOT_FLAPPING=2048
|
131
|
+
SERVICE_NOTIFICATIONS_DISABLED=4096
|
132
|
+
SERVICE_NOTIFICATIONS_ENABLED=8192
|
133
|
+
SERVICE_PASSIVE_CHECKS_DISABLED=16384
|
134
|
+
SERVICE_PASSIVE_CHECKS_ENABLED=32768
|
135
|
+
SERVICE_PASSIVE_CHECK=65536
|
136
|
+
SERVICE_ACTIVE_CHECK=131072
|
137
|
+
SERVICE_HARD_STATE=262144
|
138
|
+
SERVICE_SOFT_STATE=524288
|
139
|
+
end
|
140
|
+
end
|
data/nagiosharder.gemspec
CHANGED
@@ -1,66 +1,29 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
5
3
|
|
6
4
|
Gem::Specification.new do |s|
|
7
|
-
s.name
|
8
|
-
s.version
|
9
|
-
|
10
|
-
s.
|
11
|
-
s.
|
12
|
-
s.
|
5
|
+
s.name = "nagiosharder"
|
6
|
+
s.version = "0.4.0.rc1"
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Josh Nichols", "Jesse Newland"]
|
9
|
+
s.email = ["josh@technicalpickles.com", "jesse@github.com"]
|
10
|
+
s.homepage = "http://github.com/railsmachine/nagiosharder"
|
11
|
+
s.summary = %q{Nagios access at your ruby fingertips}
|
13
12
|
s.description = %q{Nagios access at your ruby fingertips}
|
14
|
-
s.email = %q{josh@technicalpickles.com}
|
15
|
-
s.extra_rdoc_files = [
|
16
|
-
"LICENSE",
|
17
|
-
"README.rdoc"
|
18
|
-
]
|
19
|
-
s.files = [
|
20
|
-
".document",
|
21
|
-
"LICENSE",
|
22
|
-
"README.rdoc",
|
23
|
-
"Rakefile",
|
24
|
-
"lib/nagiosharder.rb",
|
25
|
-
"nagiosharder.gemspec",
|
26
|
-
"spec/nagiosharder_spec.rb",
|
27
|
-
"spec/spec.opts",
|
28
|
-
"spec/spec_helper.rb"
|
29
|
-
]
|
30
|
-
s.homepage = %q{http://github.com/railsmachine/nagiosharder}
|
31
|
-
s.require_paths = ["lib"]
|
32
|
-
s.rubygems_version = %q{1.4.2}
|
33
|
-
s.summary = %q{Nagios access at your ruby fingertips}
|
34
|
-
s.test_files = [
|
35
|
-
"spec/nagiosharder_spec.rb",
|
36
|
-
"spec/spec_helper.rb"
|
37
|
-
]
|
38
13
|
|
39
|
-
|
40
|
-
s.specification_version = 3
|
14
|
+
s.rubyforge_project = "nagiosharder"
|
41
15
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
s.add_dependency(%q<rest-client>, ["~> 1.6.1"])
|
51
|
-
s.add_dependency(%q<nokogiri>, ["~> 1.4.3"])
|
52
|
-
s.add_dependency(%q<activesupport>, [">= 0"])
|
53
|
-
s.add_dependency(%q<httparty>, ["~> 0.6.1"])
|
54
|
-
s.add_dependency(%q<hashie>, ["~> 1.0.0"])
|
55
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
56
|
-
end
|
57
|
-
else
|
58
|
-
s.add_dependency(%q<rest-client>, ["~> 1.6.1"])
|
59
|
-
s.add_dependency(%q<nokogiri>, ["~> 1.4.3"])
|
60
|
-
s.add_dependency(%q<activesupport>, [">= 0"])
|
61
|
-
s.add_dependency(%q<httparty>, ["~> 0.6.1"])
|
62
|
-
s.add_dependency(%q<hashie>, ["~> 1.0.0"])
|
63
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
64
|
-
end
|
65
|
-
end
|
16
|
+
s.add_dependency 'rest-client', '~> 1.6.1'
|
17
|
+
s.add_dependency 'nokogiri'
|
18
|
+
s.add_dependency 'activesupport'
|
19
|
+
s.add_dependency 'i18n'
|
20
|
+
s.add_dependency 'terminal-table'
|
21
|
+
s.add_dependency 'httparty', '~> 0.8.3'
|
22
|
+
s.add_dependency 'hashie', '~> 1.2.0'
|
23
|
+
s.add_development_dependency "rspec", ">= 1.2.9"
|
66
24
|
|
25
|
+
s.files = `git ls-files`.split("\n")
|
26
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
27
|
+
s.executables = ['nagiosharder']
|
28
|
+
s.require_paths = ["lib"]
|
29
|
+
end
|