5 from django.core.cache import cache
7 logger = logging.getLogger(__name__)
10 # TODO: implement caching decorator, cache get_* functions
12 if cache.get(url) is None:
14 response = requests.get(url)
15 json = response.json()
16 cache.set(url, json, 180) # cache result for 180 seconds
17 return response.json()
18 except requests.exceptions.RequestException as e:
20 except ValueError as e:
27 url = "https://build.opnfv.org/ci/computer/api/json?tree=computer[displayName,offline,idle]"
30 return json['computer'] # return list of dictionaries
34 def get_slave(slavename):
35 slaves = get_all_slaves()
37 if slave['displayName'] == slavename:
43 url = "https://build.opnfv.org/ci/label/ci-pod/api/json?tree=nodes[nodeName,offline,idle]"
51 url = "https://build.opnfv.org/ci/api/json?tree=jobs[displayName,url,lastBuild[fullDisplayName,building,builtOn,timestamp,result]]"
54 return json['jobs'] # return list of dictionaries
58 def get_jenkins_job(slavename):
63 if job['lastBuild'] is not None:
64 if job['lastBuild']['builtOn'] == slavename:
65 if job['lastBuild']['building'] is True:
66 return job # return active build
67 if job['lastBuild']['timestamp'] > max_time:
69 max_time = job['lastBuild']['timestamp']
73 def is_ci_slave(slavename):
74 ci_slaves = get_ci_slaves()
75 for ci_slave in ci_slaves:
76 if ci_slave['nodeName'] == slavename:
81 def is_dev_pod(slavename):
82 if is_ci_slave(slavename):
84 if slavename.find('pod') != -1:
88 def parse_slave_data(slave_dict, slave):
89 slave_dict['status'] = get_slave_status(slave)
90 slave_dict['status_color'] = get_status_color(slave)
91 slave_dict['slaveurl'] = get_slave_url(slave)
92 job = get_jenkins_job(slave['displayName'])
94 slave_dict['last_job'] = parse_job(job)
98 result = parse_job_string(job['lastBuild']['fullDisplayName'])
99 result['url'] = job['url']
100 result['color'] = get_job_color(job)
101 if job['lastBuild']['building']:
102 result['blink'] = 'class=blink_me'
106 def parse_job_string(full_displayname):
108 tokens = re.split(r'[ -]', full_displayname)
109 for i in range(len(tokens)):
110 if tokens[i] == 'os':
111 job['scenario'] = '-'.join(tokens[i: i + 4])
112 elif tokens[i] in ['fuel', 'joid', 'apex', 'compass']:
113 job['installer'] = tokens[i]
114 elif tokens[i] in ['master', 'arno', 'brahmaputra', 'colorado']:
115 job['branch'] = tokens[i]
117 tokens = full_displayname.split(' ')
118 job['name'] = tokens[0]
123 def get_job_color(job):
124 if job['lastBuild']['building'] is True:
126 result = job['lastBuild']['result']
127 if result == 'SUCCESS':
129 if result == 'FAILURE':
131 if result == 'UNSTABLE':
136 def get_status_color(slave):
137 if not slave['offline'] and slave['idle']:
139 if not slave['offline']:
144 def get_slave_url(slave):
145 return 'https://build.opnfv.org/ci/computer/' + slave['displayName']
148 def get_slave_status(slave):
149 if not slave['offline'] and slave['idle']:
150 return 'online / idle'
151 if not slave['offline']: