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 +5 -0
- data/README.md +5 -1
- data/Rakefile +1 -1
- data/bin/tapsilog +1 -1
- data/bin/tapsilog_tail +11 -2
- data/lib/palmade/tapsilog/conn.rb +1 -4
- data/lib/palmade/tapsilog/protocol.rb +12 -6
- data/lib/palmade/tapsilog/server.rb +28 -1
- data/tapsilog.gemspec +2 -2
- metadata +3 -3
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
data/Rakefile
CHANGED
data/bin/tapsilog
CHANGED
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.
|
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}:#{
|
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,
|
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
|
-
|
70
|
-
|
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
|
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
|
-
|
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.
|
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-
|
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
|
-
-
|
7
|
+
- 3
|
8
8
|
- 0
|
9
|
-
version: 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-
|
17
|
+
date: 2010-09-13 00:00:00 +08:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|