in src/plugins/scanners/buildbot.py [0:0]
def scanJob(KibbleBit, source, job, creds):
""" Scans a single job for activity """
NOW = int(datetime.datetime.utcnow().timestamp())
dhash = hashlib.sha224( ("%s-%s-%s" % (source['organisation'], source['sourceID'], job) ).encode('ascii', errors='replace')).hexdigest()
found = True
doc= None
parseIt = False
found = KibbleBit.exists('cijob', dhash)
jobURL = "%s/api/v2/builders/%s/builds" % (source['sourceURL'], job)
KibbleBit.pprint(jobURL)
jobjson = plugins.utils.jsonapi.get(jobURL, auth = creds)
# If valid JSON, ...
if jobjson:
for buildno, data in jobjson.items():
buildhash = hashlib.sha224( ("%s-%s-%s-%s" % (source['organisation'], source['sourceID'], job, buildno) ).encode('ascii', errors='replace')).hexdigest()
builddoc = None
try:
builddoc = KibbleBit.get('ci_build', buildhash)
except:
pass
# If this build already completed, no need to parse it again
if builddoc and builddoc.get('completed', False):
continue
KibbleBit.pprint("[%s-%s] This is new or pending, analyzing..." % (job, buildno))
completed = True if 'currentStep' in data else False
# Get build status (success, failed, canceled etc)
status = 'building'
if 'successful' in data.get('text', []):
status = 'success'
if 'failed' in data.get('text', []):
status = 'failed'
if 'exception' in data.get('text', []):
status = 'aborted'
DUR = 0
# Calc when the build finished
if completed and len(data.get('times', [])) == 2 and data['times'][1]:
FIN = data['times'][1]
DUR = FIN - data['times'][0]
else:
FIN = 0
doc = {
# Build specific data
'id': buildhash,
'date': time.strftime("%Y/%m/%d %H:%M:%S", time.gmtime(FIN)),
'buildID': buildno,
'completed': completed,
'duration': DUR*1000, # Buildbot does seconds, not milis
'job': job,
'jobURL': "%s/builders/%s" % (source['sourceURL'], job),
'status': status,
'started': int(data['times'][0]),
'ci': 'buildbot',
# Standard docs values
'sourceID': source['sourceID'],
'organisation': source['organisation'],
'upsert': True,
}
KibbleBit.append('ci_build', doc)
# Yay, it worked!
return True
# Boo, it failed!
KibbleBit.pprint("Fetching job data failed!")
return False