logjam_agent 0.28.0 → 0.29.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 42a443531b0f42f9a5facc12e29186e0588e65a503ed066747d4a01e8545c4d7
4
- data.tar.gz: e9b3e84141df640116d7992707e2e16d783d3c61aeff6204202cc177f64706c2
3
+ metadata.gz: 24a410b2cc2884bdb2ad87c3219db9cc1c78b0b050e7a8161288a1f13146cdcf
4
+ data.tar.gz: c9dab061fe5360f6ff7db1784c1d0ff2c972b2b2a9486e0e689bc0068d6e9871
5
5
  SHA512:
6
- metadata.gz: 3d4072d17788175b864c19bee9fd0e200fac5bc8bf9efa30d20d4eecc02c51f1ef95117c463c187e9fbd41f19a5604d598de0ebd3d65adeb4014bfb9dcd8e6ac
7
- data.tar.gz: 9dd5d5b9a0a79e406567925ed7a18b2a93a8619d60042f4cf38ebd258018c32c023d38ce1e8911ac397c045c1f3799355ab4dcd99d0be9ff1cd8a701761138e7
6
+ metadata.gz: 351db0a9ab580febe99e11c2616e099817445ff698a2a26da7b5233497532a4abb49545949794dca173e54127e043f819c8040d9470abf295ee7fcd155360fba
7
+ data.tar.gz: 0e1c1387cb78caa5a84e2dcb6945558600ea5a3d613d66104ddaed9d1336d403f859e8295afcbe1eb8975370f408651b0a0a425f1c421b428dbad04c09cb4eb9
data/README.md CHANGED
@@ -93,11 +93,13 @@ module LogjamAgent
93
93
  self.max_bytes_all_lines = 1024 * 1024
94
94
 
95
95
  # Configure compression method. Defaults to NO_COMPRESSION. Available
96
- # compression methods are ZLIB_COMPRESSION and SNAPPY_COMPRESSION.
97
- # Snappy is faster and less CPU intensive than ZLIB, ZLIB achieves
98
- # higher compression rates.
96
+ # compression methods are ZLIB_COMPRESSION, SNAPPY_COMPRESSION, LZ4_COMPRESSION.
97
+ # Snappy and LZ4 are faster and less CPU intensive than ZLIB, ZLIB achieves
98
+ # higher compression rates. LZ4 is faster to decompress than Snappy
99
+ # and recommended.
99
100
  # self.compression_method = ZLIB_COMPRESSION
100
101
  # self.compression_method = SNAPPY_COMPRESSION
102
+ # self.compression_method = LZ4_COMPRESSION
101
103
 
102
104
  # Activate the split between hard and soft-exceptions. Soft exceptions are
103
105
  # all exceptions below a log level of Logger::ERROR. Logjam itself can then
@@ -110,7 +112,7 @@ end
110
112
 
111
113
  The agent generates unique request ids for all request handled. It
