cloudwatchlogger 0.2.0 → 0.2.1
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.
- checksums.yaml +4 -4
- data/README.md +5 -0
- data/lib/cloudwatchlogger.rb +2 -4
- data/lib/cloudwatchlogger/client.rb +36 -39
- data/lib/cloudwatchlogger/client/aws_sdk.rb +2 -2
- data/lib/cloudwatchlogger/client/aws_sdk/threaded.rb +20 -23
- data/lib/cloudwatchlogger/version.rb +1 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fb1e357bd158f76606d1e13a03ed520f6dead066
|
4
|
+
data.tar.gz: 4dd0d17ac08f99ff207519b1b9e5ad7c0120cc8d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ae37a40c94f7f2b7b82702ff319d3511dc0baf64e70e095b2bfd2cfaf37bb06955dd083426cb068412f1dcdfc560b65ef586c4d50243ea902792162eb11ec59
|
7
|
+
data.tar.gz: e0c060b9ec7d9001a450b0da9d611e7d1bd1c77cf70278e32f38c646c64effe4dd7bdb997dfec03dfbc1603d878f20b642b243fefe177d9e37e5a85081f1dc67
|
data/README.md
CHANGED
data/lib/cloudwatchlogger.rb
CHANGED
@@ -3,11 +3,10 @@ require File.join(File.dirname(__FILE__), 'cloudwatchlogger', 'client')
|
|
3
3
|
require 'logger'
|
4
4
|
|
5
5
|
module CloudWatchLogger
|
6
|
-
|
7
6
|
class LogGroupNameRequired < ArgumentError; end
|
8
7
|
class LogEventRejected < ArgumentError; end
|
9
8
|
|
10
|
-
def self.new(credentials, log_group_name, log_stream_name=nil, opts={})
|
9
|
+
def self.new(credentials, log_group_name, log_stream_name = nil, opts = {})
|
11
10
|
client = CloudWatchLogger::Client.new(credentials, log_group_name, log_stream_name, opts)
|
12
11
|
logger = Logger.new(client)
|
13
12
|
|
@@ -19,5 +18,4 @@ module CloudWatchLogger
|
|
19
18
|
|
20
19
|
logger
|
21
20
|
end
|
22
|
-
|
23
|
-
end
|
21
|
+
end
|
@@ -5,44 +5,42 @@ require 'uuid'
|
|
5
5
|
|
6
6
|
module CloudWatchLogger
|
7
7
|
module Client
|
8
|
-
|
9
|
-
def self.new(credentials, log_group_name, log_stream_name=nil, opts={})
|
8
|
+
def self.new(credentials, log_group_name, log_stream_name = nil, opts = {})
|
10
9
|
unless log_group_name
|
11
|
-
raise LogGroupNameRequired
|
10
|
+
raise LogGroupNameRequired, 'log_group_name is required'
|
12
11
|
end
|
13
12
|
|
14
13
|
CloudWatchLogger::Client::AWS_SDK.new(credentials, log_group_name, log_stream_name, opts)
|
15
14
|
end
|
16
15
|
|
17
16
|
module InstanceMethods
|
18
|
-
|
19
|
-
|
20
|
-
[prefix,key.to_s].compact.join('.')
|
17
|
+
def masherize_key(prefix, key)
|
18
|
+
[prefix, key.to_s].compact.join('.')
|
21
19
|
end
|
22
20
|
|
23
|
-
def masher(hash, prefix=nil)
|
21
|
+
def masher(hash, prefix = nil)
|
24
22
|
hash.map do |v|
|
25
23
|
if v[1].is_a?(Hash)
|
26
|
-
masher(v[1],masherize_key(prefix,v[0]))
|
24
|
+
masher(v[1], masherize_key(prefix, v[0]))
|
27
25
|
else
|
28
|
-
"#{masherize_key(prefix,v[0])}=" << case v[1]
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
26
|
+
"#{masherize_key(prefix, v[0])}=" << case v[1]
|
27
|
+
when Symbol
|
28
|
+
v[1].to_s
|
29
|
+
else
|
30
|
+
v[1].inspect
|
31
|
+
end
|
34
32
|
end
|
35
|
-
end.join(
|
33
|
+
end.join(', ')
|
36
34
|
end
|
37
35
|
|
38
36
|
def formatter
|
39
37
|
proc do |severity, datetime, progname, msg|
|
40
|
-
processid=Process.pid
|
38
|
+
processid = Process.pid
|
41
39
|
if @format == :json && msg.is_a?(Hash)
|
42
|
-
MultiJson.dump(msg.merge(
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
MultiJson.dump(msg.merge(severity: severity,
|
41
|
+
datetime: datetime,
|
42
|
+
progname: progname,
|
43
|
+
pid: processid))
|
46
44
|
else
|
47
45
|
message = "#{datetime} "
|
48
46
|
message << massage_message(msg, severity, processid)
|
@@ -51,18 +49,18 @@ module CloudWatchLogger
|
|
51
49
|
end
|
52
50
|
|
53
51
|
def massage_message(incoming_message, severity, processid)
|
54
|
-
outgoing_message =
|
55
|
-
|
52
|
+
outgoing_message = ''
|
53
|
+
|
56
54
|
outgoing_message << "pid=#{processid}, thread=#{Thread.current.object_id}, severity=#{severity}, "
|
57
|
-
|
58
|
-
case incoming_message
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
55
|
+
|
56
|
+
outgoing_message << case incoming_message
|
57
|
+
when Hash
|
58
|
+
masher(incoming_message)
|
59
|
+
when String
|
60
|
+
incoming_message
|
61
|
+
else
|
62
|
+
incoming_message.inspect
|
63
|
+
end
|
66
64
|
outgoing_message
|
67
65
|
end
|
68
66
|
|
@@ -73,18 +71,17 @@ module CloudWatchLogger
|
|
73
71
|
def setup_log_group_name(name)
|
74
72
|
@log_group_name = name
|
75
73
|
end
|
76
|
-
|
74
|
+
|
77
75
|
def setup_log_stream_name(name)
|
78
|
-
@log_stream_name = name
|
79
|
-
if @log_stream_name.nil?
|
80
|
-
uuid = UUID.new
|
81
|
-
@log_stream_name = "#{Socket.gethostname}-#{uuid.generate}"
|
82
|
-
end
|
76
|
+
@log_stream_name = name || default_log_stream_name
|
83
77
|
end
|
84
78
|
|
79
|
+
def default_log_stream_name
|
80
|
+
uuid = UUID.new
|
81
|
+
@log_stream_name ||= "#{Socket.gethostname}-#{uuid.generate}"
|
82
|
+
end
|
85
83
|
end
|
86
|
-
|
87
84
|
end
|
88
85
|
end
|
89
86
|
|
90
|
-
require File.join(File.dirname(__FILE__), 'client', 'aws_sdk')
|
87
|
+
require File.join(File.dirname(__FILE__), 'client', 'aws_sdk')
|
@@ -7,7 +7,7 @@ module CloudWatchLogger
|
|
7
7
|
|
8
8
|
attr_reader :input_uri, :deliverer
|
9
9
|
|
10
|
-
def initialize(credentials, log_group_name, log_stream_name, opts={})
|
10
|
+
def initialize(credentials, log_group_name, log_stream_name, opts = {})
|
11
11
|
setup_credentials(credentials)
|
12
12
|
setup_log_group_name(log_group_name)
|
13
13
|
setup_log_stream_name(log_stream_name)
|
@@ -23,4 +23,4 @@ module CloudWatchLogger
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
end
|
26
|
-
end
|
26
|
+
end
|
@@ -4,13 +4,15 @@ require 'thread'
|
|
4
4
|
module CloudWatchLogger
|
5
5
|
module Client
|
6
6
|
class AWS_SDK
|
7
|
-
|
8
7
|
# Used by the Threaded client to manage the delivery thread
|
9
8
|
# recreating it if is lost due to a fork.
|
10
9
|
#
|
11
10
|
class DeliveryThreadManager
|
12
|
-
def initialize(credentials, log_group_name, log_stream_name, opts={})
|
13
|
-
@credentials
|
11
|
+
def initialize(credentials, log_group_name, log_stream_name, opts = {})
|
12
|
+
@credentials = credentials
|
13
|
+
@log_group_name = log_group_name
|
14
|
+
@log_stream_name = log_stream_name
|
15
|
+
@opts = opts
|
14
16
|
start_thread
|
15
17
|
end
|
16
18
|
|
@@ -18,9 +20,9 @@ module CloudWatchLogger
|
|
18
20
|
def deliver(message)
|
19
21
|
start_thread unless @thread.alive?
|
20
22
|
@thread.deliver(message)
|
21
|
-
#Race condition? Sometimes we need to rescue this and start a new thread
|
23
|
+
# Race condition? Sometimes we need to rescue this and start a new thread
|
22
24
|
rescue NoMethodError
|
23
|
-
@thread.kill #Try not to leak threads, should already be dead anyway
|
25
|
+
@thread.kill # Try not to leak threads, should already be dead anyway
|
24
26
|
start_thread
|
25
27
|
retry
|
26
28
|
end
|
@@ -33,21 +35,20 @@ module CloudWatchLogger
|
|
33
35
|
end
|
34
36
|
|
35
37
|
class DeliveryThread < Thread
|
36
|
-
|
37
|
-
def initialize(credentials, log_group_name, log_stream_name, opts={})
|
38
|
-
@credentials, @log_group_name, @log_stream_name, @opts = credentials, log_group_name, log_stream_name, opts
|
38
|
+
def initialize(credentials, log_group_name, log_stream_name, opts = {})
|
39
39
|
opts[:open_timeout] = opts[:open_timeout] || 120
|
40
40
|
opts[:read_timeout] = opts[:read_timeout] || 120
|
41
|
+
@credentials = credentials
|
42
|
+
@log_group_name = log_group_name
|
43
|
+
@log_stream_name = log_stream_name
|
44
|
+
@opts = opts
|
41
45
|
|
42
46
|
@queue = Queue.new
|
43
47
|
@exiting = false
|
44
48
|
|
45
49
|
super do
|
46
50
|
loop do
|
47
|
-
|
48
|
-
if @client.nil?
|
49
|
-
connect! opts
|
50
|
-
end
|
51
|
+
connect!(opts) if @client.nil?
|
51
52
|
|
52
53
|
msg = @queue.pop
|
53
54
|
break if msg == :__delivery_thread_exit_signal__
|
@@ -57,14 +58,11 @@ module CloudWatchLogger
|
|
57
58
|
log_group_name: @log_group_name,
|
58
59
|
log_stream_name: @log_stream_name,
|
59
60
|
log_events: [{
|
60
|
-
timestamp: (Time.now.utc.to_f.round(3)*1000).to_i,
|
61
|
+
timestamp: (Time.now.utc.to_f.round(3) * 1000).to_i,
|
61
62
|
message: msg
|
62
63
|
}]
|
63
64
|
}
|
64
|
-
|
65
|
-
if token = @sequence_token
|
66
|
-
event[:sequence_token] = token
|
67
|
-
end
|
65
|
+
event[:sequence_token] = @sequence_token if @sequence_token
|
68
66
|
response = @client.put_log_events(event)
|
69
67
|
unless response.rejected_log_events_info.nil?
|
70
68
|
raise CloudWatchLogger::LogEventRejected
|
@@ -77,10 +75,10 @@ module CloudWatchLogger
|
|
77
75
|
end
|
78
76
|
end
|
79
77
|
|
80
|
-
at_exit
|
78
|
+
at_exit do
|
81
79
|
exit!
|
82
80
|
join
|
83
|
-
|
81
|
+
end
|
84
82
|
end
|
85
83
|
|
86
84
|
# Signals the queue that we're exiting
|
@@ -94,7 +92,7 @@ module CloudWatchLogger
|
|
94
92
|
@queue.push(message)
|
95
93
|
end
|
96
94
|
|
97
|
-
def connect!(opts={})
|
95
|
+
def connect!(opts = {})
|
98
96
|
@client = Aws::CloudWatchLogs::Client.new(
|
99
97
|
region: @opts[:region] || 'us-east-1',
|
100
98
|
access_key_id: @credentials[:access_key_id],
|
@@ -107,16 +105,15 @@ module CloudWatchLogger
|
|
107
105
|
log_group_name: @log_group_name,
|
108
106
|
log_stream_name: @log_stream_name
|
109
107
|
)
|
110
|
-
rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException
|
108
|
+
rescue Aws::CloudWatchLogs::Errors::ResourceNotFoundException
|
111
109
|
@client.create_log_group(
|
112
110
|
log_group_name: @log_group_name
|
113
111
|
)
|
114
112
|
retry
|
115
|
-
rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException
|
113
|
+
rescue Aws::CloudWatchLogs::Errors::ResourceAlreadyExistsException
|
116
114
|
end
|
117
115
|
end
|
118
116
|
end
|
119
|
-
|
120
117
|
end
|
121
118
|
end
|
122
119
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudwatchlogger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zane Shannon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-07-
|
11
|
+
date: 2018-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uuid
|