lex-telemetry 0.1.7 → 0.1.8

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: f37c3484695b8612aec589a24b49f98f8c1be3b0d2892a6e023b27447acd84e1
4
- data.tar.gz: be1205311b7ee81cf281c3abe03b3f74844dd839bd41a6c9a934a2a7a3ef4b28
3
+ metadata.gz: 38dd588b667de5c28ca831f41b9bb3e59a2df3ddb1da73760032b64bb868ada6
4
+ data.tar.gz: 16d9198d26d37a76fbdce09918dc46300a3322927fceb5d767b291f1b44657ce
5
5
  SHA512:
6
- metadata.gz: b36a9fdd1e12e9d7fbe4bcde51bdd26ac6eb7fd1aea412f0522b8f31a8739b6e428c869193ea3b8776a7f62df5b7a51c81f05ba4d32397ff406cf5a8788d3fab
7
- data.tar.gz: 90bcf6ca1386b77a474f0c3becb12327e850380dc6e67513ad1f6871d9e6f058f10c4c3d5b5c7a689bbf70b2b2848288172b5fab0555a946a97f5a025a783870
6
+ metadata.gz: da852fb40d7273f9f4f7074c1cc94dcaca5411511d1b183df78d327cd290d312aee0109d708d8e5227749383bbae0c01a37022b508ecd518cdbd0721bb755858
7
+ data.tar.gz: 7fcb82807a28ecabb01d95fa0f227067ab1ee50679386132914efae509fa6449846b87f2c70fa83b31b793cb9a56f3536d273c3704230cf86d352675bf87da7c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.1.8] - 2026-03-31
4
+
5
+ ### Added
6
+ - `StatsReporter` actor (Every 60s): periodically calls `system_stats` to collect and ship aggregate subsystem metrics
7
+ - `system_stats` runner method: collects stats from Transport, Cache, Data, LLM, Extensions, and GAIA subsystems; publishes via telemetry exchange
8
+ - `Helpers::SubsystemStats`: per-subsystem collectors with graceful guards (returns nil when subsystem not loaded)
9
+
3
10
  ## [0.1.7] - 2026-03-30
4
11
 
5
12
  ### Changed
@@ -37,7 +37,6 @@ Gem::Specification.new do |spec|
37
37
  spec.add_dependency 'legion-settings', '>= 1.3.14'
38
38
  spec.add_dependency 'legion-transport', '>= 1.3.9'
39
39
 
40
- spec.add_development_dependency 'rake'
41
40
  spec.add_development_dependency 'rspec'
42
41
  spec.add_development_dependency 'rubocop'
43
42
  spec.add_development_dependency 'rubocop-rspec'
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Telemetry
6
+ module Actor
7
+ class StatsReporter < Legion::Extensions::Actors::Every
8
+ def runner_class
9
+ 'Legion::Extensions::Telemetry::Runners::Telemetry'
10
+ end
11
+
12
+ def runner_function
13
+ 'system_stats'
14
+ end
15
+
16
+ def time
17
+ 60
18
+ end
19
+
20
+ def run_now?
21
+ false
22
+ end
23
+
24
+ def use_runner?
25
+ false
26
+ end
27
+
28
+ def check_subtask?
29
+ false
30
+ end
31
+
32
+ def generate_task?
33
+ false
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,104 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Telemetry
6
+ module Helpers
7
+ module SubsystemStats
8
+ module_function
9
+
10
+ def collect_transport
11
+ return nil unless Legion.const_defined?(:Transport, false)
12
+
13
+ stats = {}
14
+
15
+ if Legion::Transport.respond_to?(:connection) && Legion::Transport.connection.respond_to?(:status)
16
+ stats[:connection_status] = Legion::Transport.connection.status.to_s
17
+ end
18
+
19
+ if Legion::Transport.respond_to?(:connection) && Legion::Transport.connection.respond_to?(:channel_max)
20
+ stats[:channel_max] = Legion::Transport.connection.channel_max
21
+ end
22
+
23
+ stats
24
+ rescue StandardError => _e
25
+ nil
26
+ end
27
+
28
+ def collect_cache
29
+ return nil unless defined?(Legion::Cache)
30
+
31
+ stats = {}
32
+
33
+ if Legion::Cache.respond_to?(:stats)
34
+ raw = Legion::Cache.stats
35
+ stats.merge!(raw) if raw.is_a?(Hash)
36
+ end
37
+
38
+ stats
39
+ rescue StandardError => _e
40
+ nil
41
+ end
42
+
43
+ def collect_data
44
+ return nil unless defined?(Legion::Data)
45
+
46
+ stats = {}
47
+
48
+ stats[:connected] = Legion::Data.connected? if Legion::Data.respond_to?(:connected?)
49
+
50
+ stats[:pool_size] = Legion::Data::Pool.size if defined?(Legion::Data::Pool) && Legion::Data::Pool.respond_to?(:size)
51
+
52
+ stats
53
+ rescue StandardError => _e
54
+ nil
55
+ end
56
+
57
+ def collect_llm
58
+ return nil unless defined?(Legion::LLM)
59
+
60
+ stats = {}
61
+
62
+ if Legion::LLM.respond_to?(:pipeline_stats)
63
+ raw = Legion::LLM.pipeline_stats
64
+ stats.merge!(raw) if raw.is_a?(Hash)
65
+ end
66
+
67
+ stats
68
+ rescue StandardError => _e
69
+ nil
70
+ end
71
+
72
+ def collect_extensions
73
+ return nil unless defined?(Legion::Extensions)
74
+
75
+ stats = {}
76
+
77
+ if Legion::Extensions.respond_to?(:loaded)
78
+ loaded = Legion::Extensions.loaded
79
+ stats[:loaded_count] = loaded.is_a?(Array) ? loaded.length : loaded.to_i
80
+ end
81
+
82
+ stats
83
+ rescue StandardError => _e
84
+ nil
85
+ end
86
+
87
+ def collect_gaia
88
+ return nil unless defined?(Legion::Gaia)
89
+
90
+ stats = {}
91
+
92
+ stats[:tick_count] = Legion::Gaia.tick_count if Legion::Gaia.respond_to?(:tick_count)
93
+
94
+ stats[:active_phase] = Legion::Gaia.active_phase.to_s if Legion::Gaia.respond_to?(:active_phase)
95
+
96
+ stats
97
+ rescue StandardError => _e
98
+ nil
99
+ end
100
+ end
101
+ end
102
+ end
103
+ end
104
+ end
@@ -202,6 +202,31 @@ module Legion
202
202
  end
