gam report gmail updates

This commit is contained in:
Ross Scroggs
2025-12-24 11:44:28 -08:00
parent c1d13fa0f2
commit 0e393e0224
4 changed files with 56 additions and 1 deletions

View File

@@ -512,6 +512,8 @@ If an item contains spaces, it should be surrounded by ".
<MatterItem> ::= <UniqueID>|<String>
<MatterState> ::= open|closed|deleted
<MeetConferenceName> ::= conferenceRecords/<String>
<MeetID> ::= <String>
Must match this Python Regular Expression: [a-z]{3}-[a-z]{4}-[a-z]{3}
<MeetSpaceName> ::= spaces/<String> | <String>
<MessageContent> ::=
(message|textmessage|htmlmessage <String>)|
@@ -527,6 +529,7 @@ If an item contains spaces, it should be surrounded by ".
(gdoc|ghtml <UserGoogleDoc>)|
(gcsdoc|gcshtml <StorageBucketObjectName>)
<NumberOfSeats> ::= <Number>
<NumberRange> ::= <Number>|(<Number>/<Number>)
<OrgUnitID> ::= id:<String>
<OrgUnitPath> ::= /|(/<String>)+
<OrgUnitItem> ::= <OrgUnitID>|<OrgUnitPath>
@@ -764,6 +767,7 @@ If an item contains spaces, it should be surrounded by ".
<MimeTypeNameList> ::= "<MimeTypeName>(,<MimeTypeName>)*"
<NamespaceList> ::= "<Namespace>(,<Namespace>)*"
<NotesNameList> ::= "<NotesName>(,<NotesName>)*"
<NumberRangeList> ::= "<NumberRange>(,<NumberRange>)*"
<OrgUnitList> ::= "<OrgUnitItem>(,<OrgUnitItem>)*"
<OtherContactsResourceNameList> ::= "<OtherContactsResourceName>(,<OtherContactsResourceName>)*"
<PeopleResourceNameList> ::= "<PeopleResourceName>(,<PeopleResourceName>)*"
@@ -4630,6 +4634,7 @@ gam report <ActivityApplicationName> [todrive <ToDriveAttribute>*]
yesterday|today|thismonth|(previousmonths <Integer>)]
[filter <String> (filtertime<String> <Time>)*]
[event|events <EventNameList>] [ip <String>]
[gmaileventtypes <NumberRangeList>]
[groupidfilter <String>] [resourcedetailsfilter <String>]
[maxactivities <Number>] [maxevents <Number>] [maxresults <Number>]
[countsonly [bydate|summary] [eventrowfilter]]

View File

@@ -1,3 +1,16 @@
7.30.05
Added option `gmaileventtypes <NumberRangeList>` to `gam report gmail` that can be used to limit the event types displayed.
```
<NumberRange> ::= <Number>|(<Number>/<Number>)
<NumberRangeList> ::= "<NumberRange>(,<NumberRange>)*"
gam report gmail user user@domain.com gmaileventtypes 1,10/11
```
* See: https://developers.google.com/workspace/admin/reports/v1/appendix/activity/gmail
Updated sorting of column headers in `gam report <ActivityApplicationName>`.
7.30.04
Updated `gam report gmail` to avoid the following error when incomplete start/end time information is provided.

View File

@@ -25,7 +25,7 @@ https://github.com/GAM-team/GAM/wiki
"""
__author__ = 'GAM Team <google-apps-manager@googlegroups.com>'
__version__ = '7.30.04'
__version__ = '7.30.05'
__license__ = 'Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)'
#pylint: disable=wrong-import-position
@@ -1546,6 +1546,25 @@ def getIntegerEmptyAllowed(minVal=None, maxVal=None, default=0):
invalidArgumentExit(integerLimits(minVal, maxVal))
return default
def getNumberRangeList():
if Cmd.ArgumentsRemaining():
numberlist = []
for number in Cmd.Current().strip().replace(',', ' ').split():
if number.isdigit():
numberlist.append(int(number))
elif '/' in number:
lrange, urange = number.split('/', 1)
if lrange.isdigit() and urange.isdigit() and int(lrange) <= int(urange):
for n in range(int(lrange), int(urange)+1):
numberlist.append(n)
else:
invalidArgumentExit(Cmd.OB_NUMBER_RANGE_LIST)
else:
invalidArgumentExit(Cmd.OB_NUMBER_RANGE_LIST)
Cmd.Advance()
return sorted(numberlist)
missingArgumentExit(Cmd.OB_NUMBER_RANGE_LIST)
SORTORDER_CHOICE_MAP = {'ascending': 'ASCENDING', 'descending': 'DESCENDING'}
class OrderBy():
@@ -14074,6 +14093,7 @@ def doReport():
allVerifyUser = userKey = 'all'
cd = orgUnit = orgUnitId = None
userOrgUnits = {}
gmailEventTypes = set()
customerReports = userReports = False
if report == 'customer':
customerReports = True
@@ -14177,6 +14197,8 @@ def doReport():
groupIdFilter = getString(Cmd.OB_STRING)
elif activityReports and myarg == 'resourcedetailsfilter':
resourceDetailsFilter = getString(Cmd.OB_STRING)
elif activityReports and (report == 'gmail') and myarg == 'gmaileventtypes':
gmailEventTypes = set(getNumberRangeList())
elif myarg == 'addcsvdata':
k = getString(Cmd.OB_STRING)
addCSVData[k] = getString(Cmd.OB_STRING, minLen=0)
@@ -14419,6 +14441,7 @@ def doReport():
csvPF.SetTitles('name')
if addCSVData:
csvPF.AddTitles(sorted(addCSVData.keys()))
csvPF.SetSortAllTitles()
if select:
pageMessage = None
normalizeUsers = True
@@ -14506,6 +14529,19 @@ def doReport():
purge_parameters = True
numEvents = 0
for event in events:
# filter gmail event types
if gmailEventTypes:
keepEvent = True
for item in event.get('parameters', []):
if item['name'] == 'event_info':
for parm in item.get('messageValue', {}).get('parameter', []):
if parm['name'] == 'mail_event_type':
if int(parm['intValue']) not in gmailEventTypes:
keepEvent = False
break
break
if not keepEvent:
continue
numEvents += 1
for item in event.get('parameters', []):
itemSet = set(item)

View File

@@ -1286,6 +1286,7 @@ class GamCLArgs():
OB_MOBILE_ENTITY = 'MobileEntity'
OB_NETWORK_ID = 'networkID'
OB_NAME = 'Name'
OB_NUMBER_RANGE_LIST = 'NumberRangeList'
OB_ORGANIZER_TYPE_LIST = 'OrganizerTypeList'
OB_ORGUNIT_ENTITY = 'OrgUnitEntity'
OB_ORGUNIT_ITEM = 'OrgUnitItem'