log_bench 0.3.1 → 0.4.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 +1 -1
- data/lib/log_bench/app/monitor.rb +18 -0
- data/lib/log_bench/app/state.rb +2 -1
- data/lib/log_bench/log/collection.rb +5 -9
- data/lib/log_bench/log/parser.rb +1 -2
- data/lib/log_bench/log/request.rb +9 -4
- data/lib/log_bench/railtie.rb +8 -0
- data/lib/log_bench/version.rb +1 -1
- data/lib/log_bench.rb +16 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 617bb4c585973c40149ffc5f58eba322446aa997a324515517269af591e88c02
|
4
|
+
data.tar.gz: 613d94f2d455abd75a523ebbf0f3c8aeafd5993657f5f4281c8d841c9e8af097
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57aac276e8b98a7551b2f4dfa75df88c21723eb798aeedbd338d2323346902eaef3439a9a338dd4dfd6cd528361d3ebc950f404997a7a357f2643b7f0611a3cf
|
7
|
+
data.tar.gz: e1ee5e4e719aff224c76a3485212df6a91aa1565ad192e834a92d51040a3b10a3055222fec79129c73af96d3f5692c1b8c1b7547b0cfffed54f02bffe1bc308b
|
data/README.md
CHANGED
@@ -64,7 +64,7 @@ if defined?(LogBench)
|
|
64
64
|
# config.show_init_message = :min # :full, :min, or :none (default: :full)
|
65
65
|
|
66
66
|
# Specify which controllers to inject request_id tracking
|
67
|
-
# config.base_controller_classes = %w[CustomBaseController] # (default: %w[ApplicationController
|
67
|
+
# config.base_controller_classes = %w[CustomBaseController] # (default: %w[ApplicationController ActionController::Base])
|
68
68
|
end
|
69
69
|
end
|
70
70
|
```
|
@@ -32,6 +32,7 @@ module LogBench
|
|
32
32
|
begin
|
33
33
|
log_file.watch do |new_collection|
|
34
34
|
add_new_requests(new_collection.requests)
|
35
|
+
add_orphan_requests(new_collection.orphan_requests)
|
35
36
|
end
|
36
37
|
rescue
|
37
38
|
sleep 1
|
@@ -46,6 +47,23 @@ module LogBench
|
|
46
47
|
keep_recent_requests
|
47
48
|
end
|
48
49
|
|
50
|
+
def add_orphan_requests(orphan_requests)
|
51
|
+
state.orphan_requests.concat(orphan_requests)
|
52
|
+
return if state.orphan_requests.empty?
|
53
|
+
|
54
|
+
# Try to attach orphaned logs to existing requests and remove them if successful
|
55
|
+
state.orphan_requests.reject! do |orphan_request|
|
56
|
+
request = state.requests.find { |req| req.request_id == orphan_request.request_id }
|
57
|
+
|
58
|
+
if request
|
59
|
+
orphan_request.related_logs.each { |log| request.add_related_log(log) }
|
60
|
+
true # Remove this orphan request from the list
|
61
|
+
else
|
62
|
+
false # Keep this orphan request for later
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
49
67
|
def keep_recent_requests
|
50
68
|
# Keep only the last 1000 requests to prevent memory issues
|
51
69
|
state.requests = state.requests.last(1000) if state.requests.size > 1000
|
data/lib/log_bench/app/state.rb
CHANGED
@@ -4,10 +4,11 @@ module LogBench
|
|
4
4
|
module App
|
5
5
|
class State
|
6
6
|
attr_reader :main_filter, :sort, :detail_filter, :cleared_requests
|
7
|
-
attr_accessor :requests, :auto_scroll, :scroll_offset, :selected, :detail_scroll_offset, :detail_selected_entry, :text_selection_mode, :update_available, :update_version
|
7
|
+
attr_accessor :requests, :orphan_requests, :auto_scroll, :scroll_offset, :selected, :detail_scroll_offset, :detail_selected_entry, :text_selection_mode, :update_available, :update_version
|
8
8
|
|
9
9
|
def initialize
|
10
10
|
self.requests = []
|
11
|
+
self.orphan_requests = []
|
11
12
|
self.selected = 0
|
12
13
|
self.scroll_offset = 0
|
13
14
|
self.auto_scroll = true
|
@@ -11,10 +11,6 @@ module LogBench
|
|
11
11
|
self.entries = parse_input(input)
|
12
12
|
end
|
13
13
|
|
14
|
-
def each(&block)
|
15
|
-
entries.each(&block)
|
16
|
-
end
|
17
|
-
|
18
14
|
def size
|
19
15
|
entries.size
|
20
16
|
end
|
@@ -24,7 +20,11 @@ module LogBench
|
|
24
20
|
end
|
25
21
|
|
26
22
|
def requests
|
27
|
-
entries.select { |entry| entry.is_a?(Request) }
|
23
|
+
entries.select { |entry| entry.is_a?(Request) && !entry.orphan }
|
24
|
+
end
|
25
|
+
|
26
|
+
def orphan_requests
|
27
|
+
entries.select { |entry| entry.is_a?(Request) && entry.orphan }
|
28
28
|
end
|
29
29
|
|
30
30
|
def filter_by_method(method)
|
@@ -57,10 +57,6 @@ module LogBench
|
|
57
57
|
create_collection_from_requests(sorted_requests)
|
58
58
|
end
|
59
59
|
|
60
|
-
def to_a
|
61
|
-
entries
|
62
|
-
end
|
63
|
-
|
64
60
|
private
|
65
61
|
|
66
62
|
def create_collection_from_requests(requests)
|
data/lib/log_bench/log/parser.rb
CHANGED
@@ -43,8 +43,7 @@ module LogBench
|
|
43
43
|
grouped.each do |request_id, entries|
|
44
44
|
next unless request_id
|
45
45
|
|
46
|
-
request = find_request_entry(entries)
|
47
|
-
next unless request
|
46
|
+
request = find_request_entry(entries) || Request.new_orphan(request_id)
|
48
47
|
|
49
48
|
related_logs = find_related_logs(entries)
|
50
49
|
related_logs.each { |log| request.add_related_log(log) }
|
@@ -3,10 +3,10 @@
|
|
3
3
|
module LogBench
|
4
4
|
module Log
|
5
5
|
class Request < Entry
|
6
|
-
attr_reader :method, :path, :status, :duration, :controller, :action, :params, :related_logs
|
6
|
+
attr_reader :method, :path, :status, :duration, :controller, :action, :params, :related_logs, :orphan
|
7
7
|
|
8
|
-
def initialize(json_data)
|
9
|
-
super
|
8
|
+
def initialize(json_data, orphan: false)
|
9
|
+
super(json_data)
|
10
10
|
self.type = :http_request
|
11
11
|
self.related_logs = []
|
12
12
|
self.method = json_data["method"]
|
@@ -16,6 +16,11 @@ module LogBench
|
|
16
16
|
self.controller = json_data["controller"]
|
17
17
|
self.action = json_data["action"]
|
18
18
|
self.params = parse_params(json_data["params"])
|
19
|
+
self.orphan = orphan
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.new_orphan(request_id)
|
23
|
+
new({"request_id" => request_id}, orphan: true)
|
19
24
|
end
|
20
25
|
|
21
26
|
def add_related_log(log_entry)
|
@@ -63,7 +68,7 @@ module LogBench
|
|
63
68
|
|
64
69
|
private
|
65
70
|
|
66
|
-
attr_writer :method, :path, :status, :duration, :controller, :action, :params
|
71
|
+
attr_writer :method, :path, :status, :duration, :controller, :action, :params, :orphan
|
67
72
|
|
68
73
|
def related_logs=(value)
|
69
74
|
@related_logs = value
|
data/lib/log_bench/railtie.rb
CHANGED
@@ -48,6 +48,7 @@ module LogBench
|
|
48
48
|
if LogBench.configuration.enabled
|
49
49
|
LogBench::Railtie.setup_rails_logger_final
|
50
50
|
LogBench::Railtie.setup_current_attributes
|
51
|
+
LogBench::Railtie.setup_sidekiq_middleware
|
51
52
|
LogBench::Railtie.validate_configuration!
|
52
53
|
end
|
53
54
|
end
|
@@ -96,6 +97,13 @@ module LogBench
|
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
100
|
+
def setup_sidekiq_middleware
|
101
|
+
return unless defined?(Sidekiq)
|
102
|
+
|
103
|
+
require "sidekiq/middleware/current_attributes"
|
104
|
+
Sidekiq::CurrentAttributes.persist("LogBench::Current")
|
105
|
+
end
|
106
|
+
|
99
107
|
# Validate that LogBench setup worked correctly
|
100
108
|
def validate_configuration!
|
101
109
|
ConfigurationValidator.validate_rails_config!
|
data/lib/log_bench/version.rb
CHANGED
data/lib/log_bench.rb
CHANGED
@@ -20,6 +20,22 @@ module LogBench
|
|
20
20
|
yield(configuration) if block_given?
|
21
21
|
configuration
|
22
22
|
end
|
23
|
+
|
24
|
+
def logger
|
25
|
+
@logger ||= create_debug_logger
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def create_debug_logger
|
31
|
+
require "logger"
|
32
|
+
logger = Logger.new("logbench_log.log")
|
33
|
+
logger.level = Logger::DEBUG
|
34
|
+
logger.formatter = proc do |severity, datetime, _progname, msg|
|
35
|
+
"[#{datetime.strftime("%Y-%m-%d %H:%M:%S")}] #{severity}: #{msg}\n"
|
36
|
+
end
|
37
|
+
logger
|
38
|
+
end
|
23
39
|
end
|
24
40
|
end
|
25
41
|
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: log_bench
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamín Silva
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-
|
10
|
+
date: 2025-10-07 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: zeitwerk
|