lex-telemetry 0.1.3 → 0.1.5

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: 7fbaf67c131b1f7ecc48a2aa7f0b58245dfb9e1c9bbf35460e62e1a3c47e49b5
4
+ data.tar.gz: 13bbb69311d93aff89a8962339b3b3839d6925ecf5316f16b02f1790fb88f480
5
5
  SHA512:
6
- metadata.gz: 451e662f45584fccfa1c6d6d3ed59d5067930a0105f646f70b701c8128a934392ab7348e673a67dc41fd57caf3b366e4fc5da0da4181024a7acf4c2d253a7675
7
- data.tar.gz: 632599ec66799d1075a6ee2d99ffc87c8a3954d9c5f2db927f57d643b510e202f568594bec97dace4af3da6982d7e067c535eb35da573a3c747bd097e90ecee5
6
+ metadata.gz: 36d33e6410478903454b3cabf5a7f5ac871988b9ae9e17324d1ea0cb27cf6d997588dd307f8aa34b7ac0fcd7e94aba1812fe833e44dd57ee19e7ac54a065830e
7
+ data.tar.gz: 250b78d5920a0f779521faab224bb929e79586b8738d2887376acdf36dd9f8ae82411defbc41fd721500d89d12876dc22624ae830e095383ccec28830695bbe2
data/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.5] - 2026-03-22
4
+
5
+ ### Changed
6
+ - Added sub-gem runtime dependencies: legion-cache, legion-crypt, legion-data, legion-json, legion-logging, legion-settings, legion-transport
7
+ - Replaced inline stub definitions in spec_helper with real sub-gem helpers (Tier 1 migration)
8
+ - Transport spec subjects switched from `.new` to `.allocate` to avoid live AMQP channel requirement in tests
9
+ - Removed per-file `Legion::Extensions::Actors::Every` and `Legion::Transport::*` stubs; actor stubs now defined once in spec_helper via sub-gem helpers
10
+
11
+ ## [0.1.4] - 2026-03-21
12
+
13
+ ### Added
14
+ - `record_cross_region(from_region:, to_region:)`: thread-safe atomic counter for cross-region message routing
15
+ - `record_replication_lag(region:, lag_seconds:)`: stores latest replication lag sample per region
16
+ - `region_stats`: returns cross-region counters and replication lag samples
17
+ - `concurrent-ruby` runtime dependency for `Concurrent::AtomicFixnum` and `Concurrent::Hash`
18
+ - Subscription actor now records cross-region metrics when lex-telemetry is loaded
19
+
20
+ ### Changed
21
+ - `RegionReporter` actor interval reduced from 120s to 60s
22
+ - `RegionReporter` now calls `region_stats` instead of `region_metrics`
23
+
3
24
  ## [0.1.3] - 2026-03-21
4
25
 
5
26
  ### 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,15 @@ 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
+ spec.add_dependency 'legion-cache', '>= 1.3.11'
33
+ spec.add_dependency 'legion-crypt', '>= 1.4.9'
34
+ spec.add_dependency 'legion-data', '>= 1.4.17'
35
+ spec.add_dependency 'legion-json', '>= 1.2.1'
36
+ spec.add_dependency 'legion-logging', '>= 1.3.2'
37
+ spec.add_dependency 'legion-settings', '>= 1.3.14'
38
+ spec.add_dependency 'legion-transport', '>= 1.3.9'
39
+
31
40
  spec.add_development_dependency 'rake'
32
41
  spec.add_development_dependency 'rspec'
33
42
  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.5'
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.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -9,6 +9,118 @@ 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'
26
+ - !ruby/object:Gem::Dependency
27
+ name: legion-cache
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.3.11
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: 1.3.11
40
+ - !ruby/object:Gem::Dependency
41
+ name: legion-crypt
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.4.9
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: 1.4.9
54
+ - !ruby/object:Gem::Dependency
55
+ name: legion-data
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 1.4.17
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: 1.4.17
68
+ - !ruby/object:Gem::Dependency
69
+ name: legion-json
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 1.2.1
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: 1.2.1
82
+ - !ruby/object:Gem::Dependency
83
+ name: legion-logging
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: 1.3.2
89
+ type: :runtime
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 1.3.2
96
+ - !ruby/object:Gem::Dependency
97
+ name: legion-settings
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.14
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: 1.3.14
110
+ - !ruby/object:Gem::Dependency
111
+ name: legion-transport
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: 1.3.9
117
+ type: :runtime
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: 1.3.9
12
124
  - !ruby/object:Gem::Dependency
13
125
  name: rake
14
126
  requirement: !ruby/object:Gem::Requirement