heavylog 0.1.1.beta.1 → 0.1.1.beta.2

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: d206e10d13818be551a6ddd6df008c174a0ae15c4e9499f340461df61ebf04d2
4
- data.tar.gz: db09d3d4a4d186702094c6526b13e04f19ebd9150520d12f1397acfda6705401
3
+ metadata.gz: e9be53c2397c651f826a3ef86abefb2810441016a74d42986408d297ef3be5ad
4
+ data.tar.gz: 488f0bdb405cca4741ff047beea5a2593b0db2f082a3b77af6486ea8cb2268ef
5
5
  SHA512:
6
- metadata.gz: cd1e47ed895ff0e25750ddae9634e49c06910f594f3f0e8413ab0be6d4abc7f8f3c6260f54deb7436d8d80fe74abb3dd1103b28e7c21dfcb91a73b8c4245eee0
7
- data.tar.gz: 2304461fa1d4c1b7fdbbbceebd591edb61a6d05c30e3a0a4d2ce65b5a8cbb6b7700d93e2ef44823903a26258b98ee15cff78393d64b9adddcf2957c78488af6f
6
+ metadata.gz: eb6d23398d5c98954c9417e17edc21e10b61a54b0fc488f928cf502c8b23ceecef9a75b25c393014bf1491f18e02f32af7030d39ce6dbf19d60f6d4c6c85eab1
7
+ data.tar.gz: a318645d04ae152a15298926e02d0fb8308ec9f9c49a1e34696b518aa734459431f877481d58ed32249d8982de83ca72538d77e944c23e893b84840ae5ceeac7
@@ -1,6 +1,11 @@
1
1
  name: Test
2
2
 
3
- on: [push]
3
+ on:
4
+ push:
5
+ branches: ["**"]
6
+ tags-ignore: ["**"]
7
+ pull_request:
8
+ branches: [main]
4
9
 
5
10
  jobs:
6
11
  test:
@@ -71,43 +71,6 @@ jobs:
71
71
  echo "Version mismatch: tag base=$BASE_VERSION, gem=$GEM_VER" >&2
72
72
  exit 1
73
73
  fi
74
- publish_npm:
75
- name: Publish npm package
76
- needs: verify
77
- if: ${{ !github.event.release.prerelease }}
78
- runs-on: ubuntu-latest
79
- steps:
80
- - uses: actions/checkout@v4
81
- - name: Setup Node.js
82
- uses: actions/setup-node@v4
83
- with:
84
- node-version: "24"
85
- registry-url: "https://registry.npmjs.org"
86
- - name: Ensure modern npm for OIDC trusted publishing
87
- run: npm install -g npm@latest
88
- - name: Publish package
89
- run: npm publish --access public
90
- publish_npm_canary:
91
- name: Publish npm canary
92
- needs: verify_prerelease
93
- if: github.event.release.prerelease
94
- runs-on: ubuntu-latest
95
- steps:
96
- - uses: actions/checkout@v4
97
- - name: Setup Node.js
98
- uses: actions/setup-node@v4
99
- with:
100
- node-version: "22"
101
- registry-url: "https://registry.npmjs.org"
102
- - name: Ensure modern npm for OIDC trusted publishing
103
- run: npm install -g npm@latest
104
- - name: Set canary version from tag
105
- run: |
106
- TAG_VERSION="${GITHUB_REF_NAME#v}"
107
- echo "Setting canary version: $TAG_VERSION"
108
- npm version "$TAG_VERSION" --no-git-tag-version
109
- - name: Publish canary
110
- run: npm publish --tag canary --access public
111
74
  publish_gem:
112
75
  name: Publish Ruby gem
113
76
  needs: verify
data/CHANGELOG.md CHANGED
@@ -2,8 +2,9 @@
2
2
 
3
3
  ### Unreleased
4
4
 
5
- - build: Github actions automatic publishing
5
+ - feat: Karafka consumer logging.
6
+ - build: Github actions automatic publishing.
6
7
 
7
8
  ### [0.1.0] - 2026-02-10
8
9
 
9
- - Start of changelog
10
+ - Start of changelog.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- heavylog (0.1.1.beta.1)
4
+ heavylog (0.1.1.beta.2)
5
5
  actionpack (>= 8.0, < 8.2)
6
6
  activerecord (>= 8.0, < 8.2)
7
7
  activesupport (>= 8.0, < 8.2)
@@ -58,6 +58,14 @@ GEM
58
58
  drb (2.2.3)
