lens-rails 0.1.1 → 0.1.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 +4 -4
- data/lib/lens/rails/error_exporter.rb +15 -5
- data/lib/lens/rails/railtie.rb +13 -17
- data/lib/lens/rails/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a4c63aecbba6e904a757d35089ae89c4ac1e35cc6b7a647789e87e1340ad8774
|
|
4
|
+
data.tar.gz: c993144c4020d27f716d0734de941432aa03da3cca0e8b6ce7f21b0d920548ba
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 74f1714124d4d9949e97789da829271d7cbe4494750f829ba6b9f70712924e35400e6c6820ab3f645721e72557e8d3fd1a5469e803479db7c12d9bc21141a7d4
|
|
7
|
+
data.tar.gz: e8489901884df462acb3ba59d25ab9569952d23b943b16bf1a7032d3be2cee1087a99f9a31bce9b444b156bbdcf9a5cce2aef254b8ae6a222628e3fa36c13dba
|
|
@@ -14,9 +14,9 @@ module Lens
|
|
|
14
14
|
BATCH_SIZE = 200
|
|
15
15
|
|
|
16
16
|
def initialize(url:, token:, service_name:,
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
ignore_classes: [],
|
|
18
|
+
max_buffer: 1_000,
|
|
19
|
+
open_timeout: 2, read_timeout: 2)
|
|
20
20
|
@uri = URI("#{url}/v1/errors")
|
|
21
21
|
@token = token
|
|
22
22
|
@service_name = service_name
|
|
@@ -37,12 +37,13 @@ module Lens
|
|
|
37
37
|
|
|
38
38
|
rec = {
|
|
39
39
|
"class" => error.class.name,
|
|
40
|
-
"message" => error.message.to_s
|
|
40
|
+
"message" => error.message.to_s[0, 2_000],
|
|
41
41
|
"backtrace" => error.backtrace&.first(50) || [],
|
|
42
|
+
"top_frame" => top_frame(error.backtrace),
|
|
42
43
|
"context" => Sanitizer.sanitize(context || {}),
|
|
43
44
|
"severity" => severity.to_s,
|
|
44
45
|
"source" => source,
|
|
45
|
-
"occurred_at" => Time.now.iso8601(3)
|
|
46
|
+
"occurred_at" => Time.now.iso8601(3)
|
|
46
47
|
}.compact
|
|
47
48
|
|
|
48
49
|
ensure_worker!
|
|
@@ -78,6 +79,15 @@ module Lens
|
|
|
78
79
|
|
|
79
80
|
private
|
|
80
81
|
|
|
82
|
+
# Rails.backtrace_cleaner silences gem/framework frames and knows this
|
|
83
|
+
# app's own root, so it's the only place that can tell which frame is
|
|
84
|
+
# "ours" — the server has no way to do this for a backtrace it receives
|
|
85
|
+
# from someone else's app. The line number is stripped so unrelated
|
|
86
|
+
# line shifts elsewhere in the file don't split the group on every deploy.
|
|
87
|
+
def top_frame(backtrace)
|
|
88
|
+
::Rails.backtrace_cleaner.clean(backtrace || []).first&.sub(/:\d+(:in .*)?\z/) { $1.to_s }
|
|
89
|
+
end
|
|
90
|
+
|
|
81
91
|
def start_worker
|
|
82
92
|
@worker = Thread.new do
|
|
83
93
|
Thread.current.name = "lens-errors-worker"
|
data/lib/lens/rails/railtie.rb
CHANGED
|
@@ -11,21 +11,17 @@ module Lens
|
|
|
11
11
|
cfg = Lens::Rails.configuration
|
|
12
12
|
next unless cfg.configured?
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
::Rails.logger.broadcast_to(
|
|
15
|
+
Lens::Rails::LogExporter.new(
|
|
16
|
+
url: cfg.url,
|
|
17
|
+
token: cfg.app_token,
|
|
18
|
+
service_name: cfg.service_name,
|
|
19
|
+
max_buffer: cfg.max_log_buffer,
|
|
20
|
+
min_severity: cfg.min_log_severity,
|
|
21
|
+
open_timeout: cfg.exporter_open_timeout,
|
|
22
|
+
read_timeout: cfg.exporter_read_timeout
|
|
23
|
+
)
|
|
22
24
|
)
|
|
23
|
-
|
|
24
|
-
if ::Rails.logger.respond_to?(:broadcast_to)
|
|
25
|
-
::Rails.logger.broadcast_to(log_exporter)
|
|
26
|
-
else
|
|
27
|
-
::Rails.logger = ActiveSupport::BroadcastLogger.new(::Rails.logger, log_exporter)
|
|
28
|
-
end
|
|
29
25
|
end
|
|
30
26
|
|
|
31
27
|
# Rack middleware for request metrics.
|
|
@@ -39,7 +35,7 @@ module Lens
|
|
|
39
35
|
token: cfg.app_token,
|
|
40
36
|
service_name: cfg.service_name,
|
|
41
37
|
open_timeout: cfg.exporter_open_timeout,
|
|
42
|
-
read_timeout: cfg.exporter_read_timeout
|
|
38
|
+
read_timeout: cfg.exporter_read_timeout
|
|
43
39
|
)
|
|
44
40
|
end
|
|
45
41
|
|
|
@@ -61,7 +57,7 @@ module Lens
|
|
|
61
57
|
sql_threshold_ms: cfg.sql_threshold_ms,
|
|
62
58
|
sql_ignore: cfg.sql_ignore,
|
|
63
59
|
open_timeout: cfg.exporter_open_timeout,
|
|
64
|
-
read_timeout: cfg.exporter_read_timeout
|
|
60
|
+
read_timeout: cfg.exporter_read_timeout
|
|
65
61
|
)
|
|
66
62
|
end
|
|
67
63
|
|
|
@@ -77,7 +73,7 @@ module Lens
|
|
|
77
73
|
ignore_classes: cfg.error_ignore_classes,
|
|
78
74
|
max_buffer: cfg.max_error_buffer,
|
|
79
75
|
open_timeout: cfg.exporter_open_timeout,
|
|
80
|
-
read_timeout: cfg.exporter_read_timeout
|
|
76
|
+
read_timeout: cfg.exporter_read_timeout
|
|
81
77
|
)
|
|
82
78
|
|
|
83
79
|
::Rails.error.subscribe(exporter)
|
data/lib/lens/rails/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,28 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lens-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Axel Gustav
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
10
|
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
|
-
dependencies:
|
|
11
|
+
dependencies:
|
|
12
|
+
- !ruby/object:Gem::Dependency
|
|
13
|
+
name: railties
|
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
|
15
|
+
requirements:
|
|
16
|
+
- - ">="
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: 7.1.1
|
|
19
|
+
type: :runtime
|
|
20
|
+
prerelease: false
|
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: 7.1.1
|
|
12
26
|
description: Drop-in Rails gem that collects logs, metrics, and request traces via
|
|
13
27
|
ActiveSupport::Notifications and ships them to a Lens instance. Uses gzip-compressed
|
|
14
28
|
JSON — no protobuf, no OpenTelemetry SDK required.
|