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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d90077b98ae4006d57f5621f0f3f44d61193161757bf28be6e386b5f560cdbd8
4
- data.tar.gz: cff65959840d06f3a25e8fefec6067e3da6b1b73f4a0aefe9d6e82bdb68863db
3
+ metadata.gz: a4c63aecbba6e904a757d35089ae89c4ac1e35cc6b7a647789e87e1340ad8774
4
+ data.tar.gz: c993144c4020d27f716d0734de941432aa03da3cca0e8b6ce7f21b0d920548ba
5
5
  SHA512:
6
- metadata.gz: 0f6df7f5351a3f46423ba69a97f366fafe61364b30380a40787f7acfb7b5f7f0e5d11288f0a420c8f70c97913c7ccdc8e63c9bfe8c4369dfa68cae42d77db2f4
7
- data.tar.gz: 35eb63272c6e3401c2712f3aaaee7c1eaef0e0873d3c7d330ca437121828ec300e765bf2596f36ef4a64d85bb25288f872728b52bb6bb074912032cb0a6ace3b
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
- ignore_classes: [],
18
- max_buffer: 1_000,
19
- open_timeout: 2, read_timeout: 2)
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.first(2_000),
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"
@@ -11,21 +11,17 @@ module Lens
11
11
  cfg = Lens::Rails.configuration
12
12
  next unless cfg.configured?
13
13
 
14
- log_exporter = Lens::Rails::LogExporter.new(
15
- url: cfg.url,
16
- token: cfg.app_token,
17
- service_name: cfg.service_name,
18
- max_buffer: cfg.max_log_buffer,
19
- min_severity: cfg.min_log_severity,
20
- open_timeout: cfg.exporter_open_timeout,
21
- read_timeout: cfg.exporter_read_timeout,
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)
@@ -1,5 +1,5 @@
1
1
  module Lens
2
2
  module Rails
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
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.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.