notable 0.5.2 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8b31d4143d14d64607e2def24347627f2fd28d9b5b3870fb676d675c6c2960ba
4
- data.tar.gz: 7a00b522829922dbf5fe67790a3f34876bf4f72872e371aa85eb1c0f54d183c9
3
+ metadata.gz: 5541640f476e0e97318e6767a54afaa5cdeb0d35891372f87eef3d528e5ceaaa
4
+ data.tar.gz: 8d16fd5688ad556b83c72ab9787ccac3fb2c0ba55468a3d6c829a4166110e64a
5
5
  SHA512:
6
- metadata.gz: a81365335fd37a237c60e3da09ce271d5758c32a28a033d4424d65dc7e540d8dae170f692900b495f5a8de0a82372abe10c6faf642dbfe387017708f30aa6914
7
- data.tar.gz: cbcd5b896609b8d54c25c1aa6c05e61672c0f49b46e3c9152acb9d3c40e923900d4e04244b71b22155cf661a6b277baf594948ff679ec14eea8e983bda468ef9
6
+ metadata.gz: ba086c17aa9de949c21349d6c754addb8de84f31635b3a57f7a52bce63aee66cce22476926c347a231456f4cd837765c83543636624f61237e197f5896ec227c
7
+ data.tar.gz: 135bebfd4c0acfa206d6acd39099040db35a90c98b5b13fe01e056253e953e685fe6ad00836a98e8443d412324d7e517ead6332ed2332f6c891b2a7dd146bb9c
data/CHANGELOG.md CHANGED
@@ -1,3 +1,12 @@
1
+ ## 0.6.1 (2026-02-07)
2
+
3
+ - Added `scrub_invalid_utf8` option
4
+ - Improved handling of invalid parameters
5
+
6
+ ## 0.6.0 (2025-04-03)
7
+
8
+ - Dropped support for Ruby < 3.2 and Rails < 7.1
9
+
1
10
  ## 0.5.2 (2023-12-26)
2
11
 
3
12
  - Fixed deprecation warning with Rack 3
@@ -56,4 +65,16 @@
56
65
 
57
66
  ## 0.1.0 (2016-02-20)
58
67
 
59
- - Launched
68
+ - Switched to `Module#prepend`
69
+
70
+ ## 0.0.3 (2015-03-15)
71
+
72
+ - Added `track_error` method
73
+
74
+ ## 0.0.2 (2014-12-22)
75
+
76
+ - Fixed method name
77
+
78
+ ## 0.0.1 (2014-12-22)
79
+
80
+ - First release
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014-2023 Andrew Kane
1
+ Copyright (c) 2014-2025 Andrew Kane
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,7 +1,5 @@
1
1
  # Notable
2
2
 
3
- :star2: :star2: :star2:
4
-
5
3
  Notable tracks notable requests and background jobs and stores them in your database. What makes a request or job notable? There are a number of default situations, but ultimately you decide what interests you.
6
4
 
7
5
  By default, Notable tracks:
@@ -19,7 +17,7 @@ You can track custom notes as well.
19
17
 
