mogilefsd_log_tailer 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,12 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mogilefsd_log_tailer (0.0.1)
4
+ mogilefsd_log_tailer (0.0.2)
5
+ daemons
5
6
  eventmachine
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
11
+ daemons (1.1.6)
10
12
  eventmachine (0.12.10)
11
13
 
12
14
  PLATFORMS
data/bin/mogilefsd_tail CHANGED
@@ -4,8 +4,4 @@ require 'rubygems'
4
4
  require 'bundler/setup'
5
5
 
6
6
  require 'mogilefsd_log_tailer'
7
- require 'mogilefsd_log_tailer/version'
8
-
9
- lt = MogilefsdLogTailer.new
10
- lt.parse_options!
11
- lt.run
7
+ MogilefsdLogTailer.run
@@ -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
- class MogilefsdLogTailer
2
- VERSION = "0.0.1"
1
+ module MogilefsdLogTailer
2
+ VERSION = "0.0.2"
3
3
  end
@@ -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
- class MogilefsdLogTailer
7
- module Handler
8
- def post_init
9
- @received_data = ''
10
- send_data("!watch\r\n")
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.on_tail("-h", "--help", "Show this help message.") { puts o; exit }
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
- @hosts << h
23
+ hosts << h
55
24
  end
56
25
 
57
- if @hosts.empty?
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
- @hosts.each do |hp|
58
+ hosts.each do |hp|
66
59
  host, port = hp.split(':')
67
- EventMachine.connect(host, port.to_i, Handler)
60
+ EventMachine.connect(host, port.to_i, TailHandler, host, options[:filename])
68
61
  end
69
62
  end
70
63
  end
@@ -13,6 +13,7 @@ Gem::Specification.new do |s|
13
13
 
14
14
  s.rubyforge_project = "mogilefsd_log_tailer"
15
15
 
16
+ s.add_dependency('daemons')
16
17
  s.add_dependency('eventmachine')
17
18
 
18
19
  s.files = `git ls-files`.split("\n")
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.1
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: 2011-11-09 00:00:00.000000000Z
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: &16747740 !ruby/object:Gem::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: *16747740
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: ''