tapsilog 0.2.0 → 0.3.0

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/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