Fix bugs, cleanup, improvements (#1155)

* Fix bugs

* Appease pylint

* More report usage cleanup

* More report usage cleanup

* More report usage cleanup

* More report usage cleanup
This commit is contained in:
Ross Scroggs
2020-04-11 12:16:47 -07:00
committed by GitHub
parent 475fb4fa2e
commit 2f02148e36
2 changed files with 76 additions and 39 deletions

View File

@@ -38,6 +38,7 @@ If an item contains spaces, it should be surrounded by ".
papayawhip|peachpuff|peru|pink|plum|powderblue|purple|red|rosybrown|royalblue| papayawhip|peachpuff|peru|pink|plum|powderblue|purple|red|rosybrown|royalblue|
saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue| saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|
tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen
<DayOfWeek> ::= mon|tue|wed|thu|fri|sat|sun
<FileFormat> ::= <FileFormat> ::=
csv|html|txt|tsv|jpeg|jpg|png|svg|pdf|rtf|pptx|xlsx|docx|odt|ods|openoffice|ms|microsoft|micro$oft csv|html|txt|tsv|jpeg|jpg|png|svg|pdf|rtf|pptx|xlsx|docx|odt|ods|openoffice|ms|microsoft|micro$oft
<LabelColorHex> ::= <LabelColorHex> ::=
@@ -914,12 +915,28 @@ gam info resoldsubscriptions <CustomerID> [customer_auth_token <String>]
sites sites
<ReportsAppList> ::= "<ReportsApp>(,<ReportsApp>)*" <ReportsAppList> ::= "<ReportsApp>(,<ReportsApp>)*"
gam report users|user [todrive] [date <Date>] [fulldatarequired all|<ReportsAppList>] gam report usageparameters customer|user [todrive]
[(user <UserItem>)|(orgunit|org|ou <OrgUnitPath>)] [filter|filters <String>] [fields|parameters <String>] gam report usage user [todrive]
gam report customers|customer|domain [todrive] [date <Date>] [fulldatarequired all|<ReportsAppList>] [<UserTypeItem>)|(orgunit|org|ou <OrgUnitPath>)]
[startdate <Date>] [enddate <Date>]
[skipdates <Date>(,<Date>)*] [skipdaysofweek <DayOfWeek>(,<DayOfWeek>)*]
[fields|parameters <String>]
gam report usage customer [todrive]
[startdate <Date>] [enddate <Date>]
[skipdates <Date>(,<Date>)*] [skipdaysofweek <DayOfWeek>(,<DayOfWeek>)*]
[fields|parameters <String>]
gam report users|user [todrive]
[(user <UserItem>)|(orgunit|org|ou <OrgUnitPath>)]
[date <Date>] [fulldatarequired all|<ReportsAppList>]
[filter|filters <String>] [fields|parameters <String>]
gam report customers|customer|domain [todrive]
[date <Date>] [fulldatarequired all|<ReportsAppList>]
[fields|parameters <String>] [fields|parameters <String>]
gam report <ActivityApplicationName> [todrive] gam report <ActivityApplicationName> [todrive]
[start <Time>] [end <Time>] [(user all|<UserItem>)] [event <String>] [filter|filters <String>] [ip <String>] [user all|<UserItem>]
[start <Time>] [end <Time>]
[filter|filters <String>] [event <String>] [ip <String>]
gam create admin <UserItem> <RoleItem> customer|(org_unit <OrgUnitItem>) gam create admin <UserItem> <RoleItem> customer|(org_unit <OrgUnitItem>)
gam delete admin <RoleAssignmentId> gam delete admin <RoleAssignmentId>

View File

