Module: Legion::Extensions::MindGrowth::Runners::Monitor

Extended by:
Monitor
Includes:
Helpers::Lex
Included in:
Monitor
Defined in:
lib/legion/extensions/mind_growth/runners/monitor.rb

Constant Summary collapse

HEALTH_LEVELS =
{
  excellent: 0.8,
  good:      0.6,
  fair:      0.4,
  degraded:  0.2,
  critical:  0.0
}.freeze

Instance Method Summary collapse

Instance Method Details

#auto_prune(extensions:) ⇒ Object



68
69
70
71
# File 'lib/legion/extensions/mind_growth/runners/monitor.rb', line 68

def auto_prune(extensions:, **)
  pruned = Helpers::FitnessEvaluator.prune_candidates(Array(extensions))
  { success: true, pruned: pruned, count: pruned.size }
end

#decay_check(extensions:) ⇒ Object



57
58
59
60
61
62
63
64
65
66
# File 'lib/legion/extensions/mind_growth/runners/monitor.rb', line 57

def decay_check(extensions:, **)
  threshold = Helpers::Constants::DECAY_INVOCATION_THRESHOLD
  decayed = Array(extensions).select do |ext|
    count   = ext[:invocation_count] || 0
    fitness = Helpers::FitnessEvaluator.fitness(ext)
    count < threshold || fitness < Helpers::Constants::PRUNE_THRESHOLD
  end

  { success: true, decayed: decayed, count: decayed.size }
end

#health_check(extension:) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/legion/extensions/mind_growth/runners/monitor.rb', line 21

def health_check(extension:, **)
  name    = extension[:name] || extension[:extension_name]
  fitness = Helpers::FitnessEvaluator.fitness(extension)
  level   = classify_health(fitness)
  alert   = %i[degraded critical].include?(level)

  { success: true, extension_name: name, fitness: fitness,
    health_level: level, alert: alert }
end

#health_summary(extensions:) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/legion/extensions/mind_growth/runners/monitor.rb', line 73

def health_summary(extensions:, **)
  exts = Array(extensions)

  by_health_level = HEALTH_LEVELS.keys.to_h { |level| [level, 0] }
  alerts          = []
  prune_candidates = Helpers::FitnessEvaluator.prune_candidates(exts)

  exts.each do |ext|
    fitness = Helpers::FitnessEvaluator.fitness(ext)
    level   = classify_health(fitness)
    by_health_level[level] += 1
    alerts << ext if %i[degraded critical].include?(level)
  end

  { success: true, total: exts.size, by_health_level: by_health_level,
    alerts: alerts, prune_candidates: prune_candidates }
end

#impact_score(extension:, extensions: nil) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/legion/extensions/mind_growth/runners/monitor.rb', line 42

def impact_score(extension:, extensions: nil, **)
  name   = extension[:name] || extension[:extension_name]
  impact = extension[:impact_score] || 0.5

  percentile = if extensions && !Array(extensions).empty?
                 all_impacts = Array(extensions).map { |e| e[:impact_score] || 0.5 }.sort
                 rank = all_impacts.count { |i| i <= impact }
                 (rank.to_f / all_impacts.size * 100).round(1)
               else
                 50.0
               end

  { success: true, extension_name: name, impact: impact, rank_percentile: percentile }
end

#usage_stats(extensions:) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/legion/extensions/mind_growth/runners/monitor.rb', line 31

def usage_stats(extensions:, **)
  stats = Array(extensions).map do |ext|
    { extension_name:   ext[:name] || ext[:extension_name],
      invocation_count: ext[:invocation_count] || 0,
      error_rate:       ext[:error_rate] || 0.0,
      avg_latency_ms:   ext[:avg_latency_ms] || 0 }
  end

  { success: true, stats: stats, count: stats.size }
end