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 +4 -4
- data/CHANGELOG.md +7 -0
- data/lex-telemetry.gemspec +0 -1
- data/lib/legion/extensions/telemetry/actors/stats_reporter.rb +39 -0
- data/lib/legion/extensions/telemetry/helpers/subsystem_stats.rb +104 -0
- data/lib/legion/extensions/telemetry/runners/telemetry.rb +25 -0
- data/lib/legion/extensions/telemetry/version.rb +1 -1
- data/lib/legion/extensions/telemetry.rb +1 -0
- metadata +3 -15
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 38dd588b667de5c28ca831f41b9bb3e59a2df3ddb1da73760032b64bb868ada6
|
|
4
|
+
data.tar.gz: 16d9198d26d37a76fbdce09918dc46300a3322927fceb5d767b291f1b44657ce
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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
|
data/lex-telemetry.gemspec
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
|
|
@@ -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.
|
|
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
|