upload reports to CDash
This commit is contained in:
parent
847c1216d0
commit
218331552c
@ -123,6 +123,11 @@ def setup_parser(subparser):
|
|||||||
default=None,
|
default=None,
|
||||||
help="filename for the log file. if not passed a default will be used"
|
help="filename for the log file. if not passed a default will be used"
|
||||||
)
|
)
|
||||||
|
subparser.add_argument(
|
||||||
|
'--cdash-upload-url',
|
||||||
|
default=None,
|
||||||
|
help="CDash URL where reports will be uploaded"
|
||||||
|
)
|
||||||
arguments.add_common_arguments(subparser, ['yes_to_all'])
|
arguments.add_common_arguments(subparser, ['yes_to_all'])
|
||||||
|
|
||||||
|
|
||||||
@ -193,7 +198,8 @@ def install(parser, args, **kwargs):
|
|||||||
|
|
||||||
# 1. Abstract specs from cli
|
# 1. Abstract specs from cli
|
||||||
reporter = spack.report.collect_info(args.log_format,
|
reporter = spack.report.collect_info(args.log_format,
|
||||||
' '.join(args.package))
|
' '.join(args.package),
|
||||||
|
args.cdash_upload_url)
|
||||||
if args.log_file:
|
if args.log_file:
|
||||||
reporter.filename = args.log_file
|
reporter.filename = args.log_file
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
import codecs
|
import codecs
|
||||||
import collections
|
import collections
|
||||||
import functools
|
import functools
|
||||||
|
import hashlib
|
||||||
import itertools
|
import itertools
|
||||||
import os.path
|
import os.path
|
||||||
import platform
|
import platform
|
||||||
@ -35,11 +36,13 @@
|
|||||||
import traceback
|
import traceback
|
||||||
import xml.sax.saxutils
|
import xml.sax.saxutils
|
||||||
from six import text_type
|
from six import text_type
|
||||||
|
from six.moves.urllib.request import build_opener, HTTPHandler, Request
|
||||||
|
|
||||||
import llnl.util.lang
|
import llnl.util.lang
|
||||||
import spack.build_environment
|
import spack.build_environment
|
||||||
import spack.fetch_strategy
|
import spack.fetch_strategy
|
||||||
import spack.package
|
import spack.package
|
||||||
|
from spack.util.crypto import checksum
|
||||||
from spack.util.log_parse import parse_log_events
|
from spack.util.log_parse import parse_log_events
|
||||||
|
|
||||||
|
|
||||||
@ -250,18 +253,18 @@ class collect_info(object):
|
|||||||
Spec('zlib').concretized().do_install()
|
Spec('zlib').concretized().do_install()
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
specs (list of Spec): specs to be installed
|
|
||||||
format_name (str or None): one of the supported formats
|
format_name (str or None): one of the supported formats
|
||||||
filename (str or None): name of the file where the report wil
|
install_command (str): the command line passed to spack
|
||||||
be eventually written
|
cdash_upload_url (str or None): where to upload the report
|
||||||
|
|
||||||
Raises:
|
Raises:
|
||||||
ValueError: when ``format_name`` is not in ``valid_formats``
|
ValueError: when ``format_name`` is not in ``valid_formats``
|
||||||
"""
|
"""
|
||||||
def __init__(self, format_name, install_command):
|
def __init__(self, format_name, install_command, cdash_upload_url):
|
||||||
self.format_name = format_name
|
self.format_name = format_name
|
||||||
# Consider setting these properties in a more CDash specific place.
|
self.filename = None
|
||||||
self.install_command = install_command
|
self.install_command = install_command
|
||||||
|
self.cdash_upload_url = cdash_upload_url
|
||||||
self.hostname = socket.gethostname()
|
self.hostname = socket.gethostname()
|
||||||
self.osname = platform.system()
|
self.osname = platform.system()
|
||||||
self.starttime = int(time.time())
|
self.starttime = int(time.time())
|
||||||
@ -390,6 +393,7 @@ def clean_log_event(event):
|
|||||||
report_name)
|
report_name)
|
||||||
t = env.get_template(phase_template)
|
t = env.get_template(phase_template)
|
||||||
f.write(t.render(report_data))
|
f.write(t.render(report_data))
|
||||||
|
self.upload_to_cdash(phase_report)
|
||||||
|
|
||||||
def concretization_report(self, msg):
|
def concretization_report(self, msg):
|
||||||
if not self.format_name == 'cdash':
|
if not self.format_name == 'cdash':
|
||||||
@ -408,6 +412,25 @@ def concretization_report(self, msg):
|
|||||||
output_filename = os.path.join(self.filename, 'Update.xml')
|
output_filename = os.path.join(self.filename, 'Update.xml')
|
||||||
with open(output_filename, 'w') as f:
|
with open(output_filename, 'w') as f:
|
||||||
f.write(t.render(report_data))
|
f.write(t.render(report_data))
|
||||||
|
self.upload_to_cdash(output_filename)
|
||||||
|
|
||||||
|
def upload_to_cdash(self, filename):
|
||||||
|
if not self.cdash_upload_url:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Compute md5 checksum for the contents of this file.
|
||||||
|
md5sum = checksum(hashlib.md5, filename, block_size=8192)
|
||||||
|
|
||||||
|
opener = build_opener(HTTPHandler)
|
||||||
|
with open(filename, 'rb') as f:
|
||||||
|
url = "{0}&MD5={1}".format(self.cdash_upload_url, md5sum)
|
||||||
|
request = Request(url, data=f)
|
||||||
|
request.add_header('Content-Type', 'text/xml')
|
||||||
|
request.add_header('Content-Length', os.path.getsize(filename))
|
||||||
|
# By default, urllib2 only support GET and POST.
|
||||||
|
# CDash needs expects this file to be uploaded via PUT.
|
||||||
|
request.get_method = lambda: 'PUT'
|
||||||
|
url = opener.open(request)
|
||||||
|
|
||||||
def __exit__(self, exc_type, exc_val, exc_tb):
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
||||||
if self.format_name:
|
if self.format_name:
|
||||||
|
Loading…
Reference in New Issue
Block a user