loggability 0.17.0 → 0.18.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/History.rdoc +10 -0
- data/Rakefile +1 -1
- data/lib/loggability.rb +1 -1
- data/lib/loggability/log_device.rb +2 -2
- data/lib/loggability/log_device/http.rb +23 -1
- data/spec/loggability/log_device/http_spec.rb +48 -0
- metadata +29 -22
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5c0f3a12e9663d82cb709b0bf7f5aea24f9a49dba2435f5c63e289b7c731aa3e
|
4
|
+
data.tar.gz: cf7da9a50c5890505b96d2c1609f487a6ddb8c73c7deed602eb7508174613de2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e18c0c2891d2b0094dafa8b50b9b7d7ed8ba655e3f2f88105a279a655319041e39231417d0041eed2b29bed8b7fa956097f4d5f330a3a62122efd4de5d8d5435
|
7
|
+
data.tar.gz: b9a3fc6f3181e3e63d00d85709598601c3e266e19f471fb0456f7169c2acc2ea350235e480ce8adbbb16b713e234acfe6f9f76d951c4231e3847a48f6149419f
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/History.rdoc
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
= Release History for loggability
|
2
2
|
|
3
3
|
---
|
4
|
+
== v0.18.0 [2020-12-24] Michael Granger <ged@faeriemud.org>
|
5
|
+
|
6
|
+
Improvements:
|
7
|
+
|
8
|
+
- Add memory management to the http log device
|
9
|
+
- Add a dead-simple log server example
|
10
|
+
- Update for Ruby 3, add my updated gem cert
|
11
|
+
|
12
|
+
Thanks again to Mahmood Khan <mkhan1484@gmail.com> for the patch.
|
13
|
+
|
4
14
|
|
5
15
|
== v0.17.0 [2020-02-27] Michael Granger <ged@faeriemud.org>
|
6
16
|
|
data/Rakefile
CHANGED
data/lib/loggability.rb
CHANGED
@@ -38,9 +38,9 @@ class Loggability::LogDevice
|
|
38
38
|
### * "data_dog_api_key" is the argument that will be passed onto the datadog
|
39
39
|
### log device's constructor
|
40
40
|
def self::parse_device_spec( target_spec )
|
41
|
-
targets = target_spec.split( '
|
41
|
+
targets = target_spec.split( ';' ).compact
|
42
42
|
return targets.map do |t|
|
43
|
-
target_subclass = t[ DEVICE_TARGET_REGEX, 1 ]&.strip
|
43
|
+
target_subclass = t[ DEVICE_TARGET_REGEX, 1 ]&.strip.to_sym
|
44
44
|
target_subclass_args = t[ DEVICE_TARGET_REGEX, 2 ]
|
45
45
|
|
46
46
|
self.create( target_subclass, target_subclass_args )
|
@@ -33,6 +33,9 @@ class Loggability::LogDevice::Http < Loggability::LogDevice
|
|
33
33
|
# The default Executor class to use for asynchronous tasks
|
34
34
|
DEFAULT_EXECUTOR_CLASS = Concurrent::SingleThreadExecutor
|
35
35
|
|
36
|
+
# The default for the maximum bytesize of the queue (1 GB)
|
37
|
+
DEFAULT_MAX_QUEUE_BYTESIZE = ( 2 ** 10 ) * ( 2 ** 10 ) * ( 2 ** 10 )
|
38
|
+
|
36
39
|
# The default options for new instances
|
37
40
|
DEFAULT_OPTIONS = {
|
38
41
|
execution_interval: DEFAULT_BATCH_INTERVAL,
|
@@ -69,6 +72,8 @@ class Loggability::LogDevice::Http < Loggability::LogDevice
|
|
69
72
|
@endpoint = URI( endpoint ).freeze
|
70
73
|
@logs_queue = Queue.new
|
71
74
|
|
75
|
+
@logs_queue_bytesize = 0
|
76
|
+
@max_queue_bytesize = opts[:max_queue_bytesize] || DEFAULT_MAX_QUEUE_BYTESIZE
|
72
77
|
@batch_interval = opts[:batch_interval] || DEFAULT_BATCH_INTERVAL
|
73
78
|
@write_timeout = opts[:write_timeout] || DEFAULT_WRITE_TIMEOUT
|
74
79
|
@max_batch_size = opts[:max_batch_size] || DEFAULT_MAX_BATCH_SIZE
|
@@ -97,6 +102,14 @@ class Loggability::LogDevice::Http < Loggability::LogDevice
|
|
97
102
|
# logging service.
|
98
103
|
attr_reader :logs_queue
|
99
104
|
|
105
|
+
##
|
106
|
+
# The max bytesize of the queue. Will not queue more messages if this threshold is hit
|
107
|
+
attr_reader :max_queue_bytesize
|
108
|
+
|
109
|
+
##
|
110
|
+
# The size of +logs_queue+ in bytes
|
111
|
+
attr_accessor :logs_queue_bytesize
|
112
|
+
|
100
113
|
##
|
101
114
|
# The monotonic clock time when the last batch of logs were sent
|
102
115
|
attr_accessor :last_send_time
|
@@ -133,6 +146,13 @@ class Loggability::LogDevice::Http < Loggability::LogDevice
|
|
133
146
|
### LogDevice API -- write a message to the HTTP device.
|
134
147
|
def write( message )
|
135
148
|
self.start unless self.running?
|
149
|
+
if message.is_a?( Hash )
|
150
|
+
message_size = message.to_json.bytesize
|
151
|
+
else
|
152
|
+
message_size = message.bytesize
|
153
|
+
end
|
154
|
+
return if ( self.logs_queue_bytesize + message_size ) >= self.max_queue_bytesize
|
155
|
+
self.logs_queue_bytesize += message_size
|
136
156
|
self.logs_queue.enq( message )
|
137
157
|
self.send_logs
|
138
158
|
end
|
@@ -246,7 +266,9 @@ class Loggability::LogDevice::Http < Loggability::LogDevice
|
|
246
266
|
max_size = self.max_batch_bytesize - self.max_message_bytesize - 2 # for the outer Array
|
247
267
|
|
248
268
|
while count < self.max_batch_size && bytes < max_size && !self.logs_queue.empty?
|
249
|
-
|
269
|
+
message = self.logs_queue.deq
|
270
|
+
formatted_message = self.format_log_message( message )
|
271
|
+
self.logs_queue_bytesize -= message.bytesize
|
250
272
|
|
251
273
|
count += 1
|
252
274
|
bytes += formatted_message.bytesize + 3 # comma and delimiters
|
@@ -166,4 +166,52 @@ describe Loggability::LogDevice::Http do
|
|
166
166
|
expect( http.verify_mode ).to eq( OpenSSL::SSL::VERIFY_PEER )
|
167
167
|
end
|
168
168
|
|
169
|
+
|
170
|
+
it "stops queuing more messages if max queue size is reached" do
|
171
|
+
device = described_class.new(
|
172
|
+
max_batch_bytesize: 1024,
|
173
|
+
batch_interval: 100,
|
174
|
+
max_queue_bytesize: 100,
|
175
|
+
executor_class: Concurrent::ImmediateExecutor )
|
176
|
+
device.instance_variable_set( :@http_client, http_client )
|
177
|
+
|
178
|
+
expect( device ).to receive( :send_logs ).at_least( :once )
|
179
|
+
|
180
|
+
msg = "test message"
|
181
|
+
device.write(msg)
|
182
|
+
expect( device.logs_queue_bytesize == msg.bytesize )
|
183
|
+
|
184
|
+
hash_msg = { message: "This is a test log message", tags: ["tag1", "tag2"] }
|
185
|
+
device.write( hash_msg )
|
186
|
+
previous_bytesize = device.logs_queue_bytesize - hash_msg.to_json.bytesize
|
187
|
+
expect( device.logs_queue_bytesize ).to eq( hash_msg.to_json.bytesize + previous_bytesize )
|
188
|
+
|
189
|
+
queue_current_bytesize = device.logs_queue_bytesize
|
190
|
+
hash_msg = { message: "This is a test log message", tags: ["tag1", "tag2"] }
|
191
|
+
device.write( hash_msg )
|
192
|
+
expect( device.logs_queue_bytesize ).to eq( queue_current_bytesize )
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
it "reduces the queue bytesize once messages are sent" do
|
197
|
+
device = described_class.new(
|
198
|
+
max_batch_bytesize: 1024,
|
199
|
+
batch_interval: 100,
|
200
|
+
max_queue_bytesize: 100,
|
201
|
+
executor_class: Concurrent::ImmediateExecutor )
|
202
|
+
device.instance_variable_set( :@http_client, http_client )
|
203
|
+
|
204
|
+
expect( device ).to receive( :send_logs ).at_least( :once )
|
205
|
+
msg = "test message"
|
206
|
+
device.write(msg)
|
207
|
+
expect( device.logs_queue_bytesize == msg.bytesize )
|
208
|
+
|
209
|
+
msg = "this is just a test message"
|
210
|
+
device.write( msg )
|
211
|
+
previous_bytesize = device.logs_queue_bytesize - msg.bytesize
|
212
|
+
expect( device.logs_queue_bytesize ).to eq( msg.bytesize + previous_bytesize )
|
213
|
+
|
214
|
+
expect { device.get_next_log_payload }.to change { device.logs_queue_bytesize }.to( 0 )
|
215
|
+
end
|
216
|
+
|
169
217
|
end
|
metadata
CHANGED
@@ -1,18 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loggability
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.18.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Granger
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MIID+DCCAmCgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAiMSAwHgYDVQQDDBdnZWQv
|
14
|
+
REM9RmFlcmllTVVEL0RDPW9yZzAeFw0yMDEyMjQyMDU1MjlaFw0yMTEyMjQyMDU1
|
15
|
+
MjlaMCIxIDAeBgNVBAMMF2dlZC9EQz1GYWVyaWVNVUQvREM9b3JnMIIBojANBgkq
|
16
16
|
hkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAvyVhkRzvlEs0fe7145BYLfN6njX9ih5H
|
17
17
|
L60U0p0euIurpv84op9CNKF9tx+1WKwyQvQP7qFGuZxkSUuWcP/sFhDXL1lWUuIl
|
18
18
|
M4uHbGCRmOshDrF4dgnBeOvkHr1fIhPlJm5FO+Vew8tSQmlDsosxLUx+VB7DrVFO
|
@@ -21,20 +21,19 @@ cert_chain:
|
|
21
21
|
vQ66lts4alKC69TE5cuKasWBm+16A4aEe3XdZBRNmtOu/g81gvwA7fkJHKllJuaI
|
22
22
|
dXzdHqq+zbGZVSQ7pRYHYomD0IiDe1DbIouFnPWmagaBnGHwXkDT2bKKP+s2v21m
|
23
23
|
ozilJg4aar2okb/RA6VS87o+d7g6LpDDMMQjH4G9OPnJENLdhu8KnPw/ivSVvQw7
|
24
|
-
N2I4L/ZOIe2DIVuYH7aLHfjZDQv/
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
XrxOxp8o0uOkU7FdLSGsyqJ2LzsR4obN
|
24
|
+
N2I4L/ZOIe2DIVuYH7aLHfjZDQv/mNgpAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYD
|
25
|
+
VR0PBAQDAgSwMB0GA1UdDgQWBBRyjf55EbrHagiRLqt5YAd3yb8k4DANBgkqhkiG
|
26
|
+
9w0BAQsFAAOCAYEAMYegZanJi8zq7QKPT7wqXefX4C88I5JWeBHR3PvvWK0CwyMV
|
27
|
+
peyiu5I13w/lYX+HUZjE4qsSpJMJFXWl4WZCOo+AMprOcf0PxfuJpxCej5D4tavf
|
28
|
+
vRfhahSw7XJrcZih/3J+/UgoH7R05MJ+8LTcy3HGrB3a0vTafjm8OY7Xpa0LJDoN
|
29
|
+
JDqxK321VIHyTibbKeA1hWSE6ljlQDvFbTqiCj3Ulp1jTv3TOlvRl8fqcfhxUJI0
|
30
|
+
+5Q82jJODjEN+GaWs0V+NlrbU94cXwS2PH5dXogftB5YYA5Ex8A0ikZ73xns4Hdo
|
31
|
+
XxdLdd92F5ovxA23j/rKe/IDwqr6FpDkU3nPXH/Qp0TVGv9zZnVJc/Z6ChkuWj8z
|
32
|
+
pW7JAyyiiHZgKKDReDrA2LA7Zs3o/7KA6UtUH0FHf8LYhcK+pfHk6RtjRe65ffw+
|
33
|
+
MCh97sQ/Z/MOusb5+QddBmB+k8EicXyGNl4b5L4XpL7fIQu+Y96TB3JEJlShxFD9
|
34
|
+
k9FjI4d9EP54gS/4
|
36
35
|
-----END CERTIFICATE-----
|
37
|
-
date: 2020-
|
36
|
+
date: 2020-12-24 00:00:00.000000000 Z
|
38
37
|
dependencies:
|
39
38
|
- !ruby/object:Gem::Dependency
|
40
39
|
name: rake-deveiate
|
@@ -167,8 +166,13 @@ files:
|
|
167
166
|
homepage: https://hg.sr.ht/~ged/Loggability
|
168
167
|
licenses:
|
169
168
|
- BSD-3-Clause
|
170
|
-
metadata:
|
171
|
-
|
169
|
+
metadata:
|
170
|
+
homepage_uri: https://hg.sr.ht/~ged/Loggability
|
171
|
+
documentation_uri: https://deveiate.org/code/loggability
|
172
|
+
changelog_uri: https://deveiate.org/code/loggability/History_md.html
|
173
|
+
source_uri: https://hg.sr.ht/~ged/Loggability/browse
|
174
|
+
bug_tracker_uri: https://todo.sr.ht/~ged/Loggability/browse
|
175
|
+
post_install_message:
|
172
176
|
rdoc_options: []
|
173
177
|
require_paths:
|
174
178
|
- lib
|
@@ -177,14 +181,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
181
|
- - "~>"
|
178
182
|
- !ruby/object:Gem::Version
|
179
183
|
version: '2.5'
|
184
|
+
- - "~>"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '3.0'
|
180
187
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
181
188
|
requirements:
|
182
189
|
- - ">="
|
183
190
|
- !ruby/object:Gem::Version
|
184
191
|
version: '0'
|
185
192
|
requirements: []
|
186
|
-
rubygems_version: 3.
|
187
|
-
signing_key:
|
193
|
+
rubygems_version: 3.2.2
|
194
|
+
signing_key:
|
188
195
|
specification_version: 4
|
189
196
|
summary: A composable logging system built on the standard Logger library.
|
190
197
|
test_files: []
|
metadata.gz.sig
CHANGED
Binary file
|