-
Notifications
You must be signed in to change notification settings - Fork 0
/
lifx-jenkins.py
148 lines (118 loc) · 4.23 KB
/
lifx-jenkins.py
1
2
3
4
5
6
7
8
9
10
11
12
13
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/bin/env python
import json
import sys
import time
import urllib
from multiprocessing import Process
from lifxlan import LifxLAN, YELLOW, RED, BLUE, COLD_WHITE
def main():
jenkins_job_url = None
if len(sys.argv) != 2:
print "Usage: python lifx-jenkins.py [path-to-jenkins-job]"
return
jenkins_job_url = "%s/api/json" % sys.argv[1]
print "Watching the following Jenkins job JSON: %s..." % jenkins_job_url
num_lights = 1
print "Discovering lights..."
lifx = LifxLAN(num_lights)
devices = lifx.get_lights()
print "\nFound {} light(s):\n".format(len(devices))
# Using the first bulb it finds.
bulb = devices[0]
print bulb
poll_interval = 5
def set_color_yellow():
bulb.set_power("on")
bulb.set_color(YELLOW)
def set_color_red():
bulb.set_power("on")
bulb.set_color(RED)
def set_color_blue():
bulb.set_power("on")
bulb.set_color(BLUE)
def set_color_aborted():
bulb.set_power("on")
bulb.set_color(COLD_WHITE)
def setColorYellowAnime():
while True:
set_color_yellow()
print 'Bulb on'
time.sleep(1)
bulb.set_power("off")
print 'Bulb off'
time.sleep(1)
def setColorRedAnime():
while True:
set_color_red()
print 'Bulb on'
time.sleep(1)
bulb.set_power("off")
print 'Bulb off'
time.sleep(1)
def setColorBlueAnime():
while True:
set_color_blue()
print 'Bulb on'
time.sleep(1)
bulb.set_power("off")
print 'Bulb off'
time.sleep(1)
def setColorAbortedAnime():
while True:
set_color_aborted()
print 'Bulb on'
time.sleep(1)
bulb.set_power("off")
print 'Bulb off'
time.sleep(1)
process_set_color_yellow_anime = None
process_set_color_red_anime = None
process_set_color_blue_anime = None
process_set_color_aborted_anime = None
print 'Watching URL: %s' % (jenkins_job_url)
last_color = 'blue'
set_color_blue()
while True:
response = urllib.urlopen(jenkins_job_url)
data = json.loads(response.read())
color = data['color']
print 'Current color of Jenkins job: %s' % (color)
if color != last_color:
print 'State changed from %s to %s' % (last_color, color)
last_color = color
if process_set_color_yellow_anime:
if process_set_color_yellow_anime.is_alive():
process_set_color_yellow_anime.terminate()
if process_set_color_red_anime:
if process_set_color_red_anime.is_alive():
process_set_color_red_anime.terminate()
if process_set_color_blue_anime:
if process_set_color_blue_anime.is_alive():
process_set_color_blue_anime.terminate()
if process_set_color_aborted_anime:
if process_set_color_aborted_anime.is_alive():
process_set_color_aborted_anime.terminate()
if color == 'yellow':
set_color_yellow()
elif color == 'red':
set_color_red()
elif color == 'blue':
set_color_blue()
elif color == 'aborted':
set_color_aborted()
elif color == 'yellow_anime':
process_set_color_yellow_anime = Process(target=setColorYellowAnime)
process_set_color_yellow_anime.start()
elif color == 'red_anime':
process_set_color_red_anime = Process(target=setColorRedAnime)
process_set_color_red_anime.start()
elif color == 'blue_anime':
process_set_color_blue_anime = Process(target=setColorBlueAnime)
process_set_color_blue_anime.start()
elif color == 'aborted_anime':
process_set_color_aborted_anime = Process(target=setColorAbortedAnime)
process_set_color_aborted_anime.start()
response.close()
time.sleep(poll_interval)
if __name__=="__main__":
main()