#!/usr/bin/env python3
import sys
import os
import json
import requests
import time
import datetime
import io
import xml.sax.saxutils
from . import util_functions
from . import log_parse
def spack_target(conffile, confsteps):
project_Flags = []
conffile.write('###################################################################\n')
for confs in confsteps:
k = confs
v = confsteps[k]
if 'product' == k.lower():
project_Flags.append('{}'.format(v))
conffile.write(' product-{}'.format(v))
elif 'branch' == k.lower():
project_Flags.append('@{}'.format(v))
conffile.write(' branch-{}'.format(v))
else:
project_Flags.append('{}={}'.format(k,v))
conffile.write(' {}={}'.format(k,v))
conffile.write('\n###################################################################\n')
return project_Flags
def spack_options(conffile, confsteps, HAVE_FORTRAN, HAVE_CXX, HAVE_JAVA):
project_Flags = []
conffile.write('###################################################################\n')
for confs in confsteps:
k = confs
v = confsteps[k]
z = ''
if 'fortran' == k.lower():
if 'enable' == v.lower():
if 'OFF' == HAVE_FORTRAN:
project_Flags.append('-{}'.format(k))
z = 'disable'
else:
project_Flags.append('+{}'.format(k))
z = 'enable'
else:
project_Flags.append('-{}'.format(k))
z = disable
conffile.write(' {}-fortran'.format(z))
elif 'cxx' == k.lower():
if 'enable' == v.lower():
if 'OFF' == HAVE_CXX:
project_Flags.append('-{}'.format(k))
z = 'disable'
else:
project_Flags.append('+{}'.format(k))
z = 'enable'
else:
project_Flags.append('-{}'.format(k))
conffile.write(' {}-cxx'.format(z))
elif 'java' == k.lower():
if 'enable' == v.lower():
if 'OFF' == HAVE_JAVA:
project_Flags.append('-{}'.format(k))
z = 'disable'
else:
project_Flags.append('+{}'.format(k))
z = 'enable'
else:
project_Flags.append('-{}'.format(k))
conffile.write(' {}-java'.format(z))
elif 'variant' == k.lower():
for varis in v:
k2 = varis
v2 = v[k2]
project_Flags.append('{}={}'.format(k2,v2))
conffile.write(' {}={}'.format(k,v))
else:
if 'enable' == v.lower():
project_Flags.append('+{}'.format(k))
else:
project_Flags.append('-{}'.format(k))
conffile.write(' {}-{}'.format(v,k))
conffile.write('\n###################################################################\n')
return project_Flags
def cdash_spack_config(configname, workeros, buildsite, buildproject, buildgroup, buildext):
cdash_configurevars = {'url': '{}/submit.php'.format(buildsite)}
cdash_configurevars.update({'project': '{}'.format(buildproject)})
cdash_configurevars.update({'buildname': '{}-{}-{}'.format(buildproject, buildext, configname)})
cdash_configurevars.update({'sitename': '{}'.format(workeros)})
cdash_configurevars.update({'buildstamp': '{}-{}'.format(time.strftime("%Y%m%d-%H%M"), buildgroup)})
print('spack cdash: {}'.format(cdash_configurevars))
return cdash_configurevars
def upload_info_cdash(toppath, outputdata, cmdret, configurelist, starttime, startdatetime, endtime, enddatetime):
with open('{}/HDFcdash.json'.format(toppath), 'r') as json_file:
json_cdash = json.load(json_file)
url = json_cdash['url']
payload = {'project': json_cdash['project'], 'FileName': 'Configure.xml'}
cdashfile = open('Configure.xml', 'w')
cdashfile.write('\n')
cdashfile.write('\n'.format(json_cdash['buildname'], json_cdash['sitename'], json_cdash['buildstamp']))
cdashfile.write('\n')
cdashfile.write('{}\n'.format(startdatetime.strftime("%b %d %H:%M %Z")))
cdashfile.write('{}\n'.format(starttime))
cdashfile.write('"')
for item in configurelist:
cdashfile.write('{}'.format(item))
cdashfile.write('"\n')
cdashfile.write('\n')
if len(outputdata) > 0:
print('outputdata type={}'.format(type(outputdata)))
try:
#cdashfile.write(xml.sax.saxutils.escape(BytesIO(outputdata.encode())))
cdashfile.write(xml.sax.saxutils.escape(outputdata))
except Exception as e:
print('xml.sax.saxutils Exception: = {}'.format(e))
cdashfile.write('\n')
cdashfile.write('{}\n'.format(cmdret))
cdashfile.write('{}\n'.format(enddatetime.strftime("%b %d %H:%M %Z")))
cdashfile.write('{}\n'.format(endtime))
cdashfile.write('{}\n'.format((enddatetime - startdatetime).total_seconds() / 60.0))
cdashfile.write('\n')
cdashfile.write('\n')
cdashfile.write('\n')
cdashfile.close()
# Create your header as required
#headers = {"content-type": "application/xml"}
print('upload spack info')
mydata = ''
with open('Configure.xml', 'r') as fh:
try:
mydata = fh.read().encode('utf-8')
except Exception as e:
print('Read File Exception: = {}'.format(e))
try:
resp = requests.put(url, data=mydata, params=payload) #, headers=headers)
print('url={} resp.status_code={}'.format(url, resp.status_code))
if resp.status_code != 200:
print ('FAILED PUT /builders/configure: {}'.format(resp.status_code))
# This means something went wrong.
if resp.status_code != 504: # Gateway timeout
raise Exception('PUT /builders/ {}'.format(resp.status_code))
except Exception as err:
print('Requests Exception: = {}'.format(err))
def upload_spack_cdash(toppath, outputdata, cmdret, buildlist, starttime, startdatetime, endtime, enddatetime):
with open('{}/HDFcdash.json'.format(toppath), 'r') as json_file:
json_cdash = json.load(json_file)
url = json_cdash['url']
payload = {'project': json_cdash['project'], 'FileName': 'Build.xml'}
cdashfile = open('Build.xml','w')
cdashfile.write('\n')
cdashfile.write('\n'.format(json_cdash['buildname'], json_cdash['sitename'], json_cdash['buildstamp']))
cdashfile.write('\n')
cdashfile.write('{}\n'.format(startdatetime.strftime("%b %d %H:%M %Z")))
cdashfile.write('{}\n'.format(starttime))
cdashfile.write('"')
for item in buildlist:
cdashfile.write('{}'.format(item))
cdashfile.write('"\n')
print('parse_log_events')
if len(outputdata) > 0:
warnings = None
print('outputdata type={}'.format(type(outputdata)))
try:
warnings = io.StringIO(outputdata)
except Exception as e:
print('parse_log_events Exception: = {}'.format(e))
for warning in warnings:
try:
cdashfile.write('\n')
cdashfile.write('{}\n'.format(warning))
cdashfile.write('}\n')
cdashfile.write('\n')
cdashfile.write('0\n')
except Exception as e:
print('Warning Exception: = {}'.format(e))
cdashfile.write('\n')
cdashfile.write('{}\n'.format(enddatetime.strftime("%b %d %H:%M %Z")))
cdashfile.write('{}\n'.format(endtime))
cdashfile.write('{}\n'.format((enddatetime - startdatetime).total_seconds() / 60.0))
cdashfile.write('\n')
cdashfile.write('\n')
cdashfile.write('\n')
cdashfile.close()
# Create your header as required
#headers = {"content-type": "application/xml;charset=UTF-8"}
print('upload spack build')
mydata = ''
with open('Build.xml', 'r') as fh:
try:
mydata = fh.read()
except Exception as e:
print('Read File Exception: = {}'.format(e))
try:
resp = requests.put(url, data=mydata, params=payload) #, headers=headers)
print('url={} resp.status_code={}'.format(url, resp.status_code))
if resp.status_code != 200:
print ('FAILED PUT /builders/build: {}'.format(resp.status_code))
# This means something went wrong.
if resp.status_code != 504: # Gateway timeout
raise Exception('PUT /builders/ {}'.format(resp.status_code))
except Exception as err:
print('Requests Exception: = {}'.format(err))