railwatch 0.9.0 → 0.9.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: 3cd11714c7a290f5f6717f3b8f239b72b669fce39a2797a59fcb862595925778
4
- data.tar.gz: 147d3416d6d047a6c87b8ccdb9d2b67b8e2a6058f881956241f65dff0ea239c5
3
+ metadata.gz: 5e6d353ab28ad688da0cd8f6cce5795101736d0e4ff9ca754aac49ba307a6614
4
+ data.tar.gz: 51558d4fa45d0f53a33c426e844ab4312704d2a82a6438070c1ad8bdcb5bfc6a
5
5
  SHA512:
6
- metadata.gz: 774a7cbf876e5220af985a97a2cc6919ebb91ff9ea7a38e414956b1c0cbf3cedb723cbc470baaa807fa7343295117576df15485923502d855212e83698bee592
7
- data.tar.gz: c0d3106cd7c800cf938daf056ce9c279b10e5013af618b39e4e31411517dc578a4e71fd711b5a4158e3b4acdb76964476ca298377f792c0b8f40319ad13c877e
6
+ metadata.gz: 498984621aca78d24b668d15d8d77366b826335d7143b9e9e1ececfb8feab881a287dadb3ddae809c87597940cac05a34e1728ffdb9ecce073d4e4ffdabdcd46
7
+ data.tar.gz: 0e03f832ba5fc1d5a52168136252d5d789837d4a29f675a824f7d0577a5eb1f66cc35cc7d1f86f470d6afc7ebfc4d97978b3542b974de71a542ac92079e273d6
data/CHANGELOG.md CHANGED
@@ -6,6 +6,15 @@
6
6
  filled in by the release commit, which is also the only commit that
7
7
  touches lib/railwatch/version.rb and Gemfile.lock. See CONTRIBUTING.md. -->
8
8
 
9
+ ## 0.9.1 (2026-10-10)
10
+
11
+ - Sampling (or reporter backpressure, which divides every rate by up to 8)
12
+ no longer drops a scheduled task's `scheduled_task` record: a sampled-out
13
+ run still queues it, alone, and only its child records are dropped. The
14
+ record is the run's check-in, and a sampled-out run read as "missed its
15
+ run" for a task that ran on time. Once queued it is subject to the same
16
+ reporter-buffer and delivery limits as any other record.
17
+
9
18
  ## 0.9.0 (2026-10-08)
10
19
 
11
20
  - An `outgoing_request` now says whether it was made inside a database
@@ -50,7 +50,9 @@ proxy with `Forwarded` or `X-Forwarded-*` headers.
50
50
  is decided once per execution, not per record, by
51
51
  `Railwatch::Sampler.decide` in `lib/railwatch/sampler.rb`. A sampled-in
52
52
  execution ships every child record it buffered. A sampled-out one ships
53
- nothing except an unhandled exception. That exception is governed by its
53
+ nothing except an unhandled exception. A sampled-out scheduled task also
54
+ ships its `scheduled_task` record alone: that record is the run's check-in,
55
+ and without it the missed-run check would flag a task that ran. That exception is governed by its
54
56
  own `exceptions` rate, decided once and memoized per execution. See
55
57
  `docs/records.md`'s `exception` section.
56
58
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Railwatch
4
- VERSION = "0.9.0"
4
+ VERSION = "0.9.1"
5
5
  end
data/lib/railwatch.rb CHANGED
@@ -161,6 +161,12 @@ module Railwatch
161
161
  # unless the tail decision (tail_keep?) rescues the whole tree, which is
162
162
  # also how a failure-context ring is promoted.
163
163
  #
164
+ # A scheduled_task parent ships whatever the sampling decision, alone
165
+ # when sampled out: it is the run's check-in, and the missed-run detector
166
+ # reads its absence as "the scheduler did not run this". Sampling it out
167
+ # (backpressure divides the rate by up to 8) raised "missed its run" for
168
+ # tasks that ran on time. One small record per run is the price.
169
+ #
164
170
  # The parent's fields may be given as a block instead of keywords. It is
165
171
  # called only when a parent is actually going to ship, so a caller whose
166
172
  # fields are expensive to assemble (the request middleware: an
@@ -178,7 +184,7 @@ module Railwatch
178
184
  # either way: a profiler left running would outlive the execution.
179
185
  profiled = exe.profiler_handle && ship_profile(exe, shipping)
180
186
  parent = nil
181
- if parent_type && (shipping || exe.exception_sampled)
187
+ if parent_type && (shipping || exe.exception_sampled || parent_type == :scheduled_task)
182
188
  fields.merge!(yield) if block_given?
183
189
  group ||= fields.delete(:group)
184
190
  fields[:tail_sampled] = true if tail
@@ -197,7 +203,8 @@ module Railwatch
197
203
  reporter.write(parent) if parent
198
204
  elsif parent
199
205
  # Head-sampled out, but an unhandled exception rolled the exceptions
200
- # sample in: the exception needs its parent, and only its parent.
206
+ # sample in (the exception needs its parent, and only its parent), or
207
+ # it is a scheduled task's check-in, which always ships.
201
208
  reporter.write(parent)
202
209
  end
203
210
  parent
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: railwatch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cole Robertson