59
59
  erb (6.0.1)
60
60
  erubi (1.13.1)
61
+ ffi (1.17.3-aarch64-linux-gnu)
62
+ ffi (1.17.3-aarch64-linux-musl)
63
+ ffi (1.17.3-arm-linux-gnu)
64
+ ffi (1.17.3-arm-linux-musl)
65
+ ffi (1.17.3-arm64-darwin)
66
+ ffi (1.17.3-x86_64-darwin)
67
+ ffi (1.17.3-x86_64-linux-gnu)
68
+ ffi (1.17.3-x86_64-linux-musl)
61
69
  i18n (1.14.8)
62
70
  concurrent-ruby (~> 1.0)
63
71
  io-console (0.8.2)
@@ -67,12 +75,51 @@ GEM
67
75
  rdoc (>= 4.0.0)
68
76
  reline (>= 0.4.2)
69
77
  json (2.18.1)
78
+ karafka (2.5.5)
79
+ karafka-core (>= 2.5.6, < 2.6.0)
80
+ karafka-rdkafka (>= 0.23.1)
81
+ waterdrop (>= 2.8.14, < 3.0.0)
82
+ zeitwerk (~> 2.3)
83
+ karafka-core (2.5.8)
84
+ karafka-rdkafka (>= 0.20.0)
85
+ logger (>= 1.6.0)
86
+ karafka-rdkafka (0.23.1)
87
+ ffi (~> 1.17.1)
88
+ json (> 2.0)
89
+ logger
90
+ mini_portile2 (~> 2.6)
91
+ rake (> 12)
92
+ karafka-rdkafka (0.23.1-aarch64-linux-gnu)
93
+ ffi (~> 1.17.1)
94
+ json (> 2.0)
95
+ logger
96
+ mini_portile2 (~> 2.6)
97
+ rake (> 12)
98
+ karafka-rdkafka (0.23.1-arm64-darwin)
99
+ ffi (~> 1.17.1)
100
+ json (> 2.0)
101
+ logger
102
+ mini_portile2 (~> 2.6)
103
+ rake (> 12)
104
+ karafka-rdkafka (0.23.1-x86_64-linux-gnu)
105
+ ffi (~> 1.17.1)
106
+ json (> 2.0)
107
+ logger
108
+ mini_portile2 (~> 2.6)
109
+ rake (> 12)
110
+ karafka-rdkafka (0.23.1-x86_64-linux-musl)
111
+ ffi (~> 1.17.1)
112
+ json (> 2.0)
113
+ logger
114
+ mini_portile2 (~> 2.6)
115
+ rake (> 12)
70
116
  language_server-protocol (3.17.0.5)
71
117
  lint_roller (1.1.0)
72
118
  logger (1.7.0)
73
119
  loofah (2.25.0)
74
120
  crass (~> 1.0.2)
75
121
  nokogiri (>= 1.12.0)
122
+ mini_portile2 (2.8.9)
76
123
  minitest (6.0.1)
77
124
  prism (~> 1.5)
78
125
  nokogiri (1.19.0-aarch64-linux-gnu)
@@ -200,6 +247,10 @@ GEM
200
247
  unicode-emoji (4.2.0)
201
248
  uri (1.1.1)
202
249
  useragent (0.16.11)
250
+ waterdrop (2.8.15)
251
+ karafka-core (>= 2.4.9, < 3.0.0)
252
+ karafka-rdkafka (>= 0.23.1)
253
+ zeitwerk (~> 2.3)
203
254
  zeitwerk (2.7.4)
204
255
 
205
256
  PLATFORMS
@@ -214,6 +265,7 @@ PLATFORMS
214
265
 
215
266
  DEPENDENCIES
216
267
  heavylog!
268
+ karafka (>= 2.5.5)
217
269
  rake (~> 13.0)
218
270
  rspec (~> 3.0)
219
271
  rubocop (< 1.84.1)
@@ -238,15 +290,31 @@ CHECKSUMS
238
290
  drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373
239
291
  erb (6.0.1) sha256=28ecdd99c5472aebd5674d6061e3c6b0a45c049578b071e5a52c2a7f13c197e5
240
292
  erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
