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