You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
5.2 KiB

# Copyright (C) 2020 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
""" Utility functions for logstorage. """
from __future__ import print_function
import logging
import constants
# pylint: disable=import-error
try:
import httplib2
from googleapiclient.discovery import build
except ImportError as e:
logging.debug('Import error due to: %s', e)
class BuildClient:
"""Build api helper class."""
def __init__(self, creds):
"""Init BuildClient class.
Args:
creds: An oauth2client.OAuth2Credentials instance.
"""
http_auth = creds.authorize(httplib2.Http())
self.client = build(
serviceName=constants.STORAGE_SERVICE_NAME,
version=constants.STORAGE_API_VERSION,
cache_discovery=False,
http=http_auth)
def list_branch(self):
"""List all branch."""
return self.client.branch().list(maxResults=10000).execute()
def list_target(self, branch):
"""List all target in the branch."""
return self.client.target().list(branch=branch,
maxResults=10000).execute()
def insert_local_build(self, external_id, target, branch):
"""Insert a build record.
Args:
external_id: unique id of build record.
target: build target.
branch: build branch.
Returns:
An build record object.
"""
body = {
"buildId": "",
"externalId": external_id,
"branch": branch,
"target": {
"name": target,
"target": target
},
"buildAttemptStatus": "complete",
}
return self.client.build().insert(buildType="local",
body=body).execute()
def insert_build_attempts(self, build_record):
"""Insert a build attempt record.
Args:
build_record: build record.
Returns:
An build attempt object.
"""
build_attempt = {
"id": 0,
"status": "complete",
"successful": True
}
return self.client.buildattempt().insert(
buildId=build_record['buildId'],
target=build_record['target']['name'],
body=build_attempt).execute()
def insert_invocation(self, build_record):
"""Insert a build invocation record.
Args:
build_record: build record.
Returns:
A build invocation object.
"""
invocation = {
"primaryBuild": {
"buildId": build_record['buildId'],
"buildTarget": build_record['target']['name'],
"branch": build_record['branch'],
},
"schedulerState": "running"
}
return self.client.invocation().insert(body=invocation).execute()
def update_invocation(self, invocation):
"""Insert a build invocation record.
Args:
invocation: invocation record.
Returns:
A invocation object.
"""
return self.client.invocation().update(
resourceId=invocation['invocationId'],
body=invocation).execute()
def insert_work_unit(self, invocation_record):
"""Insert a workunit record.
Args:
invocation_record: invocation record.
Returns:
the workunit object.
"""
workunit = {
'invocationId': invocation_record['invocationId']
}
return self.client.workunit().insert(body=workunit).execute()