· 6 years ago · Dec 16, 2019, 10:58 PM
1#! /usr/bin/env python
2
3import os
4import logging
5import sys
6
7import google.auth
8from googleapiclient.discovery import build
9
10logger = logging.getLogger(__name__)
11
12
13def get_api_key():
14 if 'API_KEY_PATH' in os.environ:
15 with open(os.path.expanduser(os.environ['API_KEY_PATH']), 'r') as input_file:
16 contents = input_file.read()
17 return contents.strip()
18 logger.critical('No API Key file defined in the environment. Set environment variable: API_KEY_PATH')
19 sys.exit(1)
20
21
22def get_client_secrets_path():
23 if not 'CLIENT_SECRETS_FILE' in os.environ:
24 logger.critical('Missing client secrets file.')
25 logger.critical('Set environment variable: CLIENT_SECRETS_FILE')
26 sys.exit(1)
27 return os.environ['CLIENT_SECRETS_FILE']
28
29
30def get_credentials():
31
32 storage = file_storage.Storage(filename="./oauth-creds")
33
34 if storage is not None:
35 credentials = storage.get()
36 if credentials is not None:
37 return credentials
38
39 # client_secrets_file = get_client_secrets_path()
40 # flow = client.flow_from_clientsecrets(
41 # client_secrets_file,
42 # scope='https://www.googleapis.com/auth/monitoring',
43 # redirect_uri='urn:ietf:wg:oauth:2.0:oob')
44 # auth_uri = flow.step1_get_authorize_url()
45 # print('Please navigate to:\n%s' % auth_uri)
46 # auth_code = input('Enter the auth code: ').strip()
47 # credentials = flow.step2_exchange(auth_code)
48 # credentials =
49
50 storage.put(credentials)
51 credentials.store(storage)
52 return credentials
53
54
55def create_monitoring_api_client_stub(credentials):
56 api_key = get_api_key()
57 # credentials = get_credentials()
58 discovery_base_url = 'https://monitoring.googleapis.com/$discovery/rest'
59 discovery_visibility = 'DASHBOARD_TRUSTED_TESTER'
60 discovery_url = ('%s?labels=%s' % (discovery_base_url, discovery_visibility))
61 # discovery_url = ('%s?labels=%s&key=%s' % (discovery_base_url, discovery_visibility, api_key))
62 # print(discovery_url)
63 return build(
64 'monitoring',
65 'v3',
66 discoveryServiceUrl=discovery_url,
67 credentials=credentials)
68
69
70def get_project_id():
71 if 'PROJECT_ID' in os.environ:
72 return os.environ['PROJECT_ID']
73 if 'DEVSHELL_PROJECT_ID' in os.environ:
74 return os.environ['DEVSHELL_PROJECT_ID']
75 logger.critical('No project ID defined in the environment. Set environment variable: PROJECT_ID')
76 sys.exit(1)
77
78
79def configure_logging():
80 logging.getLogger().addHandler(logging.NullHandler())
81 log_handler = logging.StreamHandler(sys.stderr)
82 log_formatter = logging.Formatter(fmt='[%(levelname)s] %(message)s')
83 log_handler.setFormatter(log_formatter)
84 logger.addHandler(log_handler)
85 logger.setLevel(logging.WARNING)
86
87
88def main():
89 configure_logging()
90 credentials, project_id = google.auth.default()
91 monitoring = create_monitoring_api_client_stub(credentials)
92 dashboards = monitoring.projects().dashboards()
93 # dashboards = monitoring.projects().uptimeCheckConfigs()
94 request = dashboards.list(parent='projects/%s' % project_id)
95 while request:
96 response = request.execute()
97 for dashboard in response.get('dashboards', []):
98 # for dashboard in response.get('uptimeCheckConfigs', []):
99 print('\"%s\": \"%s\"' % (dashboard['name'], dashboard['displayName']))
100 request = dashboards.list_next(request, response)
101
102
103if __name__ == '__main__':
104 main()