@@ -1,5 +1,6 @@
import calendar import calendar
import datetime import datetime
import re
import sys import sys
from dateutil.parser import parse from dateutil.parser import parse
@@ -44,7 +45,12 @@ def showUsageParameters():
rep = buildGAPIObject() rep = buildGAPIObject()
throw_reasons = [gapi.errors.ErrorReason.INVALID, throw_reasons = [gapi.errors.ErrorReason.INVALID,
gapi.errors.ErrorReason.BAD_REQUEST] gapi.errors.ErrorReason.BAD_REQUEST]
todrive = False
if len(sys.argv) == 3:
controlflow.missing_argument_exit(
'user or customer', 'report usageparameters')
report = sys.argv[3].lower() report = sys.argv[3].lower()
titles = ['parameter']
if report == 'customer': if report == 'customer':
endpoint = rep.customerUsageReports() endpoint = rep.customerUsageReports()
kwargs = {} kwargs = {}
@@ -58,9 +64,17 @@ def showUsageParameters():
if customerId == MY_CUSTOMER: if customerId == MY_CUSTOMER:
customerId = None customerId = None
tryDate = datetime.date.today().strftime(YYYYMMDD_FORMAT) tryDate = datetime.date.today().strftime(YYYYMMDD_FORMAT)
partial_apps = False partial_apps = []
all_parameters = [] all_parameters = []
one_day = datetime.timedelta(days=1) one_day = datetime.timedelta(days=1)
i = 4
while i < len(sys.argv):
myarg = sys.argv[i].lower().replace('_', '')
if myarg == 'todrive':
todrive = True
i += 1
else:
controlflow.invalid_argument_exit(sys.argv[i], "gam report usageparameters")
while True: while True:
try: try:
response = gapi.call(endpoint, 'get', response = gapi.call(endpoint, 'get',
@@ -88,15 +102,22 @@ def showUsageParameters():
except gapi.errors.GapiInvalidError as e: except gapi.errors.GapiInvalidError as e:
tryDate = _adjust_date(str(e)) tryDate = _adjust_date(str(e))
all_parameters.sort() all_parameters.sort()
csvRows = []
for parameter in all_parameters: for parameter in all_parameters:
print(parameter) csvRows.append({'parameter': parameter})
display.write_csv_file(
csvRows, titles, f'{report.capitalize()} Report Usage Parameters', todrive)
REPORTS_PARAMETERS_SIMPLE_TYPES = ['intValue', 'boolValue', 'datetimeValue', 'stringValue']
def showUsage(): def showUsage():
rep = buildGAPIObject() rep = buildGAPIObject()
throw_reasons = [gapi.errors.ErrorReason.INVALID, throw_reasons = [gapi.errors.ErrorReason.INVALID,
gapi.errors.ErrorReason.BAD_REQUEST] gapi.errors.ErrorReason.BAD_REQUEST]
todrive = False todrive = False
if len(sys.argv) == 3:
controlflow.missing_argument_exit(
'user or customer', 'report usage')
report = sys.argv[3].lower() report = sys.argv[3].lower()
titles = ['date'] titles = ['date']
if report == 'customer': if report == 'customer':
@@ -113,7 +134,6 @@ def showUsage():
if customerId == MY_CUSTOMER: if customerId == MY_CUSTOMER:
customerId = None customerId = None
parameters = [] parameters = []
filters = None
start_date = end_date = orgUnitId = None start_date = end_date = orgUnitId = None
skip_day_numbers = [] skip_day_numbers = []
skip_dates = [] skip_dates = []
@@ -121,20 +141,15 @@ def showUsage():
while i < len(sys.argv): while i < len(sys.argv):
myarg = sys.argv[i].lower().replace('_', '') myarg = sys.argv[i].lower().replace('_', '')
if myarg == 'startdate': if myarg == 'startdate':
start_date = parse(sys.argv[i+1]) start_date = utils.get_yyyymmdd(sys.argv[i+1], returnDateTime=True)
i += 2 i += 2
elif myarg == 'enddate': elif myarg == 'enddate':
end_date = parse(sys.argv[i+1]) end_date = utils.get_yyyymmdd(sys.argv[i+1], returnDateTime=True)
i += 2 i += 2
elif myarg == 'todrive': elif myarg == 'todrive':
todrive = True todrive = True
i += 1 i += 1
elif myarg in ['orgunit', 'org', 'ou']: elif myarg in ['fields', 'parameters']:
if report != 'user':
controlflow.invalid_argument_exit(myarg, f'gam usage {report}')
_, orgUnitId = __main__.getOrgUnitId(sys.argv[i+1])
i += 2
elif myarg == 'parameters':
parameters = sys.argv[i+1].split(',') parameters = sys.argv[i+1].split(',')
i += 2 i += 2
elif myarg == 'skipdates': elif myarg == 'skipdates':
@@ -146,29 +161,31 @@ def showUsage():
dow = [d.lower() for d in calendar.day_abbr] dow = [d.lower() for d in calendar.day_abbr]
skip_day_numbers = [dow.index(d) for d in skipdaynames if d in dow] skip_day_numbers = [dow.index(d) for d in skipdaynames if d in dow]
i += 2 i += 2
elif myarg in usergroup_types: elif report == 'user' and myarg in ['orgunit', 'org', 'ou']:
if report != 'user': _, orgUnitId = __main__.getOrgUnitId(sys.argv[i+1])
controlflow.invalid_argument_exit(myarg, f'gam usage {report}') i += 2
entity_type = myarg elif report == 'user' and myarg in usergroup_types:
entity = sys.argv[i+1] users = __main__.getUsersToModify(myarg, sys.argv[i+1])
users = __main__.getUsersToModify(entity_type, entity)
kwargs = [{'userKey': user} for user in users] kwargs = [{'userKey': user} for user in users]
i += 3 i += 2
else: else:
controlflow.invalid_argument_exit(sys.argv[i], "gam usage") controlflow.invalid_argument_exit(sys.argv[i], f'gam report usage {report}')
if parameters:
titles.extend(parameters)
parameters = ','.join(parameters)
else:
parameters = None
if not start_date: if not start_date:
start_date = datetime.datetime.now() + relativedelta(months=-1) start_date = datetime.datetime.now() + relativedelta(months=-1)
if not end_date: if not end_date:
end_date = datetime.datetime.now() end_date = datetime.datetime.now()
if orgUnitId: if orgUnitId:
for i in range(len(kwargs)): for kw in kwargs:
kwargs[i-1]['orgUnitID'] = orgUnitId kw['orgUnitID'] = orgUnitId
one_day = datetime.timedelta(days=1) one_day = datetime.timedelta(days=1)
usage_on_date = start_date usage_on_date = start_date
titles.extend(parameters) start_date = usage_on_date.strftime('%Y-%m-%d')
csvRows = [] csvRows = []
vtypes = ['intValue', 'stringValue', 'intValue',
'boolValue', 'datetimeValue']
while usage_on_date <= end_date: while usage_on_date <= end_date:
use_date = usage_on_date.strftime('%Y-%m-%d') use_date = usage_on_date.strftime('%Y-%m-%d')
if usage_on_date.weekday() in skip_day_numbers or \ if usage_on_date.weekday() in skip_day_numbers or \
@@ -184,7 +201,7 @@ def showUsage():
throw_reasons=throw_reasons, throw_reasons=throw_reasons,
customerId=customerId, customerId=customerId,
date=use_date, date=use_date,
parameters=','.join(parameters), parameters=parameters,
**kwarg) **kwarg)
except gapi.errors.GapiBadRequestError: except gapi.errors.GapiBadRequestError:
continue continue
@@ -192,7 +209,7 @@ def showUsage():
row = {'date': use_date} row = {'date': use_date}
if 'userEmail' in entity['entity']: if 'userEmail' in entity['entity']:
row['user'] = entity['entity']['userEmail'] row['user'] = entity['entity']['userEmail']
for item in entity['parameters']: for item in entity.get('parameters', []):
if 'name' not in item: if 'name' not in item:
continue continue
name = item['name'] name = item['name']
@@ -204,16 +221,20 @@ def showUsage():
titles.append(column_name) titles.append(column_name)
row[column_name] = cros_ver['num_devices'] row[column_name] = cros_ver['num_devices']
else: else:
for vtype in vtypes: if not name in titles:
if vtype in item: titles.append(name)
value = item[vtype] for ptype in REPORTS_PARAMETERS_SIMPLE_TYPES:
if ptype in item:
row[name] = item[ptype]
break break
row[name] = value else:
row[name] = ''
csvRows.append(row) csvRows.append(row)
except gapi.errors.GapiInvalidError: except gapi.errors.GapiInvalidError as e:
continue display.print_warning(str(e))
break
display.write_csv_file( display.write_csv_file(
csvRows, titles, f'Usage Reports', todrive) csvRows, titles, f'{report.capitalize()} Usage Report - {start_date}:{use_date}', todrive)
def showReport(): def showReport():
@@ -318,7 +339,6 @@ def showReport():
sys.exit(1) sys.exit(1)
titles = ['email', 'date'] titles = ['email', 'date']
csvRows = [] csvRows = []
ptypes = ['intValue', 'boolValue', 'datetimeValue', 'stringValue']
for user_report in usage: for user_report in usage:
if 'entity' not in user_report: if 'entity' not in user_report:
continue continue
@@ -330,7 +350,7 @@ def showReport():
name = item['name'] name = item['name']
if not name in titles: if not name in titles:
titles.append(name) titles.append(name)
for ptype in ptypes: for ptype in REPORTS_PARAMETERS_SIMPLE_TYPES:
if ptype in item: if ptype in item:
row[name] = item[ptype] row[name] = item[ptype]
break break