Merge "Split the dashboard into different apps, add tests"
[pharos.git] / tools / pharos-dashboard / jenkins / adapter.py
@@ -1,5 +1,7 @@
-import requests
 import logging
+
+import re
+import requests
 from django.core.cache import cache
 
 logger = logging.getLogger(__name__)
@@ -82,3 +84,70 @@ def is_dev_pod(slavename):
     if slavename.find('pod') != -1:
         return True
     return False
+
+def parse_slave_data(slave_dict, slave):
+    slave_dict['status'] = get_slave_status(slave)
+    slave_dict['status_color'] = get_status_color(slave)
+    slave_dict['slaveurl'] = get_slave_url(slave)
+    job = get_jenkins_job(slave['displayName'])
+    if job is not None:
+        slave_dict['last_job'] = parse_job(job)
+
+
+def parse_job(job):
+    result = parse_job_string(job['lastBuild']['fullDisplayName'])
+    result['url'] = job['url']
+    result['color'] = get_job_color(job)
+    if job['lastBuild']['building']:
+        result['blink'] = 'class=blink_me'
+    return result
+
+
+def parse_job_string(full_displayname):
+    job = {}
+    tokens = re.split(r'[ -]', full_displayname)
+    for i in range(len(tokens)):
+        if tokens[i] == 'os':
+            job['scenario'] = '-'.join(tokens[i: i + 4])
+        elif tokens[i] in ['fuel', 'joid', 'apex', 'compass']:
+            job['installer'] = tokens[i]
+        elif tokens[i] in ['master', 'arno', 'brahmaputra', 'colorado']:
+            job['branch'] = tokens[i]
+
+    tokens = full_displayname.split(' ')
+    job['name'] = tokens[0]
+    return job
+
+
+# TODO: use css
+def get_job_color(job):
+    if job['lastBuild']['building'] is True:
+        return '#646F73'
+    result = job['lastBuild']['result']
+    if result == 'SUCCESS':
+        return '#5cb85c'
+    if result == 'FAILURE':
+        return '#d9534f'
+    if result == 'UNSTABLE':
+        return '#EDD62B'
+
+
+# TODO: use css
+def get_status_color(slave):
+    if not slave['offline'] and slave['idle']:
+        return '#5bc0de'
+    if not slave['offline']:
+        return '#5cb85c'
+    return '#d9534f'
+
+
+def get_slave_url(slave):
+    return 'https://build.opnfv.org/ci/computer/' + slave['displayName']
+
+
+def get_slave_status(slave):
+    if not slave['offline'] and slave['idle']:
+        return 'online / idle'
+    if not slave['offline']:
+        return 'online'
+    return 'offline'