20
18
  :tangerine: Battle-tested at [Instacart](https://www.instacart.com/opensource)
21
19
 
22
- [![Build Status](https://github.com/ankane/notable/workflows/build/badge.svg?branch=master)](https://github.com/ankane/notable/actions)
20
+ [![Build Status](https://github.com/ankane/notable/actions/workflows/build.yml/badge.svg)](https://github.com/ankane/notable/actions)
23
21
 
24
22
  ## Installation
25
23
 
@@ -108,6 +106,12 @@ Anonymize IP addresses
108
106
  Notable.mask_ips = true
109
107
  ```
110
108
 
109
+ Scrub invalid UTF-8 from data
110
+
111
+ ```ruby
112
+ Notable.scrub_invalid_utf8 = true
113
+ ```
114
+
111
115
  ### Jobs
112
116
 
113
117
  Set slow threshold
@@ -3,10 +3,6 @@ module Notable
3
3
  self.table_name = "notable_requests"
4
4
 
5
5
  belongs_to :user, polymorphic: true, optional: true
6
- if ActiveRecord::VERSION::STRING.to_f >= 7.1
7
- serialize :params, coder: JSON
8
- else
9
- serialize :params, JSON
10
- end
6
+ serialize :params, coder: JSON
11
7
  end
12
8
  end
@@ -6,7 +6,7 @@ module Notable
6
6
  if Notable.requests_enabled?
7
7
  # insert in same place as request_store
8
8
  app.config.middleware.insert_after ActionDispatch::RequestId, Notable::Middleware
9
- # TODO switch to register_interceptor in 0.6.0
9
+ # TODO switch to register_interceptor in 0.7.0
10
10
  ActionDispatch::DebugExceptions.prepend Notable::DebugExceptions
11
11
  end
12
12
  end
@@ -10,8 +10,7 @@ module Notable
10
10
  request_time = Notable.monotonic_time - start_time
11
11
 
12
12
  Safely.safely do
13
- if env["action_dispatch.exception"]
14
- e = env["action_dispatch.exception"]
13
+ if (e = env["action_dispatch.exception"]) && (!defined?(ActionController::TooManyRequests) || !e.is_a?(ActionController::TooManyRequests))
15
14
  message =
16
15
  case status.to_i
17
16
  when 404
@@ -37,11 +36,19 @@ module Notable
37
36
  url = request.original_url
38
37
 
39
38
  controller = env["action_controller.instance"]
40
- action = controller && "#{controller.params["controller"]}##{controller.params["action"]}"
41
- params = controller && controller.request.filtered_parameters.except("controller", "action")
39
+ action = controller && "#{controller.controller_path}##{controller.action_name}"
40
+ params = controller && (controller.request.filtered_parameters.except("controller", "action") rescue nil)
42
41
 
43
42
  user = Notable.user_method.call(env)
44
43
 
44
+ user_agent = request.user_agent
45
+ referrer = request.referer
46
+
47
+ if Notable.scrub_invalid_utf8
48
+ user_agent = user_agent.scrub
49
+ referrer = referrer.scrub
50
+ end
51
+
45
52
  notes.each do |note|
46
53
  ip = request.remote_ip
47
54
  if ip && Notable.mask_ips
@@ -57,9 +64,9 @@ module Notable
57
64
  params: params,
58
65
  request_id: request.uuid,
59
66
  ip: ip,
60
- user_agent: request.user_agent,
67
+ user_agent: user_agent,
61
68
  url: url,
62
- referrer: request.referer,
69
+ referrer: referrer,
63
70
  request_time: request_time
64
71
  }
65
72
  Notable.track_request_method.call(data, env)
@@ -5,3 +5,8 @@ ActiveSupport::Notifications.subscribe "rack.attack" do |_name, _start, _finish,
5
5
  Notable.track "Throttle", request.env["rack.attack.matched"]
6
6
  end
7
7
  end
8
+
9
+ # TODO uncomment in 0.7.0
10
+ # ActiveSupport::Notifications.subscribe "rate_limit.action_controller" do |_|
11
+ # Notable.track "Throttle", "throttle note"
12
+ # end
@@ -1,3 +1,3 @@
1
1
  module Notable
2
- VERSION = "0.5.2"
2
+ VERSION = "0.6.1"
3
3
  end
data/lib/notable.rb CHANGED
@@ -22,6 +22,7 @@ module Notable
22
22
  attr_accessor :user_method
23
23
  attr_accessor :slow_request_threshold
24
24
  attr_accessor :mask_ips
25
+ attr_accessor :scrub_invalid_utf8
25
26
 
26
27
  # jobs
27
28
  attr_accessor :track_job_method
@@ -31,6 +32,8 @@ module Notable
31
32
  self.requests_enabled = true
32
33
  self.jobs_enabled = true
33
34
  self.mask_ips = false
35
+ # TODO default to true in 0.7.0
36
+ self.scrub_invalid_utf8 = false
34
37
 
35
38
  def self.requests_enabled?
36
39
  enabled && requests_enabled
@@ -41,12 +44,12 @@ module Notable
41
44
  end
42
45
 
43
46
  # requests
44
- self.track_request_method = -> (data, _) { Notable::Request.create!(data) }
45
- self.user_method = -> (env) { env["warden"].user if env["warden"] }
47
+ self.track_request_method = ->(data, _) { Notable::Request.create!(data) }
48
+ self.user_method = ->(env) { env["warden"].user if env["warden"] }
46
49
  self.slow_request_threshold = 5
47
50
 
48
51
  # jobs
49
- self.track_job_method = -> (data) { Notable::Job.create!(data) }
52
+ self.track_job_method = ->(data) { Notable::Job.create!(data) }
50
53
  self.slow_job_threshold = 60
51
54
 
52
55
  def self.track(note_type, note = nil)
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: notable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2023-12-26 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: activesupport
@@ -16,14 +15,14 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '6.1'
18
+ version: '7.1'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '6.1'
25
+ version: '7.1'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: safely_block
29
28
  requirement: !ruby/object:Gem::Requirement
@@ -38,7 +37,6 @@ dependencies:
38
37
  - - ">="
39
38
  - !ruby/object:Gem::Version
40
39
  version: '0.4'
41
- description:
42
40
  email: andrew@ankane.org
43
41
  executables: []
44
42
  extensions: []
@@ -67,7 +65,6 @@ homepage: https://github.com/ankane/notable
67
65
  licenses:
68
66
  - MIT
69
67
  metadata: {}
70
- post_install_message:
71
68
  rdoc_options: []
72
69
  require_paths:
73
70
  - lib
@@ -75,15 +72,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
75
72
  requirements:
76
73
  - - ">="
77
74
  - !ruby/object:Gem::Version
78
- version: '3'
75
+ version: '3.2'
79
76
  required_rubygems_version: !ruby/object:Gem::Requirement
80
77
  requirements:
81
78
  - - ">="
82
79
  - !ruby/object:Gem::Version
83
80
  version: '0'
84
81
  requirements: []
85
- rubygems_version: 3.5.3
86
- signing_key:
82
+ rubygems_version: 4.0.3
87
83
  specification_version: 4
88
84
  summary: Track notable requests and background jobs
89
85
  test_files: []