241
- heavylog (0.1.1.beta.1)
293
+ ffi (1.17.3-aarch64-linux-gnu) sha256=28ad573df26560f0aedd8a90c3371279a0b2bd0b4e834b16a2baa10bd7a97068
294
+ ffi (1.17.3-aarch64-linux-musl) sha256=020b33b76775b1abacc3b7d86b287cef3251f66d747092deec592c7f5df764b2
295
+ ffi (1.17.3-arm-linux-gnu) sha256=5bd4cea83b68b5ec0037f99c57d5ce2dd5aa438f35decc5ef68a7d085c785668
296
+ ffi (1.17.3-arm-linux-musl) sha256=0d7626bb96265f9af78afa33e267d71cfef9d9a8eb8f5525344f8da6c7d76053
297
+ ffi (1.17.3-arm64-darwin) sha256=0c690555d4cee17a7f07c04d59df39b2fba74ec440b19da1f685c6579bb0717f
298
+ ffi (1.17.3-x86_64-darwin) sha256=1f211811eb5cfaa25998322cdd92ab104bfbd26d1c4c08471599c511f2c00bb5
299
+ ffi (1.17.3-x86_64-linux-gnu) sha256=3746b01f677aae7b16dc1acb7cb3cc17b3e35bdae7676a3f568153fb0e2c887f
300
+ ffi (1.17.3-x86_64-linux-musl) sha256=086b221c3a68320b7564066f46fed23449a44f7a1935f1fe5a245bd89d9aea56
301
+ heavylog (0.1.1.beta.2)
242
302
  i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5
243
303
  io-console (0.8.2) sha256=d6e3ae7a7cc7574f4b8893b4fca2162e57a825b223a177b7afa236c5ef9814cc
244
304
  irb (1.17.0) sha256=168c4ddb93d8a361a045c41d92b2952c7a118fa73f23fe14e55609eb7a863aae
245
305
  json (2.18.1) sha256=fe112755501b8d0466b5ada6cf50c8c3f41e897fa128ac5d263ec09eedc9f986
306
+ karafka (2.5.5) sha256=ccc78e167d668298308c88c2f05eaaafb9736f2660433fc632f8ee66bd2531d7
307
+ karafka-core (2.5.8) sha256=3b056abe55cede3f189a3b68c444012f9fb70ec49afd8689c99702ab72837041
308
+ karafka-rdkafka (0.23.1) sha256=b248150477f672d047de44da24c89cf71a0bf5bd475f12a6214cc5fddeb65297
309
+ karafka-rdkafka (0.23.1-aarch64-linux-gnu) sha256=ce73057b9dee87155fc49328749c222a8780a54ed571ed2c0417970a70cfea37
310
+ karafka-rdkafka (0.23.1-arm64-darwin) sha256=2629f77b9cef4e9bb5f6a6baf5d15fd2b3fc9578ba2c914309d7ef655afe9a00
311
+ karafka-rdkafka (0.23.1-x86_64-linux-gnu) sha256=1e70456f94b6c0decec2bfecf250322830bef4d67fafe44384751b44093da415
312
+ karafka-rdkafka (0.23.1-x86_64-linux-musl) sha256=ba060677f5036b53c0bb4245f1472bbec87518d81d6d6054ffa23eb8ac2a7357
246
313
  language_server-protocol (3.17.0.5) sha256=fd1e39a51a28bf3eec959379985a72e296e9f9acfce46f6a79d31ca8760803cc
247
314
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
248
315
  logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203
249
316
  loofah (2.25.0) sha256=df5ed7ac3bac6a4ec802df3877ee5cc86d027299f8952e6243b3dac446b060e6
317
+ mini_portile2 (2.8.9) sha256=0cd7c7f824e010c072e33f68bc02d85a00aeb6fce05bb4819c03dfd3c140c289
250
318
  minitest (6.0.1) sha256=7854c74f48e2e975969062833adc4013f249a4b212f5e7b9d5c040bf838d54bb
251
319
  nokogiri (1.19.0-aarch64-linux-gnu) sha256=11a97ecc3c0e7e5edcf395720b10860ef493b768f6aa80c539573530bc933767
252
320
  nokogiri (1.19.0-aarch64-linux-musl) sha256=eb70507f5e01bc23dad9b8dbec2b36ad0e61d227b42d292835020ff754fb7ba9
@@ -299,6 +367,7 @@ CHECKSUMS
299
367
  unicode-emoji (4.2.0) sha256=519e69150f75652e40bf736106cfbc8f0f73aa3fb6a65afe62fefa7f80b0f80f
300
368
  uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6
301
369
  useragent (0.16.11) sha256=700e6413ad4bb954bb63547fa098dddf7b0ebe75b40cc6f93b8d54255b173844
