lex-telemetry 0.1.3 → 0.1.4

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: 6ad95ddd1a3340e530214c577e8ed57626b803b317aa17f321e95e0b2db2c973
4
- data.tar.gz: 86c136e5c4b000cd91a2fb88d1623f5769ba193a8e59dd1e7de0d5cd95a94e08
3
+ metadata.gz: 783eceb3850cecfce20c43c308552378cf9c974c41c00ef9c977c55bd0f878fd
4
+ data.tar.gz: 06ac5a8ea95873f8936e0e8155f0563e622bbff9d21053bab0d8dada2aedb0b5
5
5
  SHA512:
6
- metadata.gz: 451e662f45584fccfa1c6d6d3ed59d5067930a0105f646f70b701c8128a934392ab7348e673a67dc41fd57caf3b366e4fc5da0da4181024a7acf4c2d253a7675
7
- data.tar.gz: 632599ec66799d1075a6ee2d99ffc87c8a3954d9c5f2db927f57d643b510e202f568594bec97dace4af3da6982d7e067c535eb35da573a3c747bd097e90ecee5
6
+ metadata.gz: f35fe3b501776e7fa383bb4cff16b06a17ef388ba3d0dafddb6e1ffcc7c62d98d2376d3a87e55fe93d344739ed3860cbbb34e9bdb61ae2126f47c5d69a923d81
7
+ data.tar.gz: f98c67177e37a991164b2e583b5cf36ef66dbfc851485c1fbb700924c4e256acd72649e4a72ffe2356965df50f64115ceb4d3e9a69c79567f08bd8ea78bcbe01
data/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.4] - 2026-03-21
4
+
5
+ ### Added
6
+ - `record_cross_region(from_region:, to_region:)`: thread-safe atomic counter for cross-region message routing
7
+ - `record_replication_lag(region:, lag_seconds:)`: stores latest replication lag sample per region
8
+ - `region_stats`: returns cross-region counters and replication lag samples
9
+ - `concurrent-ruby` runtime dependency for `Concurrent::AtomicFixnum` and `Concurrent::Hash`
10
+ - Subscription actor now records cross-region metrics when lex-telemetry is loaded
11
+
12
+ ### Changed
13
+ - `RegionReporter` actor interval reduced from 120s to 60s
14
+ - `RegionReporter` now calls `region_stats` instead of `region_metrics`
15
+
3
16
  ## [0.1.3] - 2026-03-21
4
17
 
5
18
  ### Added
data/Gemfile CHANGED
@@ -2,3 +2,5 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
  gemspec
5
+
6
+ gem 'concurrent-ruby'
@@ -28,6 +28,8 @@ Gem::Specification.new do |spec|
28
28
  end
29
29
  spec.require_paths = ['lib']
30
30
 
31
+ spec.add_dependency 'concurrent-ruby', '>= 1.2'
32
+
31
33
  spec.add_development_dependency 'rake'
32
34
  spec.add_development_dependency 'rspec'
33
35
  spec.add_development_dependency 'rubocop'
@@ -10,11 +10,11 @@ module Legion
10
10
  end
11
11
 
12
12
  def runner_function
13
- 'region_metrics'
13
+ 'region_stats'
14
14
  end
15
15
 
16
16
  def time
17
- 120
17
+ 60
18
18
  end
19
19
 
20
20
  def run_now?
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'concurrent'
4
+
3
5
  module Legion
4
6
  module Extensions
5
7
  module Telemetry
@@ -7,6 +9,34 @@ module Legion
7
9
  module Telemetry
8
10
  module_function
9
11
 
12
+ def cross_region_counters
13
+ @cross_region_counters ||= Concurrent::Hash.new { |h, k| h[k] = Concurrent::AtomicFixnum.new(0) }
14
+ end
15
+
16
+ def replication_lag_samples
17
+ @replication_lag_samples ||= Concurrent::Hash.new
18
+ end
19
+
20
+ def record_cross_region(from_region:, to_region:, **_opts)
21
+ key = "#{from_region}->#{to_region}"
22
+ cross_region_counters[key].increment
23
+ { success: true, key: key, count: cross_region_counters[key].value }
24
+ end
25
+
26
+ def record_replication_lag(region:, lag_seconds:, **_opts)
27
+ replication_lag_samples[region] = { lag_seconds: lag_seconds, recorded_at: Time.now.to_i }
28
+ { success: true, region: region, lag_seconds: lag_seconds }
29
+ end
30
+
31
+ def region_stats(**_opts)
32
+ {
33
+ success: true,
34
+ cross_region: cross_region_counters.transform_values(&:value),
35
+ replication_lag: replication_lag_samples.dup,
36
+ timestamp: Time.now.to_i
37
+ }
38
+ end
39
+
10
40
  SCAN_DIRS = [
11
41
  File.expand_path('~/.claude/projects')
12
42
  ].freeze
@@ -176,6 +206,8 @@ module Legion
176
206
  @event_store = nil
177
207
  @parsers = nil
178
208
  @high_water_mark = nil
209
+ @cross_region_counters = nil
210
+ @replication_lag_samples = nil
179
211
  end
180
212
  end
181
213
  end
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Telemetry
6
- VERSION = '0.1.3'
6
+ VERSION = '0.1.4'
7
7
  end
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lex-telemetry
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -9,6 +9,20 @@ bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: concurrent-ruby
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '1.2'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '1.2'
12
26
  - !ruby/object:Gem::Dependency
13
27
  name: rake
14
28
  requirement: !ruby/object:Gem::Requirement