#!/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))