CrOS Telemetry API

This commit is contained in:
Jay Lee
2021-12-22 09:52:48 -05:00
parent b9b7ae8d99
commit dc93503625
2 changed files with 81 additions and 2 deletions

View File

@@ -10479,9 +10479,10 @@ OAUTH2_SCOPES = [
'scopes': 'https://www.googleapis.com/auth/admin.directory.device.chromebrowsers', 'scopes': 'https://www.googleapis.com/auth/admin.directory.device.chromebrowsers',
}, },
{ {
'name': 'Chrome Management API - read only', 'name': 'Chrome Management API - read only (2 scopes)',
'subscope': [], 'subscope': [],
'scopes': ['https://www.googleapis.com/auth/chrome.management.reports.readonly'], 'scopes': ['https://www.googleapis.com/auth/chrome.management.reports.readonly',
'https://www.googleapis.com/auth/chrome.management.telemetry.readonly'],
}, },
{ {
'name': 'Chrome Policy API', 'name': 'Chrome Policy API',
@@ -11667,6 +11668,8 @@ def ProcessGAMCommand(args):
gapi_cloudidentity_groups.print_() gapi_cloudidentity_groups.print_()
elif argument == 'devices': elif argument == 'devices':
gapi_cloudidentity_devices.print_() gapi_cloudidentity_devices.print_()
elif argument == 'crostelemetry':
gapi_chromemanagement.printShowCrosTelemetry()
elif argument in ['groupmembers', 'groupsmembers']: elif argument in ['groupmembers', 'groupsmembers']:
gapi_directory_groups.print_members() gapi_directory_groups.print_members()
elif argument in ['cigroupmembers', 'cigroupsmembers']: elif argument in ['cigroupmembers', 'cigroupsmembers']:
@@ -11775,6 +11778,8 @@ def ProcessGAMCommand(args):
gapi_chromepolicy.printshow_schemas() gapi_chromepolicy.printshow_schemas()
elif argument in ['chromepolicy', 'chromepolicies']: elif argument in ['chromepolicy', 'chromepolicies']:
gapi_chromepolicy.printshow_policies() gapi_chromepolicy.printshow_policies()
elif argument == 'crostelemetry':
gapi_chromemanagement.printShowCrosTelemetry(True)
else: else:
controlflow.invalid_argument_exit(argument, 'gam show') controlflow.invalid_argument_exit(argument, 'gam show')
sys.exit(0) sys.exit(0)

View File

@@ -9,6 +9,7 @@ from gam.var import YYYYMMDD_FORMAT
from gam import controlflow from gam import controlflow
from gam import display from gam import display
from gam import gapi from gam import gapi
from gam import utils
from gam.gapi.directory import orgunits as gapi_directory_orgunits from gam.gapi.directory import orgunits as gapi_directory_orgunits
from gam.gapi.directory.cros import _getFilterDate from gam.gapi.directory.cros import _getFilterDate
@@ -201,6 +202,79 @@ def printAppDevices():
display.write_csv_file(csvRows, titles, 'Chrome Installed Application Devices', todrive) display.write_csv_file(csvRows, titles, 'Chrome Installed Application Devices', todrive)
def printShowCrosTelemetry(show=False):
cm = build()
parent = _get_customerid()
todrive = False
filter_ = None
readMask = []
diskpercentonly = False
supported_readmask_values = list(cm._rootDesc['schemas']['GoogleChromeManagementV1TelemetryDevice']['properties'].keys())
supported_readmask_values.sort()
supported_readmask_map = {item.lower():item for item in supported_readmask_values}
listLimit = 0
i = 3
while i < len(sys.argv):
myarg = sys.argv[i].lower().replace('_', '')
if myarg == 'fields':
field_list = sys.argv[i+1].lower().split(',')
for field_item in field_list:
if field_item not in supported_readmask_map:
controlflow.expected_argument_exit('fields',
', '.join(supported_readmask_values),
field_item)
else:
readMask.append(supported_readmask_map[field_item])
i += 2
elif myarg == 'filter':
filter_ = sys.argv[i+1]
i += 2
elif myarg == 'todrive':
todrive = True
i += 1
elif myarg == 'storagepercentonly':
diskpercentonly = True
i += 1
else:
msg = f'{myarg} is not a valid argument to "gam print crostelemetry"'
controlflow.system_error_exit(3, msg)
if not readMask:
readMask = ','.join(supported_readmask_values)
else:
if 'deviceId' not in readMask:
readMask.append('deviceId')
readMask = ','.join(readMask)
gam.printGettingAllItems('Chrome Device Telemetry...', filter_)
page_message = gapi.got_total_items_msg('Chrome Device Telemetry', '...\n')
devices = gapi.get_all_pages(cm.customers().telemetry().devices(),
'list',
'devices',
page_message=page_message,
parent=parent,
filter=filter_,
readMask=readMask)
for device in devices:
if 'totalDiskBytes' in device.get('storageInfo', {}) and 'availableDiskBytes' in device.get('storageInfo', {}):
disk_avail = int(device['storageInfo']['availableDiskBytes'])
disk_size = int(device['storageInfo']['totalDiskBytes'])
if diskpercentonly:
device['storageInfo'] = {}
device['storageInfo']['percentDiskFree'] = int((disk_avail / disk_size) * 100)
device['storageInfo']['percentDiskUsed'] = 100 - device['storageInfo']['percentDiskFree']
if show:
for device in devices:
display.print_json(device)
print()
print()
else:
csvRows = []
titles = []
for device in devices:
display.add_row_titles_to_csv_file(utils.flatten_json(device),
csvRows, titles)
display.write_csv_file(csvRows, titles, 'Telemetry Devices', todrive)
CHROME_VERSIONS_TITLES = [ CHROME_VERSIONS_TITLES = [
'version', 'count', 'channel', 'deviceOsVersion', 'system' 'version', 'count', 'channel', 'deviceOsVersion', 'system'
] ]