remote_syslog 1.6.6.rc1 → 1.6.6.rc2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/remote_syslog.rb +1 -1
- data/lib/remote_syslog/agent.rb +16 -0
- data/lib/remote_syslog/cli.rb +44 -4
- data/lib/remote_syslog/file_tail_reader.rb +2 -0
- data/remote_syslog.gemspec +1 -1
- metadata +2 -2
data/lib/remote_syslog.rb
CHANGED
data/lib/remote_syslog/agent.rb
CHANGED
@@ -47,6 +47,22 @@ module RemoteSyslog
|
|
47
47
|
super('remote_syslog', :logger => logger, :pid_file => options[:pid_file])
|
48
48
|
end
|
49
49
|
|
50
|
+
def log_file=(file)
|
51
|
+
@log_file = File.expand_path(file)
|
52
|
+
|
53
|
+
level = self.logger.level
|
54
|
+
self.logger = Logger.new(file)
|
55
|
+
self.logger.level = level
|
56
|
+
end
|
57
|
+
|
58
|
+
def redirect_io!
|
59
|
+
if @log_file
|
60
|
+
STDOUT.reopen(@log_file, 'a')
|
61
|
+
STDERR.reopen(@log_file, 'a')
|
62
|
+
STDERR.sync = STDOUT.sync = true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
50
66
|
def files=(files)
|
51
67
|
@files = [ @files, files ].flatten.compact.uniq
|
52
68
|
end
|
data/lib/remote_syslog/cli.rb
CHANGED
@@ -118,9 +118,7 @@ module RemoteSyslog
|
|
118
118
|
@agent.eventmachine_tail = v
|
119
119
|
end
|
120
120
|
opts.on("--debug-log FILE", "Log internal debug messages") do |v|
|
121
|
-
|
122
|
-
@agent.logger = Logger.new(v)
|
123
|
-
@agent.logger.level = level
|
121
|
+
@agent.log_file = v
|
124
122
|
end
|
125
123
|
|
126
124
|
severities = Logger::Severity.constants + Logger::Severity.constants.map { |s| s.downcase }
|
@@ -222,11 +220,17 @@ module RemoteSyslog
|
|
222
220
|
end
|
223
221
|
|
224
222
|
def run
|
223
|
+
Thread.abort_on_exception = true
|
224
|
+
|
225
|
+
if @agent.tls && !eventmachine_supports_tls?
|
226
|
+
error "TLS is not supported by eventmachine installed on this system.\nThe openssl-devel/openssl-dev package must be installed before installing eventmachine."
|
227
|
+
end
|
228
|
+
|
225
229
|
if @no_detach
|
226
230
|
puts "Watching #{@agent.files.length} files/paths. Sending to #{@agent.destination_host}:#{@agent.destination_port} (#{@agent.tls ? 'TCP/TLS' : 'UDP'})."
|
227
231
|
@agent.run
|
228
232
|
else
|
229
|
-
daemon = Servolux::Daemon.new(:server => @agent)
|
233
|
+
daemon = Servolux::Daemon.new(:server => @agent, :after_fork => method(:redirect_io))
|
230
234
|
|
231
235
|
if daemon.alive?
|
232
236
|
error "Already running at #{@agent.pid_file}. To run another instance, specify a different `--pid-file`.", true
|
@@ -246,6 +250,42 @@ module RemoteSyslog
|
|
246
250
|
exit(0)
|
247
251
|
end
|
248
252
|
|
253
|
+
def redirect_io
|
254
|
+
@agent.redirect_io!
|
255
|
+
end
|
256
|
+
|
257
|
+
# This is a terrible hack due to the fact that eventmachine does not
|
258
|
+
# provide a way to detect if it has been compiled with TLS support
|
259
|
+
# and throws a C++ std::runtime_error if TLS is not available that we
|
260
|
+
# are unable to catch from ruby
|
261
|
+
def eventmachine_supports_tls?
|
262
|
+
rio, wio, = IO.pipe
|
263
|
+
|
264
|
+
pid = fork do
|
265
|
+
rio.close
|
266
|
+
STDOUT.reopen wio
|
267
|
+
STDERR.reopen wio
|
268
|
+
STDOUT.sync = STDERR.sync = true
|
269
|
+
EM.run_block { EventMachine.connect('0.0.0.0', 1) { |c| c.start_tls } }
|
270
|
+
end
|
271
|
+
|
272
|
+
wio.close
|
273
|
+
result = rio.read
|
274
|
+
_, status = Process.wait2(pid)
|
275
|
+
|
276
|
+
@agent.logger.debug "Results from eventmachine_supports_tls: #{status}: #{result}"
|
277
|
+
|
278
|
+
if status.exitstatus == 0
|
279
|
+
return true
|
280
|
+
elsif result =~ /Encryption not available/
|
281
|
+
return false
|
282
|
+
else
|
283
|
+
# We'll assume we can work if the problem wasn't related to encryption
|
284
|
+
return true
|
285
|
+
end
|
286
|
+
end
|
287
|
+
|
288
|
+
|
249
289
|
def error(message, try_help = false)
|
250
290
|
puts "#{program_name}: #{message}"
|
251
291
|
if try_help
|
data/remote_syslog.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |s|
|
|
8
8
|
## If your rubyforge_project name is different, then edit it and comment out
|
9
9
|
## the sub! line in the Rakefile
|
10
10
|
s.name = 'remote_syslog'
|
11
|
-
s.version = '1.6.6.
|
11
|
+
s.version = '1.6.6.rc2'
|
12
12
|
s.date = '2012-08-13'
|
13
13
|
s.rubyforge_project = 'remote_syslog'
|
14
14
|
|