Module: ExtremeFeedbackDevice

Defined in:
lib/extreme_feedback_device.rb,
lib/extreme_feedback_device/pi.rb,
lib/extreme_feedback_device/cli.rb,
lib/extreme_feedback_device/job.rb,
lib/extreme_feedback_device/spi.rb,
lib/extreme_feedback_device/jenkins.rb,
lib/extreme_feedback_device/version.rb,
lib/extreme_feedback_device/settings.rb

Defined Under Namespace

Classes: CLI, Jenkins, Job, Pi, SPI, Settings

Constant Summary collapse

VERSION =
"0.0.4"

Class Method Summary collapse

Class Method Details

.environmentObject



16
17
18
# File 'lib/extreme_feedback_device.rb', line 16

def environment
  ENV["EFD_ENV"] || "production"
end

.infinite_loopObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/extreme_feedback_device.rb', line 65

def infinite_loop
  settings['infinite_loop'] ||= {}
  interval = settings.infinite_loop['sleep'] || 30

  %w(INT TERM).each do |signal|
    trap(signal) do
      puts "\r\nReceived SIGINT - turning off all LEDs and exit ..."
      pi.leds_black!
      pi.leds_black! # ... just to be safe
      exit(0)
    end
  end

  while true
    run
    sleep(interval)
  end
end

.jenkinsObject



24
25
26
# File 'lib/extreme_feedback_device.rb', line 24

def jenkins
  @jenkins ||= ExtremeFeedbackDevice::Jenkins.new(settings.jenkins.user, settings.jenkins.token, settings.jenkins.url)
end

.loggerObject



8
9
10
11
12
13
14
# File 'lib/extreme_feedback_device.rb', line 8

def logger
  if settings['log']
    @logger ||= ::Logger.new(settings.log.file, settings.log['keep'], settings.log['size'])
  else
    @logger ||= ::Logger.new(STDOUT)
  end
end

.piObject



28
29
30
# File 'lib/extreme_feedback_device.rb', line 28

def pi
  @pi ||= ExtremeFeedbackDevice::Pi.new(settings.pi.num_leds, settings.spi['device'])
end

.runObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/extreme_feedback_device.rb', line 32

def run
  jobs = jenkins.jobs
  num_leds = settings.pi.num_leds
  map_leds = settings.pi.map_leds

  num_leds.times do |led_idx|
    job_name = map_leds["i_#{led_idx}"]
    if job_name
      job = jobs.find { |job| job.name == job_name }
      if job
        if job.fail?
          pi.leds[led_idx] = ::Color::RGB::Red
        elsif job.unstable?
          pi.leds[led_idx] = ::Color::RGB::Yellow
        elsif job.success?
          pi.leds[led_idx] = ::Color::RGB::Green
        elsif job.inactive?
          pi.leds[led_idx] = ::Color::RGB::Grey
        elsif job.disabled?
          pi.leds[led_idx] = ::Color::RGB::Grey
        else # any other state
          pi.leds[led_idx] = ::Color::RGB::Black
        end
      else # no job with this name in jenkins
        pi.leds[led_idx] = ::Color::RGB::Black
      end
    else # no job associated with this led_idx
      pi.leds[led_idx] = ::Color::RGB::Black
    end
  end
  pi.write!
end

.settingsObject



20
21
22
# File 'lib/extreme_feedback_device.rb', line 20

def settings
  @settings ||= ExtremeFeedbackDevice::Settings
end