Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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'])
    ]
Example #5
0
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
Example #6
0
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