Class: Legion::Extensions::Synapse::Actor::Homeostasis

Inherits:
Actors::Every
  • Object
show all
Defined in:
lib/legion/extensions/synapse/actors/homeostasis.rb

Instance Method Summary collapse

Instance Method Details

#action(**_opts) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/legion/extensions/synapse/actors/homeostasis.rb', line 14

def action(**_opts)
  return { status: :skipped, reason: :no_data } unless defined?(Legion::Data)

  results = { spikes: 0, droughts: 0, updated: 0 }
  return results unless defined?(Legion::Extensions::Synapse::Data::Model::Synapse)

  Legion::Extensions::Synapse::Data::Model::Synapse
    .where(status: 'active')
    .where { baseline_throughput > 0 } # rubocop:disable Style/NumericPredicate
    .each do |synapse|
    baseline = synapse.baseline_throughput
    signals = synapse.signals_dataset.where { created_at > (Time.now - 60) }.count
    current = signals.to_f

    if Helpers::Homeostasis.spike?(current, baseline, duration_seconds: 60)
      results[:spikes] += 1
    elsif Helpers::Homeostasis.drought?(current, baseline, silent_seconds: 60)
      results[:droughts] += 1
    end

    new_baseline = Helpers::Homeostasis.update_baseline(baseline, current)
    synapse.update(baseline_throughput: new_baseline)
    results[:updated] += 1
  end

  results
end

#check_subtask?Boolean

Returns:

  • (Boolean)


11
# File 'lib/legion/extensions/synapse/actors/homeostasis.rb', line 11

def check_subtask? = false

#generate_task?Boolean

Returns:

  • (Boolean)


12
# File 'lib/legion/extensions/synapse/actors/homeostasis.rb', line 12

def generate_task? = false

#runner_classObject



8
# File 'lib/legion/extensions/synapse/actors/homeostasis.rb', line 8

def runner_class = self.class

#timeObject



9
# File 'lib/legion/extensions/synapse/actors/homeostasis.rb', line 9

def time = 30

#use_runner?Boolean

Returns:

  • (Boolean)


10
# File 'lib/legion/extensions/synapse/actors/homeostasis.rb', line 10

def use_runner? = false