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 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: ''