203
203
  end
204
204
 
205
+ def system_stats(**_opts)
206
+ stats = {
207
+ transport: Helpers::SubsystemStats.collect_transport,
208
+ cache: Helpers::SubsystemStats.collect_cache,
209
+ data: Helpers::SubsystemStats.collect_data,
210
+ llm: Helpers::SubsystemStats.collect_llm,
211
+ extensions: Helpers::SubsystemStats.collect_extensions,
212
+ gaia: Helpers::SubsystemStats.collect_gaia,
213
+ timestamp: Time.now.to_i
214
+ }.compact
215
+
216
+ begin
217
+ if defined?(Legion::Extensions::Telemetry::Transport::Messages::TelemetryMessage)
218
+ payload = { event_type: :system_stats, source: :system, data: stats }
219
+ Transport::Messages::TelemetryMessage.new.publish(payload)
220
+ end
221
+ rescue StandardError => _e
222
+ nil
223
+ end
224
+
225
+ { success: true, stats: stats }
226
+ rescue StandardError => e
227
+ { success: false, error: e.message }
228
+ end
229
+
205
230
  def reset!
206
231
  @event_store = nil
207
232
  @parsers = nil
@@ -3,7 +3,7 @@
3
3
  module Legion
4
4
  module Extensions
5
5
  module Telemetry
6
- VERSION = '0.1.7'
6
+ VERSION = '0.1.8'
7
7
  end
8
8
  end
9
9
  end
@@ -8,6 +8,7 @@ require 'legion/extensions/telemetry/parsers/claude_code'
8
8
  require 'legion/extensions/telemetry/helpers/event_store'
9
9
  require 'legion/extensions/telemetry/helpers/stats'
10
10
  require 'legion/extensions/telemetry/helpers/high_water_mark'
11
+ require 'legion/extensions/telemetry/helpers/subsystem_stats'
11
12
  require 'legion/extensions/telemetry/runners/telemetry'
12
13
 
13
14
  module Legion
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.7
4
+ version: 0.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Esity
@@ -121,20 +121,6 @@ dependencies:
121
121
  - - ">="
122
122
  - !ruby/object:Gem::Version
123
123
  version: 1.3.9
124
- - !ruby/object:Gem::Dependency
125
- name: rake
126
- requirement: !ruby/object:Gem::Requirement
127
- requirements:
128
- - - ">="
129
- - !ruby/object:Gem::Version
130
- version: '0'
131
- type: :development
132
- prerelease: false
133
- version_requirements: !ruby/object:Gem::Requirement
134
- requirements:
135
- - - ">="
136
- - !ruby/object:Gem::Version
137
- version: '0'
138
124
  - !ruby/object:Gem::Dependency
139
125
  name: rspec
140
126
  requirement: !ruby/object:Gem::Requirement
@@ -215,10 +201,12 @@ files:
215
201
  - lib/legion/extensions/telemetry/actors/collector.rb
216
202
  - lib/legion/extensions/telemetry/actors/publisher.rb
217
203
  - lib/legion/extensions/telemetry/actors/region_reporter.rb
204
+ - lib/legion/extensions/telemetry/actors/stats_reporter.rb
218
205
  - lib/legion/extensions/telemetry/helpers/event_store.rb
219
206
  - lib/legion/extensions/telemetry/helpers/high_water_mark.rb
220
207
  - lib/legion/extensions/telemetry/helpers/scrubber.rb
221
208
  - lib/legion/extensions/telemetry/helpers/stats.rb
209
+ - lib/legion/extensions/telemetry/helpers/subsystem_stats.rb
222
210
  - lib/legion/extensions/telemetry/helpers/telemetry_event.rb
223
211
  - lib/legion/extensions/telemetry/parsers/base.rb
224
212
  - lib/legion/extensions/telemetry/parsers/claude_code.rb