370
+ waterdrop (2.8.15) sha256=1a8f515533dc9ef2528f1cd33d6135b6ed1cc33e8d2a8562212ebc1bb4c60c10
302
371
  zeitwerk (2.7.4) sha256=2bef90f356bdafe9a6c2bd32bcd804f83a4f9b8bc27f3600fff051eb3edcec8b
303
372
 
304
373
  BUNDLED WITH
data/heavylog.gemspec CHANGED
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
28
28
  end
29
29
  s.require_paths = ["lib"]
30
30
 
31
+ s.add_development_dependency "karafka", ">= 2.5.5"
31
32
  s.add_development_dependency "rake", "~> 13.0"
32
33
  s.add_development_dependency "rspec", "~> 3.0"
33
34
  s.add_development_dependency "rubocop", "< 1.84.1"
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Heavylog
4
+ module Adapters
5
+ class KarafkaConsumer < ::Karafka::BaseConsumer
6
+ # Runs inside the Rails reloader wrap, any earlier would run outside the thread the consume method runs in.
7
+ def on_consume
8
+ args = "topic=#{topic.name} partition=#{partition} messages=#{messages.count}"
9
+ Heavylog.log_job(SecureRandom.uuid, "KarafkaLogger", self.class.name, args)
10
+ super
11
+ end
12
+
13
+ def wrap(action)
14
+ yield
15
+ ensure
16
+ Heavylog.finish_job if action == :consume
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Heavylog
4
+ module Adapters
5
+ class SidekiqExceptionHandler
6
+ def call(exception, context)
7
+ Heavylog.log(:warn, Sidekiq.dump_json(context)) unless context.empty?
8
+ Heavylog.log(:warn, "#{exception.class.name}: #{exception.message}")
9
+ Heavylog.log(:warn, exception.backtrace.join("\n")) unless exception.backtrace.nil?
10
+ Heavylog.finish_job
11
+ end
12
+ end
13
+ end
14
+ end
@@ -1,20 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- begin
4
- require "sidekiq/job_logger"
5
-
6
- module Heavylog
3
+ module Heavylog
4
+ module Adapters
7
5
  class SidekiqLogger < Sidekiq::JobLogger
8
6
  def call(item, _queue)
9
7
  # item = {"class"=>"SuspiciousJob", "args"=>[12754545, [3858890], "invoice"], "retry"=>true, "queue"=>"default",
10
8
  # "jid"=>"5ec968571e358497d70a3cf2", "created_at"=>1540484817.3950138, "enqueued_at"=>1540484817.395076}
11
9
 
12
- Heavylog.log_sidekiq(item["jid"], item["class"], item["args"])
10
+ Heavylog.log_job(item["jid"], "SidekiqLogger", item["class"], item["args"])
13
11
  super
14
12
  ensure
15
- Heavylog.finish_sidekiq
13
+ Heavylog.finish_job
16
14
  end
17
15
  end
18
16
  end
19
- rescue LoadError
20
17
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Heavylog
4
+ module Adapters
5
+ autoload :KarafkaConsumer, "heavylog/adapters/karafka_consumer"
6
+ autoload :SidekiqLogger, "heavylog/adapters/sidekiq_logger"
7
+ autoload :SidekiqExceptionHandler, "heavylog/adapters/sidekiq_exception_handler"
8
+ end
9
+ end
@@ -37,7 +37,15 @@ module Heavylog
37
37
  dig_set(data, %w[event category], "web")
38
38
 
39
39
  unless data.dig("event", "dataset")
40
- value = data.dig("heavylog", "controller") == "SidekiqLogger" ? "heavylog.sidekiq" : "heavylog.rails"
40
+ value = case data.dig("heavylog", "controller")
41
+ when "SidekiqLogger"
42
+ "heavylog.sidekiq"
43
+ when "KarafkaLogger"
44
+ "heavylog.karafka"
45
+ else
46
+ "heavylog.rails"
47
+ end
48
+
41
49
  dig_set(data, %w[event dataset], value)
42
50
  end
43
51
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Heavylog
4
- VERSION = "0.1.1.beta.1"
4
+ VERSION = "0.1.1.beta.2"
5
5
  end
data/lib/heavylog.rb CHANGED
@@ -9,8 +9,7 @@ require "heavylog/middleware"
9
9
  require "heavylog/ordered_options"
10
10
  require "heavylog/request_logger"
11
11
  require "heavylog/proxy_logger"