112
114
  will use [uuid4r](https://github.com/skaes/uuid4r) if this is
113
- avalaibale in the application. Otherwise it will fall back to use the
115
+ available in the application. Otherwise it will fall back to use the
114
116
  standard `SecureRandom` class shipped with Ruby.
115
117
 
116
118
  ### Generating JSON
@@ -135,7 +137,7 @@ LogjamAgent.error_handler = lambda {|exception| ... }
135
137
 
136
138
  The MIT License
137
139
 
138
- Copyright (c) 2013 - 2016 Stefan Kaes
140
+ Copyright (c) 2013 - 2019 Stefan Kaes
139
141
 
140
142
  Permission is hereby granted, free of charge, to any person obtaining a copy
141
143
  of this software and associated documentation files (the "Software"), to deal
@@ -1,3 +1,3 @@
1
1
  module LogjamAgent
2
- VERSION = "0.28.0"
2
+ VERSION = "0.29.0"
3
3
  end
data/lib/logjam_agent.rb CHANGED
@@ -117,6 +117,7 @@ module LogjamAgent
117
117
  NO_COMPRESSION = 0
118
118
  ZLIB_COMPRESSION = 1
119
119
  SNAPPY_COMPRESSION = 2
120
+ LZ4_COMPRESSION= 3
120
121
 
121
122
  mattr_reader :compression_method
122
123
  def self.compression_method=(compression_method)
@@ -128,6 +129,13 @@ module LogjamAgent
128
129
  rescue LoadError
129
130
  # do nothing
130
131
  end
132
+ when LZ4_COMPRESSION
133
+ begin
134
+ require "ruby-lz4"
135
+ @@compression_method = LZ4_COMPRESSION
136
+ rescue LoadError
137
+ # do nothing
138
+ end
131
139
  when NO_COMPRESSION, ZLIB_COMPRESSION
132
140
  @@compression_method = compression_method
133
141
  else
@@ -245,15 +253,35 @@ module LogjamAgent
245
253
  def self.encode_payload(data)
246
254
  json = json_encode_payload(data)
247
255
  case compression_method
248
- when ZLIB_COMPRESSION
249
- ActiveSupport::Gzip.compress(json)
250
256
  when SNAPPY_COMPRESSION
251
257
  Snappy.deflate(json)
258
+ when LZ4_COMPRESSION
259
+ n = data.byte_size
260
+ max_compressed_size = n + n/256 + 16
261
+ buf = String.new([n].pack("N"), capacity: max_compressed_size + 4)
262
+ LZ4::Raw.compress(json, input_size: n, dest: buf, max_ouput_size: max_compressed_size).first
263
+ when ZLIB_COMPRESSION
264
+ ActiveSupport::Gzip.compress(json)
252
265
  else
253
266
  json
254
267
  end
255
268
  end
256
269
 
270
+ def self.decode_payload(data)
271
+ case compression_method
272
+ when SNAPPY_COMPRESSION
273
+ Snappy.inflate(data)
274
+ when LZ4_COMPRESSION
275
+ uncompressed_size = data[0..3].unpack("N")
276
+ buf = String.new("", capacity: uncompressed_size)
277
+ LZ4::Raw.decompress(data[4..-1], uncompressed_size, dest: buf).first
278
+ when ZLIB_COMPRESSION
279
+ ActiveSupport::Gzip.decompress(data)
280
+ else
281
+ data
282
+ end
283
+ end
284
+
257
285
  def self.event(label, extra_fields = {})
258
286
  fields = {
259
287
  :label => label,
data/logjam_agent.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_development_dependency "rake"
22
22
  s.add_development_dependency "i18n"
23
23
  s.add_development_dependency "snappy"
24
+ s.add_development_dependency "lz4-ruby"
24
25
  s.add_development_dependency "oj"
25
26
  s.add_development_dependency "byebug"
26
27
  s.add_development_dependency "minitest"
@@ -30,7 +30,29 @@ module LogjamAgent
30
30
  normal_msg = LogjamAgent.encode_payload(data)
31
31
  LogjamAgent.compression_method = SNAPPY_COMPRESSION
32
32
  compressed_msg = LogjamAgent.encode_payload(data)
33
- assert_equal normal_msg, Snappy.inflate(compressed_msg)
33
+ assert_equal normal_msg, LogjamAgent.decode_payload(compressed_msg)
34
+ f = ZMQForwarder.new
35
+ f.expects(:publish).with("a-b", "x", compressed_msg)
36
+ f.forward(data, :routing_key => "x", :app_env => "a-b")
37
+ end
38
+
39
+ test "compressed message using lz4 can be uncompressed" do
40
+ data = {a: 1, b: "str"}
41
+ normal_msg = LogjamAgent.encode_payload(data)
42
+ LogjamAgent.compression_method = LZ4_COMPRESSION
43
+ compressed_msg = LogjamAgent.encode_payload(data)
44
+ assert_equal normal_msg, LogjamAgent.decode_payload(compressed_msg)
45
+ f = ZMQForwarder.new
46
+ f.expects(:publish).with("a-b", "x", compressed_msg)
47
+ f.forward(data, :routing_key => "x", :app_env => "a-b")
48
+ end
49
+
50
+ test "compressed message using zlib can be uncompressed" do
51
+ data = {a: 1, b: "str"}
52
+ normal_msg = LogjamAgent.encode_payload(data)
53
+ LogjamAgent.compression_method = ZLIB_COMPRESSION
54
+ compressed_msg = LogjamAgent.encode_payload(data)
55
+ assert_equal normal_msg, LogjamAgent.decode_payload(compressed_msg)
34
56
  f = ZMQForwarder.new
35
57
  f.expects(:publish).with("a-b", "x", compressed_msg)
36
58
  f.forward(data, :routing_key => "x", :app_env => "a-b")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logjam_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.0
4
+ version: 0.29.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Kaes
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-01 00:00:00.000000000 Z
11
+ date: 2019-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: lz4-ruby
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: oj
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -211,8 +225,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
225
  - !ruby/object:Gem::Version
212
226
  version: '0'
213
227
  requirements: []
214
- rubyforge_project: logjam_agent
215
- rubygems_version: 2.7.8
228
+ rubygems_version: 3.0.3
216
229
  signing_key:
217
230
  specification_version: 4
218
231
  summary: Logjam client library to be used with logjam