mirror of
https://github.com/GAM-team/GAM.git
synced 2026-07-04 04:41:35 +00:00
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:
@@ -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>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user