blob: 39268a4e5221a3787bf131cf24fc393c4c3de3b5 [file] [log] [blame]
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""This module contains utilities for test to report result to Sponge.
"""
import logging
from autotest_lib.site_utils.sponge_lib import autotest_dynamic_job
from autotest_lib.client.common_lib import decorators
try:
from sponge import upload_utils
except ImportError:
logging.debug('Module failed to be imported: sponge')
upload_utils = None
class SpongeLogHandler(logging.Handler):
"""Helper log handler for logging during sponge."""
def __init__(self, log_func):
super(SpongeLogHandler, self).__init__()
self.log_func = log_func
def emit(self, record):
log_entry = self.format(record)
self.log_func(log_entry)
@decorators.test_module_available(upload_utils)
def upload_results(job, log=logging.debug):
"""Upload test results to Sponge with given job details.
@param job: A job object created by tko/parsers.
@param log: Logging method, default is logging.debug.
@return: A url to the Sponge invocation.
"""
start_level = logging.getLogger().level
log_handler = SpongeLogHandler(log)
logging.getLogger().addHandler(log_handler)
logging.getLogger().setLevel(logging.DEBUG)
logging.info("added log handler")
try:
logging.info('Starting sponge upload.')
info = autotest_dynamic_job.DynamicJobInfo(job)
return upload_utils.UploadInfo(info)
except:
logging.exception('Failed to upload to sponge.')
finally:
logging.getLogger().removeHandler(log_handler)
logging.getLogger().setLevel(start_level)