5 from django.core.cache import cache
7 logger = logging.getLogger(__name__)
9 # TODO: implement caching decorator, cache get_* functions
11 if cache.get(url) is None:
13 response = requests.get(url)
14 json = response.json()
15 cache.set(url, json, 180) # cache result for 180 seconds
17 except requests.exceptions.RequestException as e:
19 except ValueError as e:
26 url = "https://build.opnfv.org/ci/computer/api/json?tree=computer[displayName,offline,idle]"
29 return json['computer'] # return list of dictionaries
33 def get_slave(slavename):
34 slaves = get_all_slaves()
36 if slave['displayName'] == slavename:
42 url = "https://build.opnfv.org/ci/label/ci-pod/api/json?tree=nodes[nodeName,offline,idle]"
50 url = "https://build.opnfv.org/ci/api/json?tree=jobs[displayName,url,lastBuild[fullDisplayName,building,builtOn,timestamp,result]]"
53 return json['jobs'] # return list of dictionaries
57 def get_jenkins_job(slavename):
62 if job['lastBuild'] is not None:
63 if job['lastBuild']['builtOn'] == slavename:
64 if job['lastBuild']['building'] is True:
65 return job # return active build
66 if job['lastBuild']['timestamp'] > max_time:
68 max_time = job['lastBuild']['timestamp']
72 def is_ci_slave(slavename):
73 ci_slaves = get_ci_slaves()
74 for ci_slave in ci_slaves:
75 if ci_slave['nodeName'] == slavename:
80 def is_dev_pod(slavename):
81 if is_ci_slave(slavename):
83 if slavename.find('pod') != -1:
89 result = parse_job_string(job['lastBuild']['fullDisplayName'])
90 result['building'] = job['lastBuild']['building']
92 if not job['lastBuild']['building']:
93 result['result'] = job['lastBuild']['result']
94 result['url'] = job['url']
98 def parse_job_string(full_displayname):
101 job['installer'] = ''
103 tokens = re.split(r'[ -]', full_displayname)
104 for i in range(len(tokens)):
105 if tokens[i] == 'os':
106 job['scenario'] = '-'.join(tokens[i: i + 4])
107 elif tokens[i] in ['fuel', 'joid', 'apex', 'compass']:
108 job['installer'] = tokens[i]
109 elif tokens[i] in ['master', 'arno', 'brahmaputra', 'colorado']:
110 job['branch'] = tokens[i]
111 tokens = full_displayname.split(' ')
112 job['name'] = tokens[0]
115 def get_slave_url(slave):
116 return 'https://build.opnfv.org/ci/computer/' + slave['displayName']
119 def get_slave_status(slave):
120 if not slave['offline'] and slave['idle']:
121 return 'online / idle'
122 if not slave['offline']: