tapsilog 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,8 @@
1
+ v0.3.0
2
+ Fully compatible with old analogger protocol
3
+ Added support for overriding backend at service level
4
+ **Previous tapsilog releases are not compatible anymore. Upgrade to 0.3.0 clients is required
5
+
1
6
  v0.2.0
2
7
  Improved command line interface
3
8
  Includes tapsilog_tail utility
data/README.md CHANGED
@@ -64,7 +64,11 @@
64
64
  target: default
65
65
 
66
66
  - service: access
67
- target: access
67
+ target: /some/special/logfile
68
+
69
+ # You can override the global backend for this service
70
+ backend:
71
+ adapter: file
68
72
 
69
73
  - service: bizsupport
70
74
  target: bizsupport
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'echoe'
2
2
 
3
- Echoe.new('tapsilog', '0.2.0') do |p|
3
+ Echoe.new('tapsilog', '0.3.0') do |p|
4
4
  p.author = "Palmade"
5
5
  p.project = "tapsilog"
6
6
  p.summary = "Hydrid app-level logger from Palmade. Analogger fork."
data/bin/tapsilog CHANGED
@@ -82,7 +82,7 @@ module Palmade::Tapsilog
82
82
  exit
83
83
  end
84
84
  opts.on('-v', '--version', "Show version") do
85
- puts 'tapsilog 0.2.0'
85
+ puts 'tapsilog 0.3.0'
86
86
  exit
87
87
  end
88
88
 
data/bin/tapsilog_tail CHANGED
@@ -35,7 +35,7 @@ optparse = OptionParser.new do |opts|
35
35
  exit
36
36
  end
37
37
  opts.on('-v', '--version', "Show version") do
38
- puts 'tapsilog_tail 0.2.0'
38
+ puts 'tapsilog_tail 0.3.0'
39
39
  exit
40
40
  end
41
41
  end
@@ -50,7 +50,6 @@ else
50
50
  tapsilog_config['backend'] ||= {}
51
51
  tapsilog_backend = tapsilog_config['backend']
52
52
  tapsilog_config['logs'] ||= []
53
- adapter = tapsilog_config['backend']['adapter'] || 'file'
54
53
 
55
54
  if tapsilog_config['default_log']
56
55
  tapsilog_config['logs'].push({'service' => 'default', 'target' => tapsilog_config['default_log']})
@@ -62,8 +61,14 @@ else
62
61
  target = srv['target'] || srv['logfile']
63
62
 
64
63
  services[service_name] = target
64
+
65
+ if srv['backend'] and service_name == service
66
+ tapsilog_config['backend'] = srv['backend']
67
+ end
65
68
  end
66
69
 
70
+ adapter = tapsilog_config['backend']['adapter'] || 'file'
71
+
67
72
  if adapter == 'file'
68
73
  command = "tail"
69
74
  command += " -f " if config[:follow]
@@ -89,6 +94,8 @@ else
89
94
  exit
90
95
  end
91
96
 
97
+ puts "==> Tailing logs from file: #{tail_target} <==\n\n"
98
+
92
99
  command += " #{tail_target} "
93
100
  system command
94
101
  elsif adapter == 'mongo'
@@ -128,6 +135,8 @@ else
128
135
  end
129
136
  end
130
137
 
138
+ puts "==> Tailing logs from mongoDB: #{tail_target} <==\n\n"
139
+
131
140
  last_entries = db[tail_target].find({}, :sort => ['_id', :desc], :limit => config[:lines].to_i).to_a.reverse
132
141
  print_entries.call(last_entries)
133
142
 
@@ -1,5 +1,3 @@
1
- require 'cgi'
2
-
3
1
  module Palmade::Tapsilog
4
2
  class Conn
5
3
  attr_reader :socket
@@ -34,9 +32,8 @@ module Palmade::Tapsilog
34
32
 
35
33
  ts = Time.now if ts.nil?
36
34
  tag_string = Utils.hash_to_query_string(tags)
37
- message = CGI.escape(message)
38
35
 
39
- fullmsg = ":#{service}:#{instance_key}:#{severity}:#{message}:#{tag_string}"
36
+ fullmsg = ":#{service}:#{instance_key}:#{severity}:#{tag_string}:#{message}"
40
37
 
41
38
  # Truncate below the 8192 limit on Tapsilog service
42
39
  fullmsg = fullmsg[0,8190] if fullmsg.size > 8190
@@ -1,5 +1,3 @@
1
- require 'cgi'
2
-
3
1
  module Palmade::Tapsilog
4
2
  class Protocol < EventMachine::Connection
5
3
  Ci = 'i'.freeze
@@ -16,6 +14,7 @@ module Palmade::Tapsilog
16
14
  @length = nil
17
15
  @logchunk = ''
18
16
  @authenticated = nil
17
+ @use_analogger_protocol = false
19
18
  end
20
19
 
21
20
  def receive_data(data)
@@ -55,7 +54,7 @@ module Palmade::Tapsilog
55
54
  end
56
55
 
57
56
  def get_message
58
- msg = @logchunk.slice!(0..@length).split(Rcolon, 6)
57
+ msg = @logchunk.slice!(0..@length).split(Rcolon, 5)
59
58
 
60
59
  unless @authenticated
61
60
  @authenticated = authenticate_message(msg)
@@ -66,8 +65,12 @@ module Palmade::Tapsilog
66
65
  msg.shift
67
66
 
68
67
  msg[0] = msg[0].to_s.gsub(/[^a-zA-Z0-9\-\_\.]\s/, '').strip
69
- msg[3] = CGI.unescape(msg[3].to_s)
70
- msg[4] = Utils::query_string_to_hash(msg[4].to_s)
68
+
69
+ unless @use_analogger_protocol
70
+ tag_string, message = msg[3].split(':', 2)
71
+ msg[3] = message
72
+ msg[4] = Utils::query_string_to_hash(tag_string.to_s)
73
+ end
71
74
 
72
75
  LoggerClass.add_log(msg)
73
76
  @length = nil
@@ -76,12 +79,15 @@ module Palmade::Tapsilog
76
79
 
77
80
  def authenticate_message(msg)
78
81
  if msg[4] == LoggerClass.key
82
+ @use_analogger_protocol = true
83
+ return true
84
+ elsif msg[4].split(':', 2)[1] == LoggerClass.key
79
85
  return true
80
86
  else
81
87
  peer = get_peername
82
88
  peer = (peer ? ::Socket.unpack_sockaddr_in(peer)[1] : 'UNK') rescue 'UNK'
83
89
 
84
- LoggerClass.add_log([:default, $$.to_s, :error, "Invalid key from #{peer} -- #{msg.last}"])
90
+ LoggerClass.add_log([:default, $$.to_s, :error, "Invalid key from #{peer} -- #{msg[4]}"])
85
91
  close_connection
86
92
  return false
87
93
  end
@@ -26,6 +26,7 @@ module Palmade::Tapsilog
26
26
 
27
27
  def self.boot
28
28
  load_adapter
29
+ load_service_adapters
29
30
 
30
31
  trap("INT") { exit }
31
32
  trap("TERM") { exit }
@@ -55,6 +56,24 @@ module Palmade::Tapsilog
55
56
  @adapter = adapter.new(adapter_config)
56
57
  end
57
58
 
59
+ def self.load_service_adapters
60
+ logs = @config[:logs] || []
61
+ @service_adapters = {}
62
+
63
+ logs.each do |service|
64
+ if service['backend']
65
+ adapter_name = service['backend']['adapter']
66
+ class_name = "#{adapter_name.capitalize}Adapter"
67
+ adapter = Palmade::Tapsilog::Adapters.const_get(class_name)
68
+
69
+ adapter_config = Utils.symbolize_keys(service['backend'])
70
+ adapter_config[:services] = [service]
71
+
72
+ @service_adapters[service['service']] = adapter.new(adapter_config)
73
+ end
74
+ end
75
+ end
76
+
58
77
  def self.prepare_server
59
78
  if @config[:socket]
60
79
  @usocks = @config[:socket]
@@ -145,13 +164,21 @@ module Palmade::Tapsilog
145
164
  def self.write_queue
146
165
  @queue.each do |log_message|
147
166
  next unless SeverityLevels.include?(log_message[3].to_sym)
148
- @adapter.write(log_message)
167
+ service = log_message[1]
168
+ if @service_adapters[service]
169
+ @service_adapters[service].write(log_message)
170
+ else
171
+ @adapter.write(log_message)
172
+ end
149
173
  end
150
174
  @queue.clear
151
175
  end
152
176
 
153
177
  def self.flush_queue
154
178
  @adapter.flush
179
+ @service_adapters.each do |service, adapter|
180
+ adapter.flush
181
+ end
155
182
  end
156
183
 
157
184
  end
data/tapsilog.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{tapsilog}
5
- s.version = "0.2.0"
5
+ s.version = "0.3.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Palmade"]
9
- s.date = %q{2010-09-08}
9
+ s.date = %q{2010-09-13}
10
10
  s.description = %q{Hydrid app-level logger from Palmade. Analogger fork.}
11
11
  s.email = %q{}
12
12
  s.executables = ["tapsilog", "tapsilog_tail"]
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 2
7
+ - 3
8
8
  - 0
9
- version: 0.2.0
9
+ version: 0.3.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Palmade
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-09-08 00:00:00 +08:00
17
+ date: 2010-09-13 00:00:00 +08:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency