/** * Generates a login activity report for the last week as a spreadsheet. The * report includes the time, user, and login result. * @see https://developers.google.com/admin-sdk/reports/reference/rest/v1/activities/list */functiongenerateLoginActivityReport(){constnow=newDate();constoneWeekAgo=newDate(now.getTime()-7*24*60*60*1000);conststartTime=oneWeekAgo.toISOString();constendTime=now.toISOString();constrows=[];letpageToken;letpage;do{page=AdminReports.Activities.list('all','login',{startTime:startTime,endTime:endTime,maxResults:500,pageToken:pageToken});constitems=page.items;if(items){for(constitemofitems){constrow=[newDate(item.id.time),item.actor.email,item.events[0].name];rows.push(row);}}pageToken=page.nextPageToken;}while(pageToken);if(rows.length===0){console.log('No results returned.');return;}constspreadsheet=SpreadsheetApp.create('Google Workspace Login Report');constsheet=spreadsheet.getActiveSheet();// Append the headers.constheaders=['Time','User','Login Result'];sheet.appendRow(headers);// Append the results.sheet.getRange(2,1,rows.length,headers.length).setValues(rows);console.log('Report spreadsheet created: %s',spreadsheet.getUrl());}
/** * Generates a user usage report for this day last week as a spreadsheet. The * report includes the date, user, last login time, number of emails received, * and number of drive files created. * @see https://developers.google.com/admin-sdk/reports/reference/rest/v1/userUsageReport/get */functiongenerateUserUsageReport(){consttoday=newDate();constoneWeekAgo=newDate(today.getTime()-7*24*60*60*1000);consttimezone=Session.getScriptTimeZone();constdate=Utilities.formatDate(oneWeekAgo,timezone,'yyyy-MM-dd');constparameters=['accounts:last_login_time','gmail:num_emails_received','drive:num_items_created'];constrows=[];letpageToken;letpage;do{page=AdminReports.UserUsageReport.get('all',date,{parameters:parameters.join(','),maxResults:500,pageToken:pageToken});if(page.warnings){for(constwarningofpage.warnings){console.log(warning.message);}}constreports=page.usageReports;if(reports){for(constreportofreports){constparameterValues=getParameterValues(report.parameters);constrow=[report.date,report.entity.userEmail,parameterValues['accounts:last_login_time'],parameterValues['gmail:num_emails_received'],parameterValues['drive:num_items_created']];rows.push(row);}}pageToken=page.nextPageToken;}while(pageToken);if(rows.length===0){console.log('No results returned.');return;}constspreadsheet=SpreadsheetApp.create('Google Workspace User Usage Report');constsheet=spreadsheet.getActiveSheet();// Append the headers.constheaders=['Date','User','Last Login','Num Emails Received','Num Drive Files Created'];sheet.appendRow(headers);// Append the results.sheet.getRange(2,1,rows.length,headers.length).setValues(rows);console.log('Report spreadsheet created: %s',spreadsheet.getUrl());}/** * Gets a map of parameter names to values from an array of parameter objects. * @param {Array} parameters An array of parameter objects. * @return {Object} A map from parameter names to their values. */functiongetParameterValues(parameters){returnparameters.reduce((result,parameter)=>{constname=parameter.name;letvalue;if(parameter.intValue!==undefined){value=parameter.intValue;}elseif(parameter.stringValue!==undefined){value=parameter.stringValue;}elseif(parameter.datetimeValue!==undefined){value=newDate(parameter.datetimeValue);}elseif(parameter.boolValue!==undefined){value=parameter.boolValue;}result[name]=value;returnresult;},{});}