mogilefsd_log_tailer 0.0.1 → 0.0.2
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/Gemfile.lock +3 -1
- data/bin/mogilefsd_tail +1 -5
- data/lib/mogilefsd_log_tailer/tail_handler.rb +46 -0
- data/lib/mogilefsd_log_tailer/version.rb +2 -2
- data/lib/mogilefsd_log_tailer.rb +39 -46
- data/mogilefsd_log_tailer.gemspec +1 -0
- metadata +16 -4
data/Gemfile.lock
CHANGED
data/bin/mogilefsd_tail
CHANGED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'eventmachine'
|
2
|
+
|
3
|
+
module MogilefsdLogTailer
|
4
|
+
class TailHandler < EventMachine::Connection
|
5
|
+
def initialize(hostname, filename)
|
6
|
+
@hostname = hostname
|
7
|
+
@received_data = ''
|
8
|
+
|
9
|
+
if filename.nil? || filename.empty?
|
10
|
+
@file = $stdout
|
11
|
+
else
|
12
|
+
@file = File.open(filename, 'wb')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def post_init
|
17
|
+
@received_data = ''
|
18
|
+
send_data("!watch\r\n")
|
19
|
+
end
|
20
|
+
|
21
|
+
def receive_data(data)
|
22
|
+
# puts(" - Received #{data.inspect} from #{@hostname}")
|
23
|
+
if data =~ /\r\n/
|
24
|
+
lines = data.split("\r\n", -1)
|
25
|
+
lines.each_with_index do |line, i|
|
26
|
+
if i == 0
|
27
|
+
print_log_entry(@received_data + line)
|
28
|
+
@received_data = ''
|
29
|
+
elsif i == lines.size - 1
|
30
|
+
@received_data << line
|
31
|
+
else
|
32
|
+
print_log_entry(line)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
else
|
36
|
+
@received_data << data
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def print_log_entry(line)
|
41
|
+
msg = "#{Time.now.to_s}: #{@hostname}: #{line}"
|
42
|
+
@file.puts(msg)
|
43
|
+
@file.flush
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.0.
|
1
|
+
module MogilefsdLogTailer
|
2
|
+
VERSION = "0.0.2"
|
3
3
|
end
|
data/lib/mogilefsd_log_tailer.rb
CHANGED
@@ -1,70 +1,63 @@
|
|
1
|
+
require 'daemons'
|
1
2
|
require 'mogilefsd_log_tailer/version'
|
3
|
+
require 'mogilefsd_log_tailer/tail_handler'
|
2
4
|
require 'optparse'
|
3
|
-
require 'eventmachine'
|
4
|
-
require 'socket'
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
|
13
|
-
def receive_data(data)
|
14
|
-
port, ip = Socket.unpack_sockaddr_in(get_peername)
|
15
|
-
# puts("Received #{data.inspect} from #{ip}:#{port}")
|
16
|
-
if data =~ /\r\n/
|
17
|
-
lines = data.split("\r\n")
|
18
|
-
lines.each_with_index do |line, i|
|
19
|
-
# puts("line #{i}: #{line.inspect}")
|
20
|
-
if i == 0
|
21
|
-
print_log_entry(@received_data + line, ip, port)
|
22
|
-
@received_data = ''
|
23
|
-
elsif i == lines.size - 1
|
24
|
-
@received_data << line
|
25
|
-
else
|
26
|
-
print_log_entry(line, ip, port)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
else
|
30
|
-
@received_data << data
|
31
|
-
end
|
32
|
-
# puts("@received_data = #{@received_data.inspect}")
|
33
|
-
end
|
6
|
+
module MogilefsdLogTailer
|
7
|
+
def self.parse_options!
|
8
|
+
hosts = []
|
9
|
+
filename = nil
|
10
|
+
daemonize = false
|
34
11
|
|
35
|
-
def print_log_entry(line, ip, port)
|
36
|
-
puts("#{Time.now.to_s}: #{ip}:#{port}: #{line}")
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def initialize
|
41
|
-
@hosts = []
|
42
|
-
end
|
43
|
-
|
44
|
-
def parse_options!
|
45
12
|
OptionParser.new do |o|
|
46
13
|
script_name = File.basename($0)
|
47
14
|
o.set_summary_indent(' ')
|
48
15
|
o.banner = "#{script_name} version #{VERSION}\nUsage: #{script_name} [options] tracker1:port1 tracker2:port2 ..."
|
49
16
|
o.separator ""
|
50
|
-
o.
|
17
|
+
o.on("-d", "--[no-]daemonize", "Run as a daemon.") { |d| daemonize = d }
|
18
|
+
o.on("-f", "--file FILE", "The log file to which the output should go.") { |n| filename = File.expand_path(n) }
|
19
|
+
o.on("-h", "--help", "Show this help message.") { puts o; exit }
|
51
20
|
end.parse!
|
52
21
|
|
53
22
|
while (h = ARGV.shift)
|
54
|
-
|
23
|
+
hosts << h
|
55
24
|
end
|
56
25
|
|
57
|
-
if
|
26
|
+
if hosts.empty?
|
58
27
|
STDERR.puts("No hosts to tail.")
|
59
28
|
exit(1)
|
60
29
|
end
|
30
|
+
|
31
|
+
[
|
32
|
+
hosts,
|
33
|
+
{
|
34
|
+
:daemonize => daemonize,
|
35
|
+
:filename => filename,
|
36
|
+
},
|
37
|
+
]
|
61
38
|
end
|
62
39
|
|
63
|
-
def run
|
40
|
+
def self.run
|
41
|
+
hosts, options = parse_options!
|
42
|
+
|
43
|
+
log_dir = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
44
|
+
if options[:filename]
|
45
|
+
log_dir = File.dirname(options[:filename])
|
46
|
+
end
|
47
|
+
|
48
|
+
if options[:daemonize]
|
49
|
+
Daemons.daemonize(
|
50
|
+
:app_name => 'mogilefsd_log_tailer',
|
51
|
+
:dir_mode => :normal,
|
52
|
+
:dir => log_dir,
|
53
|
+
:log_output => true
|
54
|
+
)
|
55
|
+
end
|
56
|
+
|
64
57
|
EventMachine.run do
|
65
|
-
|
58
|
+
hosts.each do |hp|
|
66
59
|
host, port = hp.split(':')
|
67
|
-
EventMachine.connect(host, port.to_i,
|
60
|
+
EventMachine.connect(host, port.to_i, TailHandler, host, options[:filename])
|
68
61
|
end
|
69
62
|
end
|
70
63
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mogilefsd_log_tailer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-19 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: daemons
|
16
|
+
requirement: &8400940 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *8400940
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: eventmachine
|
16
|
-
requirement: &
|
27
|
+
requirement: &8400520 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ! '>='
|
@@ -21,7 +32,7 @@ dependencies:
|
|
21
32
|
version: '0'
|
22
33
|
type: :runtime
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *8400520
|
25
36
|
description: Script to do "tail -f" on the "!watch" output from several MogileFS trackers.
|
26
37
|
email:
|
27
38
|
- ahwatts@gmail.com
|
@@ -37,6 +48,7 @@ files:
|
|
37
48
|
- Rakefile
|
38
49
|
- bin/mogilefsd_tail
|
39
50
|
- lib/mogilefsd_log_tailer.rb
|
51
|
+
- lib/mogilefsd_log_tailer/tail_handler.rb
|
40
52
|
- lib/mogilefsd_log_tailer/version.rb
|
41
53
|
- mogilefsd_log_tailer.gemspec
|
42
54
|
homepage: ''
|