12
- require "heavylog/sidekiq_logger"
13
- require "heavylog/sidekiq_exception_handler"
12
+ require "heavylog/adapters"
14
13
 
15
14
  module Heavylog
16
15
  module_function
@@ -61,9 +60,9 @@ module Heavylog
61
60
  return unless config.log_sidekiq
62
61
 
63
62
  Sidekiq.configure_server do |config|
64
- config[:job_logger] = SidekiqLogger
63
+ config[:job_logger] = Adapters::SidekiqLogger
65
64
 
66
- config.error_handlers << SidekiqExceptionHandler.new
65
+ config.error_handlers << Adapters::SidekiqExceptionHandler.new
67
66
  end
68
67
  end
69
68
 
@@ -116,22 +115,6 @@ module Heavylog
116
115
  end
117
116
  end
118
117
 
119
- def log_sidekiq(jid, klass, args)
120
- return unless config.enabled
121
-
122
- RequestStore.store[:heavylog_request_id] = jid
123
- RequestStore.store[:heavylog_request_start] = Time.now.iso8601
124
- RequestStore.store[:heavylog_request_ip] = "127.0.0.1"
125
-
126
- RequestStore.store[:heavylog_request_data] = {
127
- controller: "SidekiqLogger",
128
- action: klass,
129
- args: args.to_s,
130
- }
131
-
132
- RequestStore.store[:heavylog_buffer] ||= StringIO.new
133
- end
134
-
135
118
  def finish
136
119
  return unless config.enabled
137
120
 
@@ -151,9 +134,29 @@ module Heavylog
151
134
  config.error_handler&.call(e)
152
135
  end
153
136
 
154
- def finish_sidekiq
137
+ def log_job(jid, controller, klass, args)
138
+ return unless config.enabled
139
+
140
+ RequestStore.store[:heavylog_request_id] = jid
141
+ RequestStore.store[:heavylog_request_start] = Time.now.iso8601
142
+ RequestStore.store[:heavylog_request_ip] = "127.0.0.1"
143
+
144
+ RequestStore.store[:heavylog_request_data] = {
145
+ controller: controller,
146
+ action: klass,
147
+ args: args.to_s,
148
+ }
149
+
150
+ RequestStore.store[:heavylog_buffer] ||= StringIO.new
151
+ end
152
+
153
+ def finish_job
155
154
  finish
156
- RequestStore.store[:heavylog_buffer] = nil
155
+ RequestStore.clear!
156
+ end
157
+
158
+ def request_id
159
+ RequestStore.store[:heavylog_request_id]
157
160
  end
158
161
 
159
162
  def config
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heavylog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1.beta.1
4
+ version: 0.1.1.beta.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Signmax AB
@@ -9,6 +9,20 @@ bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: karafka
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 2.5.5
19
+ type: :development
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 2.5.5
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: rake
14
28
  requirement: !ruby/object:Gem::Requirement
@@ -195,6 +209,10 @@ files:
195
209
  - Rakefile
196
210
  - heavylog.gemspec
197
211
  - lib/heavylog.rb
212
+ - lib/heavylog/adapters.rb
213
+ - lib/heavylog/adapters/karafka_consumer.rb
214
+ - lib/heavylog/adapters/sidekiq_exception_handler.rb
215
+ - lib/heavylog/adapters/sidekiq_logger.rb
198
216
  - lib/heavylog/formatters/ecs.rb
199
217
  - lib/heavylog/formatters/json.rb
200
218
  - lib/heavylog/formatters/raw.rb
@@ -204,8 +222,6 @@ files:
204
222
  - lib/heavylog/proxy_logger.rb
205
223
  - lib/heavylog/railtie.rb
206
224
  - lib/heavylog/request_logger.rb
207
- - lib/heavylog/sidekiq_exception_handler.rb
208
- - lib/heavylog/sidekiq_logger.rb
209
225
  - lib/heavylog/version.rb
210
226
  homepage: https://github.com/skyltmax/heavylog
211
227
  licenses:
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Heavylog
4
- class SidekiqExceptionHandler
5
- def call(exception, context)
6
- Heavylog.log(:warn, Sidekiq.dump_json(context)) unless context.empty?
7
- Heavylog.log(:warn, "#{exception.class.name}: #{exception.message}")
8
- Heavylog.log(:warn, exception.backtrace.join("\n")) unless exception.backtrace.nil?
9
- Heavylog.finish_sidekiq
10
- end
11
- end
12
- end