loggability 0.17.0 → 0.18.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.
- 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
|