本文整理汇总了Python中thclient.TreeherderJobCollection.to_json方法的典型用法代码示例。如果您正苦于以下问题:Python TreeherderJobCollection.to_json方法的具体用法?Python TreeherderJobCollection.to_json怎么用?Python TreeherderJobCollection.to_json使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类thclient.TreeherderJobCollection
的用法示例。
在下文中一共展示了TreeherderJobCollection.to_json方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: submit
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit(self, job):
"""Submit the job to treeherder.
:param job: Treeherder job instance to use for submission.
"""
job.add_submit_timestamp(int(time.time()))
# We can only submit job info once, so it has to be done in completed
if self._job_details:
job.add_artifact('Job Info', 'json', {'job_details': self._job_details})
job_collection = TreeherderJobCollection()
job_collection.add(job)
logger.info('Sending results to Treeherder: {}'.format(job_collection.to_json()))
url = urlparse(self.url)
client = TreeherderClient(protocol=url.scheme, host=url.hostname,
client_id=self.client_id, secret=self.secret)
client.post_collection(self.repository, job_collection)
logger.info('Results are available to view at: {}'.format(
urljoin(self.url,
JOB_FRAGMENT.format(repository=self.repository,
revision=self.revision))))
示例2: submit_running
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit_running(self, machine, build_url, project, revision_hash, tests=None):
"""Submit tests running notifications to Treeherder
:param machine: machine id
:param build_url: url to build being tested.
:param project: repository of build.
:param revision_hash: Treeherder revision hash of build.
:param tests: Lists of tests to be reported.
"""
if tests is None:
tests = []
logger.debug('AutophoneTreeherder.submit_running: %s' % tests)
if not self.url or not revision_hash:
logger.debug('AutophoneTreeherder.submit_running: no url/revision hash')
return
tjc = TreeherderJobCollection()
for t in tests:
logger.debug('AutophoneTreeherder.submit_running: '
'for %s %s' % (t.name, project))
t.submit_timestamp = timestamp_now()
t.start_timestamp = timestamp_now()
tj = tjc.get_job()
tj.add_tier(self.options.treeherder_tier)
tj.add_revision_hash(revision_hash)
tj.add_project(project)
tj.add_job_guid(t.job_guid)
tj.add_job_name(t.job_name)
tj.add_job_symbol(t.job_symbol)
tj.add_group_name(t.group_name)
tj.add_group_symbol(t.group_symbol)
tj.add_product_name('fennec')
tj.add_state(TestState.RUNNING)
tj.add_submit_timestamp(t.submit_timestamp)
tj.add_start_timestamp(t.start_timestamp)
# XXX need to send these until Bug 1066346 fixed.
tj.add_end_timestamp(0)
#
tj.add_machine(machine)
tj.add_build_info('android', t.phone.platform, t.phone.architecture)
tj.add_machine_info('android',t.phone.platform, t.phone.architecture)
tj.add_option_collection({'opt': True})
tj.add_artifact('buildapi', 'json', {
'buildername': t.get_buildername(project)})
tj.add_artifact('privatebuild', 'json', {
'build_url': build_url,
'config_file': t.config_file,
'chunk': t.chunk})
tjc.add(tj)
logger.debug('AutophoneTreeherder.submit_running: tjc: %s' %
tjc.to_json())
self.queue_request(machine, project, tjc)
示例3: submit_pending
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit_pending(self, tests=[]):
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_pending: %s' % tests)
if not self.url or not self.worker.build.revision_hash:
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_pending: no url/revision hash')
return
tjc = TreeherderJobCollection(job_type='update')
if not tests:
tests = self.worker.runnable_tests
for t in tests:
t.message = None
t.submit_timestamp = timestamp_now()
t.job_guid = generate_guid()
t.job_details = []
self.worker.loggerdeco.info('creating Treeherder job %s for %s %s, '
'revision: %s, revision_hash: %s' % (
t.job_guid, t.name, t.build.tree,
t.build.revision, t.build.revision_hash))
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_pending: '
'test config_file=%s, config sections=%s' % (
t.config_file, t.cfg.sections()))
tj = tjc.get_job()
tj.add_revision_hash(self.worker.build.revision_hash)
tj.add_project(self.worker.build.tree)
tj.add_job_guid(t.job_guid)
tj.add_job_name(t.job_name)
tj.add_job_symbol(t.job_symbol)
tj.add_group_name(t.group_name)
tj.add_group_symbol(t.group_symbol)
tj.add_product_name('fennec')
tj.add_state(TestState.PENDING)
tj.add_submit_timestamp(t.submit_timestamp)
# XXX need to send these until Bug 1066346 fixed.
tj.add_start_timestamp(t.submit_timestamp)
tj.add_end_timestamp(t.submit_timestamp)
#
tj.add_machine(t.phone.id)
tj.add_build_url(self.worker.build.url)
tj.add_build_info('android', t.phone.platform, t.phone.architecture)
tj.add_machine_info('android',t.phone.platform, t.phone.architecture)
tj.add_option_collection({'opt': True})
# Fake the buildername from buildbot...
tj.add_artifact('buildapi', 'json', {'buildername': t.buildername})
tjc.add(tj)
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_pending: tjc: %s' % (
tjc.to_json()))
self.post_request(tjc)
示例4: submit_running
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit_running(self, tests=[]):
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_running: %s' % tests)
if not self.url or not self.worker.build.revision_hash:
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_running: no url/revision hash')
return
tjc = TreeherderJobCollection(job_type='update')
if not tests:
tests = self.worker.runnable_tests
for t in tests:
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_running: '
'for %s %s' % (t.name, t.build.tree))
t.start_timestamp = timestamp_now()
tj = tjc.get_job()
tj.add_revision_hash(self.worker.build.revision_hash)
tj.add_project(self.worker.build.tree)
tj.add_job_guid(t.job_guid)
tj.add_job_name(t.job_name)
tj.add_job_symbol(t.job_symbol)
tj.add_group_name(t.group_name)
tj.add_group_symbol(t.group_symbol)
tj.add_product_name('fennec')
tj.add_state(TestState.RUNNING)
tj.add_submit_timestamp(t.submit_timestamp)
tj.add_start_timestamp(t.start_timestamp)
# XXX need to send these until Bug 1066346 fixed.
tj.add_end_timestamp(t.start_timestamp)
#
tj.add_machine(t.phone.id)
tj.add_build_url(self.worker.build.url)
tj.add_build_info('android', t.phone.platform, t.phone.architecture)
tj.add_machine_info('android',t.phone.platform, t.phone.architecture)
tj.add_option_collection({'opt': True})
tj.add_artifact('buildapi', 'json', {'buildername': t.buildername})
tjc.add(tj)
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_running: tjc: %s' %
tjc.to_json())
self.post_request(tjc)
示例5: submit
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit(self, job, logs=None):
logs = logs or []
# We can only submit job info once, so it has to be done in completed
if self._job_details:
job.add_artifact('Job Info', 'json', {'job_details': self._job_details})
job_collection = TreeherderJobCollection()
job_collection.add(job)
print('Sending results to Treeherder: {}'.format(job_collection.to_json()))
url = urlparse(self.url)
client = TreeherderClient(protocol=url.scheme, host=url.hostname,
client_id=self.client_id, secret=self.secret)
client.post_collection(self.repository, job_collection)
print('Results are available to view at: {}'.format(
urljoin(self.url,
JOB_FRAGMENT.format(repository=self.repository, revision=self.revision))))
示例6: submit_results
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit_results(self, job):
job.add_project(self.project)
job.add_revision_hash(self.retrieve_revision_hash())
job.add_submit_timestamp(int(time.time()))
job_collection = TreeherderJobCollection()
job_collection.add(job)
# self.logger.info
print('Sending results to Treeherder: %s' % job_collection.to_json())
url = urlparse(self.url)
client = TreeherderClient(protocol=url.scheme, host=url.hostname,
client_id=self.client_id, secret=self.secret)
client.post_collection(self.project, job_collection)
# self.logger.info
print('Results are available to view at: %s' % (
urljoin(self.url,
REVISON_FRAGMENT % (self.project, self.revision))))
示例7: submit_running
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit_running(self, machine, build_url, project, revision, build_type,
build_abi, build_platform, build_sdk, builder_type, tests=[]):
"""Submit tests running notifications to Treeherder
:param machine: machine id
:param build_url: url to build being tested.
:param project: repository of build.
:param revision: Either a URL to the changeset or the revision id.
:param tests: Lists of tests to be reported.
"""
logger = utils.getLogger()
logger.debug('AutophoneTreeherder.submit_running: %s', tests)
if not self.url or not revision:
logger.debug('AutophoneTreeherder.submit_running: no url/revision')
return
tjc = TreeherderJobCollection()
for t in tests:
logger.debug('AutophoneTreeherder.submit_running: for %s %s', t.name, project)
t.submit_timestamp = timestamp_now()
t.start_timestamp = timestamp_now()
tj = self._create_job(tjc, machine, build_url, project, revision,
build_type, build_abi, build_platform,
build_sdk, builder_type, t)
tj.add_state(TestState.RUNNING)
tj.add_submit_timestamp(t.submit_timestamp)
tj.add_start_timestamp(t.start_timestamp)
# XXX need to send these until Bug 1066346 fixed.
tj.add_end_timestamp(0)
tjc.add(tj)
logger.debug('AutophoneTreeherder.submit_running: tjc: %s',
tjc.to_json())
self.queue_request(machine, project, tjc)
示例8: submit
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit(self, job):
"""Submit the job to treeherder.
:param job: Treeherder job instance to use for submission.
"""
job.add_submit_timestamp(int(time.time()))
if self._job_details:
job.add_artifact('Job Info', 'json',
{'job_details': copy.deepcopy(self._job_details)})
self._job_details = []
job_collection = TreeherderJobCollection()
job_collection.add(job)
logger.info('Sending results to Treeherder: {}'.format(job_collection.to_json()))
self.client.post_collection(self.repository, job_collection)
logger.info('Results are available to view at: {}'.format(
urljoin('{0}://{1}'.format(self.client.protocol, self.client.host),
JOB_FRAGMENT.format(repository=self.repository,
revision=self.revision))))
示例9: test_send_job_collection
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def test_send_job_collection(self, mock_send):
"""Can add a treeherder collections to a TreeherderRequest."""
tjc = TreeherderJobCollection()
for job in self.job_data:
tjc.add( tjc.get_job(job) )
req = TreeherderRequest(
protocol='http',
host='host',
project='project',
oauth_key='key',
oauth_secret='secret',
)
req.post(tjc)
self.assertEqual(mock_send.call_count, 1)
self.assertEqual(
tjc.to_json(),
mock_send.call_args_list[0][1]['data']
)
示例10: post_to_treeherder
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
#.........这里部分代码省略.........
# Attach log files
handlers = [handler for handler in self._logger.handlers
if isinstance(handler, StreamHandler) and
os.path.exists(handler.stream.name)]
for handler in handlers:
path = handler.stream.name
filename = os.path.split(path)[-1]
try:
url = self.upload_to_s3(path)
job_details.append({
'url': url,
'value': filename,
'content_type': 'link',
'title': 'Log:'})
# Add log reference
if type(handler.formatter) is TbplFormatter or \
type(handler.formatter) is LogLevelFilter and \
type(handler.formatter.inner) is TbplFormatter:
job.add_log_reference(filename, url)
except S3UploadError:
job_details.append({
'value': 'Failed to upload %s' % filename,
'content_type': 'text',
'title': 'Error:'})
# Attach script
filename = os.path.split(script)[-1]
try:
url = self.upload_to_s3(script)
job_details.append({
'url': url,
'value': filename,
'content_type': 'link',
'title': 'Script:'})
except S3UploadError:
job_details.append({
'value': 'Failed to upload %s' % filename,
'content_type': 'text',
'title': 'Error:'})
# Attach logcat
filename = '%s.log' % self.runner.device.dm._deviceSerial
path = os.path.join(self.temp_dir, filename)
try:
url = self.upload_to_s3(path)
job_details.append({
'url': url,
'value': filename,
'content_type': 'link',
'title': 'Logcat:'})
except S3UploadError:
job_details.append({
'value': 'Failed to upload %s' % filename,
'content_type': 'text',
'title': 'Error:'})
if job_details:
job.add_artifact('Job Info', 'json', {'job_details': job_details})
# Attach crash dumps
if self.runner.crashed:
crash_dumps = os.listdir(self.crash_dumps_path)
for filename in crash_dumps:
path = os.path.join(self.crash_dumps_path, filename)
try:
url = self.upload_to_s3(path)
job_details.append({
'url': url,
'value': filename,
'content_type': 'link',
'title': 'Crash:'})
except S3UploadError:
job_details.append({
'value': 'Failed to upload %s' % filename,
'content_type': 'text',
'title': 'Error:'})
job_collection.add(job)
# Send the collection to Treeherder
url = urlparse(treeherder_url)
request = TreeherderRequest(
protocol=url.scheme,
host=url.hostname,
project=project,
oauth_key=os.environ.get('TREEHERDER_KEY'),
oauth_secret=os.environ.get('TREEHERDER_SECRET'))
self._logger.info('Sending results to Treeherder: %s' % treeherder_url)
self._logger.debug('Job collection: %s' %
job_collection.to_json())
response = request.post(job_collection)
if response.status == 200:
self._logger.debug('Response: %s' % response.read())
self._logger.info('Results are available to view at: %s' % (
urljoin(treeherder_url, '/ui/#/jobs?repo=%s&revision=%s' % (
project, revision))))
else:
self._logger.error('Failed to send results to Treeherder! '
'Response: %s' % response.read())
示例11: post_to_treeherder
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
#.........这里部分代码省略.........
version.get('device_firmware_date')))),
}, {
'content_type': 'text',
'title': 'Device firmware (incremental):',
'value': version.get('device_firmware_version_incremental')
}, {
'content_type': 'text',
'title': 'Device firmware (release):',
'value': version.get('device_firmware_version_release')
}]
ci_url = os.environ.get('BUILD_URL')
if ci_url:
job_details.append({
'url': ci_url,
'value': ci_url,
'content_type': 'link',
'title': 'CI build:'})
# Attach logcat
adb_device = ADBDevice(self.device_serial)
with tempfile.NamedTemporaryFile(suffix='logcat.txt') as f:
f.writelines(adb_device.get_logcat())
self.logger.debug('Logcat stored in: %s' % f.name)
try:
url = self.upload_to_s3(f.name)
job_details.append({
'url': url,
'value': 'logcat.txt',
'content_type': 'link',
'title': 'Log:'})
except S3UploadError:
job_details.append({
'value': 'Failed to upload logcat.txt',
'content_type': 'text',
'title': 'Error:'})
# Attach log files
handlers = [handler for handler in self.logger.handlers
if isinstance(handler, StreamHandler) and
os.path.exists(handler.stream.name)]
for handler in handlers:
path = handler.stream.name
filename = os.path.split(path)[-1]
try:
url = self.upload_to_s3(path)
job_details.append({
'url': url,
'value': filename,
'content_type': 'link',
'title': 'Log:'})
# Add log reference
if type(handler.formatter) is TbplFormatter or \
type(handler.formatter) is LogLevelFilter and \
type(handler.formatter.inner) is TbplFormatter:
job.add_log_reference(filename, url)
except S3UploadError:
job_details.append({
'value': 'Failed to upload %s' % filename,
'content_type': 'text',
'title': 'Error:'})
# Attach reports
for report in [self.html_output, self.xml_output]:
if report is not None:
filename = os.path.split(report)[-1]
try:
url = self.upload_to_s3(report)
job_details.append({
'url': url,
'value': filename,
'content_type': 'link',
'title': 'Report:'})
except S3UploadError:
job_details.append({
'value': 'Failed to upload %s' % filename,
'content_type': 'text',
'title': 'Error:'})
if job_details:
job.add_artifact('Job Info', 'json', {'job_details': job_details})
job_collection.add(job)
# Send the collection to Treeherder
url = urlparse(self.treeherder_url)
request = TreeherderRequest(
protocol=url.scheme,
host=url.hostname,
project=project,
oauth_key=os.environ.get('TREEHERDER_KEY'),
oauth_secret=os.environ.get('TREEHERDER_SECRET'))
self.logger.debug('Sending results to Treeherder: %s' %
job_collection.to_json())
response = request.post(job_collection)
self.logger.debug('Response: %s' % response.read())
assert response.status == 200, 'Failed to send results!'
self.logger.info('Results are available to view at: %s' % (
urljoin(self.treeherder_url, '/ui/#/jobs?repo=%s&revision=%s' % (
project, revision))))
示例12: post_to_treeherder
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
#.........这里部分代码省略.........
lookup_url = urljoin(
self.treeherder_url,
'api/project/%s/revision-lookup/?revision=%s' % (
project, revision))
self.logger.debug('Getting revision hash from: %s' % lookup_url)
response = requests.get(lookup_url)
response.raise_for_status()
assert response.json(), 'Unable to determine revision hash for %s. ' \
'Perhaps it has not been ingested by ' \
'Treeherder?' % revision
revision_hash = response.json()[revision]['revision_hash']
job.add_revision_hash(revision_hash)
job.add_project(project)
job.add_job_guid(str(uuid.uuid4()))
job.add_product_name('b2g')
job.add_state('completed')
# Determine test result
if self.failed or self.unexpected_successes:
job.add_result('testfailed')
else:
job.add_result('success')
job.add_submit_timestamp(int(self.start_time))
job.add_start_timestamp(int(self.start_time))
job.add_end_timestamp(int(self.end_time))
job.add_machine(socket.gethostname())
job.add_build_info('b2g', 'b2g-device-image', 'x86')
job.add_machine_info('b2g', 'b2g-device-image', 'x86')
# All B2G device builds are currently opt builds
job.add_option_collection({'opt': True})
# TODO: Add log reference
# job.add_log_reference()
date_format = '%d %b %Y %H:%M:%S'
job_details = [{
'content_type': 'link',
'title': 'Gaia revision:',
'url': 'https://github.com/mozilla-b2g/gaia/commit/%s' %
version.get('gaia_changeset'),
'value': version.get('gaia_changeset'),
}, {
'content_type': 'text',
'title': 'Gaia date:',
'value': version.get('gaia_date') and time.strftime(
date_format, time.localtime(int(version.get('gaia_date')))),
}, {
'content_type': 'text',
'title': 'Device identifier:',
'value': version.get('device_id')
}, {
'content_type': 'text',
'title': 'Device firmware (date):',
'value': version.get('device_firmware_date') and time.strftime(
date_format, time.localtime(int(
version.get('device_firmware_date')))),
}, {
'content_type': 'text',
'title': 'Device firmware (incremental):',
'value': version.get('device_firmware_version_incremental')
}, {
'content_type': 'text',
'title': 'Device firmware (release):',
'value': version.get('device_firmware_version_release')
}]
if self.ci_url:
job_details.append({
'url': self.ci_url,
'value': self.ci_url,
'content_type': 'link',
'title': 'CI build:'})
if job_details:
job.add_artifact('Job Info', 'json', {'job_details': job_details})
# TODO: Add XML/HTML reports as artifacts
# job.add_artifact()
job_collection.add(job)
# Send the collection to Treeherder
url = urlparse(self.treeherder_url)
request = TreeherderRequest(
protocol=url.scheme,
host=url.hostname,
project=project,
oauth_key=self.treeherder_key,
oauth_secret=self.treeherder_secret)
self.logger.debug('Sending results to Treeherder: %s' %
job_collection.to_json())
response = request.post(job_collection)
self.logger.debug('Response: %s' % response.read())
assert response.status == 200, 'Failed to send results!'
self.logger.info('Results are available to view at: %s' % (
urljoin(self.treeherder_url, '/ui/#/jobs?repo=%s&revision=%s' % (
project, revision))))
示例13: post_to_treeherder
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
#.........这里部分代码省略.........
"value": version.get("gaia_changeset"),
},
{
"content_type": "text",
"title": "Gaia date:",
"value": version.get("gaia_date")
and time.strftime(date_format, time.localtime(int(version.get("gaia_date")))),
},
{"content_type": "text", "title": "Device identifier:", "value": version.get("device_id")},
{
"content_type": "text",
"title": "Device firmware (date):",
"value": version.get("device_firmware_date")
and time.strftime(date_format, time.localtime(int(version.get("device_firmware_date")))),
},
{
"content_type": "text",
"title": "Device firmware (incremental):",
"value": version.get("device_firmware_version_incremental"),
},
{
"content_type": "text",
"title": "Device firmware (release):",
"value": version.get("device_firmware_version_release"),
},
]
ci_url = os.environ.get("BUILD_URL")
if ci_url:
job_details.append({"url": ci_url, "value": ci_url, "content_type": "link", "title": "CI build:"})
# Attach logcat
adb_device = ADBDevice(self.device_serial)
with tempfile.NamedTemporaryFile(suffix="logcat.txt") as f:
f.writelines(adb_device.get_logcat())
self.logger.debug("Logcat stored in: %s" % f.name)
try:
url = self.upload_to_s3(f.name)
job_details.append({"url": url, "value": "logcat.txt", "content_type": "link", "title": "Log:"})
except S3UploadError:
job_details.append({"value": "Failed to upload logcat.txt", "content_type": "text", "title": "Error:"})
# Attach log files
handlers = [
handler
for handler in self.logger.handlers
if isinstance(handler, StreamHandler) and os.path.exists(handler.stream.name)
]
for handler in handlers:
path = handler.stream.name
filename = os.path.split(path)[-1]
try:
url = self.upload_to_s3(path)
job_details.append({"url": url, "value": filename, "content_type": "link", "title": "Log:"})
# Add log reference
if (
type(handler.formatter) is TbplFormatter
or type(handler.formatter) is LogLevelFilter
and type(handler.formatter.inner) is TbplFormatter
):
job.add_log_reference(filename, url)
except S3UploadError:
job_details.append(
{"value": "Failed to upload %s" % filename, "content_type": "text", "title": "Error:"}
)
# Attach reports
for report in [self.html_output]:
if report is not None:
filename = os.path.split(report)[-1]
try:
url = self.upload_to_s3(report)
job_details.append({"url": url, "value": filename, "content_type": "link", "title": "Report:"})
except S3UploadError:
job_details.append(
{"value": "Failed to upload %s" % filename, "content_type": "text", "title": "Error:"}
)
if job_details:
job.add_artifact("Job Info", "json", {"job_details": job_details})
job_collection.add(job)
# Send the collection to Treeherder
url = urlparse(self.treeherder_url)
request = TreeherderRequest(
protocol=url.scheme,
host=url.hostname,
project=project,
oauth_key=os.environ.get("TREEHERDER_KEY"),
oauth_secret=os.environ.get("TREEHERDER_SECRET"),
)
self.logger.debug("Sending results to Treeherder: %s" % job_collection.to_json())
response = request.post(job_collection)
self.logger.debug("Response: %s" % response.read())
assert response.status == 200, "Failed to send results!"
self.logger.info(
"Results are available to view at: %s"
% (urljoin(self.treeherder_url, "/ui/#/jobs?repo=%s&revision=%s" % (project, revision)))
)
示例14: submit_pending
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
def submit_pending(self, machine, build_url, project, revision_hash, tests=[]):
"""Submit tests pending notifications to Treeherder
:param machine: machine id
:param build_url: url to build being tested.
:param project: repository of build.
:param revision_hash: Treeherder revision hash of build.
:param tests: Lists of tests to be reported.
"""
logger.debug('AutophoneTreeherder.submit_pending: %s' % tests)
if not self.url or not revision_hash:
logger.debug('AutophoneTreeherder.submit_pending: no url/revision hash')
return
tjc = TreeherderJobCollection(job_type='update')
for t in tests:
t.message = None
t.submit_timestamp = timestamp_now()
t.job_details = []
logger.info('creating Treeherder job %s for %s %s, '
'revision_hash: %s' % (
t.job_guid, t.name, project,
revision_hash))
logger.debug('AutophoneTreeherder.submit_pending: '
'test config_file=%s, config sections=%s' % (
t.config_file, t.cfg.sections()))
tj = tjc.get_job()
tj.add_revision_hash(revision_hash)
tj.add_project(project)
tj.add_job_guid(t.job_guid)
tj.add_job_name(t.job_name)
tj.add_job_symbol(t.job_symbol)
tj.add_group_name(t.group_name)
tj.add_group_symbol(t.group_symbol)
tj.add_product_name('fennec')
tj.add_state(TestState.PENDING)
tj.add_submit_timestamp(t.submit_timestamp)
# XXX need to send these until Bug 1066346 fixed.
tj.add_start_timestamp(t.submit_timestamp)
tj.add_end_timestamp(t.submit_timestamp)
#
tj.add_machine(machine)
tj.add_build_url(build_url)
tj.add_build_info('android', t.phone.platform, t.phone.architecture)
tj.add_machine_info('android',t.phone.platform, t.phone.architecture)
tj.add_option_collection({'opt': True})
# Fake the buildername from buildbot...
tj.add_artifact('buildapi', 'json', {
'buildername': t.get_buildername(project)})
# Create a 'privatebuild' artifact for storing information
# regarding the build.
tj.add_artifact('privatebuild', 'json', {
'build_url': build_url,
'config_file': t.config_file,
'chunk': t.chunk})
tjc.add(tj)
logger.debug('AutophoneTreeherder.submit_pending: tjc: %s' % (
tjc.to_json()))
self.post_request(machine, project, tjc)
示例15: submit_complete
# 需要导入模块: from thclient import TreeherderJobCollection [as 别名]
# 或者: from thclient.TreeherderJobCollection import to_json [as 别名]
#.........这里部分代码省略.........
logfile = os.path.basename(t._log)
try:
url = self.worker.s3_bucket.upload(t._log, "%s/%s" % (
key_prefix, logfile))
t.job_details.append({
'url': url,
'value': logfile,
'content_type': 'link',
'title': 'artifact uploaded:'})
# don't add log reference since we don't
# use treeherder's log parsing.
#tj.add_log_reference(logfile, url)
except S3Error:
self.worker.loggerdeco.exception('Error uploading log %s' % logfile)
t.job_details.append({
'value': 'Failed to upload log %s' % logfile,
'content_type': 'text',
'title': 'Error:'})
# Upload directory containing ANRs, tombstones and other items
# to be uploaded.
if t.upload_dir:
for f in glob.glob(os.path.join(t.upload_dir, '*')):
try:
lname = os.path.basename(f)
fname = '%s-%s' % (log_identifier, lname)
url = self.worker.s3_bucket.upload(f, "%s/%s" % (
key_prefix, fname))
t.job_details.append({
'url': url,
'value': lname,
'content_type': 'link',
'title': 'artifact uploaded:'})
except S3Error:
self.worker.loggerdeco.exception('Error uploading artifact %s' % fname)
t.job_details.append({
'value': 'Failed to upload artifact %s' % fname,
'content_type': 'text',
'title': 'Error:'})
# Since we are submitting results to Treeherder, we flush
# the worker's log before uploading the log to
# Treeherder. When we upload the log, it will contain
# results for a single test run with possibly an error
# message from the previous test if the previous log
# upload failed.
self.worker.filehandler.flush()
logfile = self.worker.logfile
fname = 'autophone-%s.log' % log_identifier
lname = 'Autophone Log'
try:
url = self.worker.s3_bucket.upload(
logfile, "%s/%s" % (key_prefix, fname))
t.job_details.append({
'url': url,
'value': lname,
'content_type': 'link',
'title': 'artifact uploaded:'})
except S3Error:
self.worker.loggerdeco.exception('Error uploading %s' % fname)
t.job_details.append({
'value': 'Failed to upload Autophone log',
'content_type': 'text',
'title': 'Error:'})
tj.add_revision_hash(self.worker.build.revision_hash)
tj.add_project(self.worker.build.tree)
tj.add_job_guid(t.job_guid)
tj.add_job_name(t.job_name)
tj.add_job_symbol(t.job_symbol)
tj.add_group_name(t.group_name)
tj.add_group_symbol(t.group_symbol)
tj.add_product_name('fennec')
tj.add_state(TestState.COMPLETED)
tj.add_result(test_status)
tj.add_submit_timestamp(t.submit_timestamp)
tj.add_start_timestamp(t.start_timestamp)
tj.add_end_timestamp(t.end_timestamp)
tj.add_machine(t.phone.id)
tj.add_build_url(self.worker.build.url)
tj.add_build_info('android', t.phone.platform, t.phone.architecture)
tj.add_machine_info('android',t.phone.platform, t.phone.architecture)
tj.add_option_collection({'opt': True})
tj.add_artifact('Job Info', 'json', {'job_details': t.job_details})
if bug_suggestions:
tj.add_artifact('Bug suggestions', 'json', bug_suggestions)
tj.add_artifact('buildapi', 'json', {'buildername': t.buildername})
tjc.add(tj)
message = '%s %s %s TestResult: %s' % (self.worker.build.tree,
self.worker.build.id,
t.name, test_status)
if t.message:
message += ', %s' % t.message
self.worker.loggerdeco.info(message)
self.worker.loggerdeco.debug('AutophoneTreeherder.submit_completed: tjc: %s' %
tjc.to_json())
self.post_request(tjc)