def get_running_instances(identity): def get_instances(): http = get_gapi_authorized_http(identity) google_compute_service = apiclient.discovery.build('compute', 'v1', http=http) instances = [] for project in get_identity_projects_from_gcloud_api(identity): zones = google_compute_service.zones().list( project=project['code']).execute() for zone in zones['items']: try: compute_instances_infos = google_compute_service.instances( ).list(project=project['code'], zone=zone['name']).execute() except apiclient.errors.HttpError as err: continue if 'items' in compute_instances_infos: for instance in compute_instances_infos['items']: if instance['status'] == 'RUNNING': instances.append(instance) return instances try: instances = get_instances() except oauth2client.client.HttpAccessTokenRefreshError: refresh_credentials(identity) instances = get_instances() return instances
def download_billing_file(identity, billing_file): def download_file(): http = get_gapi_authorized_http(identity) google_storage_service = apiclient.discovery.build('storage', 'v1', http=http) response, billing_data = http.request(billing_file['mediaLink']) return response, billing_data try: response, billing_data = download_file() except oauth2client.client.HttpAccessTokenRefreshError: refresh_credentials(identity) response, billing_data = download_file() return response, billing_data
def get_billing_files(identity, billing_bucket): def get_files(): http = get_gapi_authorized_http(identity) google_storage_service = apiclient.discovery.build('storage', 'v1', http=http) files = google_storage_service.objects().list( bucket=billing_bucket['name']).execute() return files try: files = get_files() except oauth2client.client.HttpAccessTokenRefreshError: refresh_credentials(identity) files = get_files() if 'items' in files: raw_files = [f for f in files['items'] if f['name'].endswith('.json')] raw_files = reduce(_purge_outdated_files, raw_files, []) for raw_file in raw_files: yield raw_file
def get_identity_projects_from_gcloud_api(identity): def get_projects(): http = get_gapi_authorized_http(identity) google_projects_service = apiclient.discovery.build( 'cloudresourcemanager', 'v1', http=http) # May raise oauth2client.client.HttpAccessTokenRefreshError projects = google_projects_service.projects().list().execute() return projects try: projects = get_projects() except oauth2client.client.HttpAccessTokenRefreshError: refresh_credentials(identity) projects = get_projects() return [ dict(id_identity=identity.id, code=project['projectId'], name=project['name'], number=int(project['projectNumber'])) for project in filter(lambda p: p['lifecycleState'] == 'ACTIVE', projects['projects']) ]
def get_project_buckets_from_gcloud_api(identity, project): def get_buckets(): http = get_gapi_authorized_http(identity) google_storage_service = apiclient.discovery.build('storage', 'v1', http=http) buckets = google_storage_service.buckets().list( project=project['number']).execute() return buckets try: buckets = get_buckets() except oauth2client.client.HttpAccessTokenRefreshError: refresh_credentials(identity) buckets = get_buckets() if not 'items' in buckets: return [] buckets = [dict( id=None, name=b['name'], ) for b in buckets['items']] return buckets
def retrieve_timeseries(identity, project, metric_name, start, stop, next_page_token=None): def get_timeseries(): http = get_gapi_authorized_http(identity) google_monitoring_service = apiclient.discovery.build( 'cloudmonitoring', 'v2beta2', http=http) res = google_monitoring_service.timeseries().list( project=project['code'], metric=metric_name, oldest=start, youngest=stop, pageToken=next_page_token).execute() return res try: timeseries = get_timeseries() except oauth2client.client.HttpAccessTokenRefreshError: refresh_credentials(identity) timeseries = get_timeseries() return timeseries