本文整理汇总了Python中thclient.TreeherderRequest.post方法的典型用法代码示例。如果您正苦于以下问题:Python TreeherderRequest.post方法的具体用法?Python TreeherderRequest.post怎么用?Python TreeherderRequest.post使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类thclient.TreeherderRequest
的用法示例。
在下文中一共展示了TreeherderRequest.post方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: post_log_artifacts
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def post_log_artifacts(project,
job_guid,
job_log_url,
retry_task,
extract_artifacts_cb,
check_errors=False):
"""Post a list of artifacts to a job."""
def _retry(e):
# Initially retry after 1 minute, then for each subsequent retry
# lengthen the retry time by another minute.
retry_task.retry(exc=e, countdown=(1 + retry_task.request.retries) * 60)
# .retry() raises a RetryTaskError exception,
# so nothing after this function will be executed
log_description = "%s %s (%s)" % (project, job_guid, job_log_url['url'])
logger.debug("Downloading/parsing log for %s", log_description)
credentials = OAuthCredentials.get_credentials(project)
req = TreeherderRequest(
protocol=settings.TREEHERDER_REQUEST_PROTOCOL,
host=settings.TREEHERDER_REQUEST_HOST,
project=project,
oauth_key=credentials.get('consumer_key', None),
oauth_secret=credentials.get('consumer_secret', None),
)
try:
artifact_list = extract_artifacts_cb(job_log_url['url'],
job_guid, check_errors)
except Exception as e:
update_parse_status(req, job_log_url, 'failed')
if isinstance(e, urllib2.HTTPError) and e.code == 404:
logger.debug("Log not found for %s", log_description)
return
logger.error("Failed to download/parse log for %s: %s", log_description, e)
_retry(e)
# store the artifacts generated
tac = TreeherderArtifactCollection()
for artifact in artifact_list:
ta = tac.get_artifact({
"job_guid": artifact[0],
"name": artifact[1],
"type": artifact[2],
"blob": artifact[3]
})
tac.add(ta)
try:
req.post(tac)
update_parse_status(req, job_log_url, 'parsed')
logger.debug("Finished posting artifact for %s %s", project, job_guid)
except Exception as e:
logger.error("Failed to upload parsed artifact for %s: %s", log_description, e)
_retry(e)
示例2: post_request
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def post_request(self, job_collection):
self.worker.loggerdeco.debug('AutophoneTreeherder.post_request: %s' % job_collection.__dict__)
if not self.url or not self.worker.build.revision_hash:
self.worker.loggerdeco.debug('AutophoneTreeherder.post_request: no url/revision hash')
return
req = TreeherderRequest(
protocol=self.protocol,
host=self.server,
project=self.worker.build.tree,
oauth_key=self.credentials[self.worker.build.tree]['consumer_key'],
oauth_secret=self.credentials[self.worker.build.tree]['consumer_secret']
)
try:
for attempt in range(1, self.retries+1):
response = req.post(job_collection)
self.worker.loggerdeco.debug('AutophoneTreeherder.post_request attempt %d: '
'body: %s headers: %s msg: %s status: %s '
'reason: %s' % (
attempt,
response.read(),
response.getheaders(),
response.msg,
response.status,
response.reason))
if response.reason == 'OK':
break
msg = ('Attempt %d to post result to Treeherder failed.\n\n'
'Response:\n'
'body: %s\n'
'headers: %s\n'
'msg: %s\n'
'status: %s\n'
'reason: %s\n' % (
attempt,
response.read(), response.getheaders(),
response.msg, response.status,
response.reason))
self.worker.loggerdeco.error(msg)
self.worker.mailer.send('Attempt %d for Phone %s failed to post to Treeherder' %
(attempt, self.worker.phone.id), msg)
time.sleep(self.retry_wait)
except Exception, e:
self.worker.loggerdeco.exception('Error submitting request to Treeherder')
self.worker.mailer.send('Error submitting request to Treeherder',
'Phone: %s\n'
'TreeherderClientError: %s\n'
'TreeherderJobCollection %s\n' % (
self.worker.phone.id,
e,
job_collection.to_json()))
示例3: test_send_without_oauth
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def test_send_without_oauth(
self, mock_HTTPConnection, mock_time, mock_generate_nonce):
"""Can send data to the server."""
mock_time.return_value = 1342229050
mock_generate_nonce.return_value = "46810593"
host = 'host'
req = TreeherderRequest(
protocol='http',
host=host,
project='project',
oauth_key=None,
oauth_secret=None,
)
mock_conn = mock_HTTPConnection.return_value
mock_request = mock_conn.request
mock_response = mock_conn.getresponse.return_value
tjc = TreeherderJobCollection()
for job in self.job_data:
tjc.add( tjc.get_job(job) )
break
response = req.post(tjc)
self.assertEqual(mock_HTTPConnection.call_count, 1)
self.assertEqual(mock_HTTPConnection.call_args[0][0], host)
self.assertEqual(mock_response, response)
self.assertEqual(mock_request.call_count, 1)
uri = req.get_uri(tjc)
method, path, data, header = mock_request.call_args[0]
self.assertEqual(method, "POST")
deserialized_data = json.loads(data)
self.assertEqual(
deserialized_data,
tjc.get_collection_data()
)
self.assertEqual(
header['Content-Type'],
'application/json',
)
示例4: test_send_artifact_collection
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def test_send_artifact_collection(self, mock_send):
"""Can add a artifact collections to a TreeherderRequest."""
tac = TreeherderArtifactCollection()
for artifact in self.artifact_data:
tac.add(tac.get_artifact(artifact))
req = TreeherderRequest(
protocol='http',
host='host',
project='project',
oauth_key='key',
oauth_secret='secret',
)
req.post(tac)
self.assertEqual(mock_send.call_count, 1)
self.assertEqual(
tac.to_json(),
mock_send.call_args_list[0][1]["data"]
)
示例5: test_send_result_collection
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def test_send_result_collection(self, mock_send):
"""Can add a treeherder collections to a TreeherderRequest."""
trc = TreeherderResultSetCollection()
for resultset in self.resultset_data:
trc.add( trc.get_resultset(resultset) )
req = TreeherderRequest(
protocol='http',
host='host',
project='project',
oauth_key='key',
oauth_secret='secret',
)
req.post(trc)
self.assertEqual(mock_send.call_count, 1)
self.assertEqual(
trc.to_json(),
mock_send.call_args_list[0][1]['data']
)
示例6: test_send_job_collection
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [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']
)
示例7: load
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def load(self, th_collections):
for project in th_collections:
credentials = OAuthCredentials.get_credentials(project)
th_request = TreeherderRequest(
protocol=settings.TREEHERDER_REQUEST_PROTOCOL,
host=settings.TREEHERDER_REQUEST_HOST,
project=project,
oauth_key=credentials.get('consumer_key', None),
oauth_secret=credentials.get('consumer_secret', None)
)
response = th_request.post(th_collections[project])
if not response or response.status != 200:
message = response.read()
logger.error("collection loading failed: {0}".format(message))
示例8: load
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def load(self, th_collections):
for project in th_collections:
credentials = OAuthCredentials.get_credentials(project)
th_request = TreeherderRequest(
protocol=settings.TREEHERDER_REQUEST_PROTOCOL,
host=settings.TREEHERDER_REQUEST_HOST,
project=project,
oauth_key=credentials.get('consumer_key', None),
oauth_secret=credentials.get('consumer_secret', None)
)
logger.info(
"collection loading request: {0}".format(
th_request.get_uri(th_collections[project].endpoint_base)))
response = th_request.post(th_collections[project])
if not response or response.status != 200:
message = response.read()
logger.error('[{0}]Error posting data to {1} : {2}'.format(
project, th_collections[project].endpoint_base, message))
示例9: post_to_treeherder
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def post_to_treeherder(self, tests):
version = mozversion.get_version(
binary=self.bin, sources=self.sources, dm_type="adb", device_serial=self.device_serial
)
job_collection = TreeherderJobCollection()
job = job_collection.get_job()
device = version.get("device_id")
device_firmware_version_release = version.get("device_firmware_version_release")
if not device:
self.logger.error("Submitting to Treeherder is currently limited " "to devices.")
return
try:
group = DEVICE_GROUP_MAP[device][device_firmware_version_release]
job.add_group_name(group["name"])
job.add_group_symbol(group["symbol"])
job.add_job_name("Gaia Python Integration Test (%s)" % group["symbol"])
job.add_job_symbol("Gip")
except KeyError:
self.logger.error(
"Unknown device id: %s or device firmware "
"version: %s. Unable to determine Treeherder "
"group. Supported devices: %s"
% (
device,
device_firmware_version_release,
["%s: %s" % (k, [fw for fw in v.keys()]) for k, v in DEVICE_GROUP_MAP.iteritems()],
)
)
return
# Determine revision hash from application revision
revision = version["application_changeset"]
project = version["application_repository"].split("/")[-1]
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})
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"),
},
]
#.........这里部分代码省略.........
示例10: parse_log
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def parse_log(project, job_log_url, job_guid, check_errors=False):
"""
Call ArtifactBuilderCollection on the given job.
"""
# if parse_status is not available, consider it pending
parse_status = job_log_url.get("parse_status", "pending")
# don't parse a log if it's already been parsed
if parse_status == "parsed":
return
try:
credentials = OAuthCredentials.get_credentials(project)
req = TreeherderRequest(
protocol=settings.TREEHERDER_REQUEST_PROTOCOL,
host=settings.TREEHERDER_REQUEST_HOST,
project=project,
oauth_key=credentials.get('consumer_key', None),
oauth_secret=credentials.get('consumer_secret', None),
)
update_endpoint = 'job-log-url/{0}/update_parse_status'.format(
job_log_url['id']
)
artifact_list = extract_log_artifacts(job_log_url['url'],
job_guid, check_errors)
# store the artifacts generated
tac = TreeherderArtifactCollection()
for artifact in artifact_list:
ta = tac.get_artifact({
"job_guid": artifact[0],
"name": artifact[1],
"type": artifact[2],
"blob": artifact[3]
})
tac.add(ta)
req.post(tac)
# send an update to job_log_url
# the job_log_url status changes from pending to parsed
current_timestamp = time.time()
req.send(
update_endpoint,
method='POST',
data={
'parse_status': 'parsed',
'parse_timestamp': current_timestamp
}
)
except Exception, e:
# send an update to job_log_url
#the job_log_url status changes from pending/running to failed
current_timestamp = time.time()
req.send(
update_endpoint,
method='POST',
data={
'parse_status': 'failed',
'parse_timestamp': current_timestamp
}
)
# for every retry, set the countdown to 10 minutes
# .retry() raises a RetryTaskError exception,
# so nothing below this line will be executed.
parse_log.retry(exc=e, countdown=10*60)
示例11: main
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def main():
submit_time, start_time, end_time = argv[1:4]
config = get_config()
app_revision, app_repository = get_app_information(config)
files = get_files(config)
build_version = get_build_version(os.path.basename(files[0]))
push_time = int(os.stat(files[0]).st_ctime)
results = steepleparse.parse(config['system']['logfile'])
result_set_hash = create_revision_hash()
trsc = TreeherderResultSetCollection()
trs = trsc.get_resultset()
trs.add_revision_hash(result_set_hash)
trs.add_author('Firefox Nightly')
trs.add_push_timestamp(push_time)
tr = trs.get_revision()
tr.add_revision(app_revision)
tr.add_author('Firefox Nightly')
tr.add_comment(build_version)
tr.add_files([os.path.basename(f) for f in files])
tr.add_repository(app_repository)
trs.add_revision(tr)
trsc.add(trs)
tjc = TreeherderJobCollection()
tj = tjc.get_job()
tj.add_revision_hash(result_set_hash)
tj.add_project(config['repo']['project'])
tj.add_job_guid(str(uuid.uuid4()))
tj.add_group_name('WebRTC QA Tests')
tj.add_group_symbol('WebRTC')
tj.add_job_name('Endurance')
tj.add_job_symbol('end')
tj.add_build_info('linux', 'linux64', 'x86_64')
tj.add_machine_info('linux', 'linux64', 'x86_64')
tj.add_description('WebRTC Sunny Day')
tj.add_option_collection({'opt': True}) # must not be {}!
tj.add_reason('testing')
tj.add_who('Mozilla Platform QA')
tj.add_submit_timestamp(submit_time)
tj.add_start_timestamp(start_time)
tj.add_end_timestamp(end_time)
tj.add_state('completed')
tj.add_machine(socket.gethostname())
result_string = get_result_string(results)
tj.add_result(result_string)
if result_string != 'busted':
summary = get_result_summary(results)
tj.add_artifact('Job Info', 'json', summary)
tj.add_artifact('Results', 'json', results)
tjc.add(tj)
print 'trsc = ' + json.dumps(json.loads(trsc.to_json()), sort_keys=True,
indent=4, separators=(',', ': '))
print 'tjc = ' + json.dumps(json.loads(tjc.to_json()), sort_keys=True,
indent=4, separators=(',', ': '))
req = TreeherderRequest(
protocol='http',
host=config['repo']['host'],
project=config['repo']['project'],
oauth_key=config['credentials']['key'],
oauth_secret=config['credentials']['secret']
)
req.post(trsc)
req.post(tjc)
示例12: post_log_artifacts
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def post_log_artifacts(project,
job_guid,
job_log_url,
retry_task,
extract_artifacts_cb,
check_errors=False):
"""Post a list of artifacts to a job."""
def _retry(e):
# Initially retry after 1 minute, then for each subsequent retry
# lengthen the retry time by another minute.
retry_task.retry(exc=e, countdown=(1 + retry_task.request.retries) * 60)
# .retry() raises a RetryTaskError exception,
# so nothing after this function will be executed
credentials = OAuthCredentials.get_credentials(project)
update_endpoint = 'job-log-url/{0}/update_parse_status'.format(
job_log_url['id']
)
log_description = "%s %s (%s)" % (project, job_guid, job_log_url['url'])
logger.debug("Downloading/parsing log for %s", log_description)
req = TreeherderRequest(
protocol=settings.TREEHERDER_REQUEST_PROTOCOL,
host=settings.TREEHERDER_REQUEST_HOST,
project=project,
oauth_key=credentials.get('consumer_key', None),
oauth_secret=credentials.get('consumer_secret', None),
)
try:
artifact_list = extract_artifacts_cb(job_log_url['url'],
job_guid, check_errors)
except Exception as e:
logger.error("Failed to download/parse log for %s: %s", log_description, e)
current_timestamp = time.time()
req.send(
update_endpoint,
method='POST',
data={
'parse_status': 'failed',
'parse_timestamp': current_timestamp
}
)
_retry(e)
# store the artifacts generated
tac = TreeherderArtifactCollection()
for artifact in artifact_list:
ta = tac.get_artifact({
"job_guid": artifact[0],
"name": artifact[1],
"type": artifact[2],
"blob": artifact[3]
})
tac.add(ta)
try:
req.post(tac)
# send an update to job_log_url
# the job_log_url status changes from pending to parsed
current_timestamp = time.time()
req.send(
update_endpoint,
method='POST',
data={
'parse_status': 'parsed',
'parse_timestamp': current_timestamp
}
)
logger.debug("Finished posting artifact for %s %s", project, job_guid)
except Exception as e:
logger.error("Failed to upload parsed artifact for %s: %s", log_description, e)
_retry(e)
示例13: post_to_treeherder
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def post_to_treeherder(self, script, treeherder_url):
job_collection = TreeherderJobCollection()
job = job_collection.get_job()
job.add_group_name(self.device_properties['name'])
job.add_group_symbol(self.device_properties['symbol'])
job.add_job_name('Orangutan Monkey Script (%s)' %
self.device_properties.get('symbol'))
job.add_job_symbol('Om')
# Determine revision hash from application revision
revision = self.version['application_changeset']
project = self.version['application_repository'].split('/')[-1]
lookup_url = urljoin(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')
job.add_result(self.runner.crashed and 'testfailed' or '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')
if self.is_debug:
job.add_option_collection({'debug': True})
else:
job.add_option_collection({'opt': True})
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' %
self.version.get('gaia_changeset'),
'value': self.version.get('gaia_changeset'),
}, {
'content_type': 'text',
'title': 'Gaia date:',
'value': self.version.get('gaia_date') and time.strftime(
date_format, time.localtime(int(
self.version.get('gaia_date')))),
}, {
'content_type': 'text',
'title': 'Device identifier:',
'value': self.version.get('device_id')
}, {
'content_type': 'text',
'title': 'Device firmware (date):',
'value': self.version.get('device_firmware_date') and
time.strftime(date_format, time.localtime(int(
self.version.get('device_firmware_date')))),
}, {
'content_type': 'text',
'title': 'Device firmware (incremental):',
'value': self.version.get('device_firmware_version_incremental')
}, {
'content_type': 'text',
'title': 'Device firmware (release):',
'value': self.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 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 \
#.........这里部分代码省略.........
示例14: main
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
#.........这里部分代码省略.........
tr = trs.get_revision()
# self.required_properties = {
# 'revision':{ 'len':50, 'cb':self.validate_existence },
# 'repository':{ 'cb':self.validate_existence },
# 'files':{ 'type':list, 'cb':self.validate_existence },
# }
tr.add_revision(create_revision_hash()[:12])
tr.add_author('Firefox Nightly')
tr.add_comment('firefox-33.0a1.en-US')
tr.add_files(['firefox-33.0a1.en-US.linux-i686.tar.bz2',
'firefox-33.0a1.en-US.linux-x86_64.tests.zip'])
tr.add_repository(
'ftp://ftp.mozilla.org/pub/firefox/nightly/latest-mozilla-central/')
trs.add_revision(tr)
trsc.add(trs)
tjc = TreeherderJobCollection()
tj = tjc.get_job()
# self.required_properties = {
# 'revision_hash':{ 'len':50, 'cb':self.validate_existence },
# 'project':{ 'cb':self.validate_existence },
# 'job':{ 'type':dict, 'cb':self.validate_existence },
# 'job.job_guid':{ 'len':50, 'cb':self.validate_existence }
# }
tj.add_revision_hash(result_revision_hash)
tj.add_project('qa-try')
tj.add_job_guid(str(uuid.uuid4()))
tj.add_build_info('linux', 'linux64', 'x86_64')
tj.add_description('WebRTC Sunny Day')
tj.add_machine_info('linux', 'linux64', 'x86_64')
tj.add_end_timestamp(int(time.time()) - 5)
tj.add_start_timestamp(int(time.time()) - 3600 * 3 - 5)
tj.add_submit_timestamp(int(time.time()) - 3600 * 3 - 10)
tj.add_state('completed')
tj.add_machine('webrtc-server')
tj.add_option_collection({'opt': True}) # must not be {}!
tj.add_reason('testing')
tj.add_result('success') # must be success/testfailed/busted
tj.add_who('[email protected]')
tj.add_group_name('WebRTC QA Tests')
tj.add_group_symbol('WebRTC')
tj.add_job_symbol('end')
tj.add_job_name('Endurance')
tj.add_artifact('Job Info', 'json', {
"job_details": [
{
'title': 'Iterations:',
'value': '10782',
'content_type': 'text'
},
{
'title': 'Errors:',
'value': '5',
'content_type': 'text'
},
{
'title': 'Longest Pass Duration:',
'value': '2:58:36.5',
'content_type': 'text'
}
],
})
tjc.add(tj)
key, secret = get_oauth_creds()
project, host = get_repo_details()
req = TreeherderRequest(
protocol='http',
host=host,
project=project,
oauth_key=key,
oauth_secret=secret
)
print 'trsc = ' + json.dumps(json.loads(trsc.to_json()), sort_keys=True,
indent=4, separators=(',', ': '))
print 'tjc = ' + json.dumps(json.loads(tjc.to_json()), sort_keys=True,
indent=4, separators=(',', ': '))
# print 'req.oauth_key = ' + req.oauth_key
# print 'req.oauth_secret = ' + req.oauth_secret
# uri = req.get_uri(trsc)
# print 'req.get_uri() = ' + uri
# print 'req.oauth_client.get_signed_uri() = ' +
# req.oauth_client.get_signed_uri(trsc.to_json(), uri)
req.post(trsc)
req.post(tjc)
示例15: post_to_treeherder
# 需要导入模块: from thclient import TreeherderRequest [as 别名]
# 或者: from thclient.TreeherderRequest import post [as 别名]
def post_to_treeherder(self, tests):
self.logger.info('\nTREEHERDER\n----------')
version = mozversion.get_version(
binary=self.bin, sources=self.sources,
dm_type='adb', device_serial=self.device_serial)
job_collection = TreeherderJobCollection()
job = job_collection.get_job()
device = version.get('device_id')
if not device:
self.logger.error('Submitting to Treeherder is currently limited '
'to devices.')
return
try:
group = DEVICE_GROUP_MAP[device]
job.add_group_name(group['name'])
job.add_group_symbol(group['symbol'])
job.add_job_name('Gaia Python Integration Test (%s)' % device)
job.add_job_symbol('Gip')
except KeyError:
self.logger.error('Unknown device id: %s, unable to determine '
'Treeherder group. Supported device ids: %s' % (
device, DEVICE_GROUP_MAP.keys()))
return
# Determine revision hash from application revision
revision = version['application_changeset']
project = version['application_repository'].split('/')[-1]
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:
#.........这里部分代码省略.........