javascript - Getting User Activity Reports for a given list of users in G Suite
问题描述
I'm trying to use the Admin SDK Reports Service to get the last login time and some other data for 20 users. It's not feasible to get the data for the whole domain and then filter down due to the size of the domain, so I want to get the data for only these 20 users, but I can't seem to find a way to do that. My current code fails with Admin user usage reports get failed with error: GoogleJsonResponseException: API call to reports.userUsageReport.get failed with error: Bad Request
I know this is wrong but looking at the docs I'm not sure what to do. I can use one user and that works fine on the website, but it seems weird that the only option would be to get all users or one user. I tried to modify my code to get one user multiple times in a loop, but fails with the above error. the userList
value is pulled from a table in the AppMaker user interface. I can also use the documentation website's API explorer with no problems.
Here's my current function:
function generateLoginActivityReport(userList) {
var today = new Date();
var oneWeekAgo = new Date(today.getTime() - (7 * 24 * 60 * 60 * 1000));
var timezone = Session.getScriptTimeZone();
var date = Utilities.formatDate(oneWeekAgo, timezone, 'yyyy-MM-dd');
userList = JSON.parse(userList);
//console.log("server code: " + list);
for (var a = 0; a < userList.length; a++) {
//console.log(userList[a]);
var parameters = [
'accounts:last_login_time',
'drive:num_items_created'
];
var rows = [];
var pageToken;
var page;
do {
page = AdminReports.UserUsageReport.get('all', date, {
parameters: parameters.join(','),
maxResults: 1,
pageToken: pageToken,
userKey: userList[a]
});
var reports = page.usageReports;
if (page.warnings) {
for (var q = 0; q < page.warnings.length; q++) {
var warning = page.warnings[a];
Logger.log(warning.message);
}
}
if (reports) {
for (var i = 0; i < reports.length; i++) {
var report = reports[i];
try {
var parameterValues = getParameterValues(report.parameters);
var row = [
report.date,
report.entity.userEmail,
parameterValues['accounts:last_login_time'],
//parameterValues['drive:num_items_created']
];
rows.push(row);
var ar = app.models.ActivityReport.newRecord();
ar.LastLogin = parameterValues['accounts:last_login_time'];
console.log(report.entity.userEmail);
ar.DocsAdded = 0; //getting this value is another issue but unrelated so it's set to 0 for now.
ar.Email = report.entity.userEmail.toString();
app.saveRecords([ar]);
}
catch(error) {
console.error("Error! Did not write last item to model: \n"+error);
}
}
}
} while (pageToken);
}
}
解决方案
推荐阅读
- amazon-web-services - AWS:忽略策略条件语句
- c++ - 尝试更改 C 中 char 指针的值时未处理的异常
- html - 如何在不滑动的情况下使导航栏元素加载到位?
- typescript - 当指定同级泛型时,根据传递的数据保留泛型类型,而不是默认值
- c# - 拆分一个字符串并将其放入两个数组中
- python - 使用 python 和 opencv 使文本可读
- python - Django 3.x Python 3.x Forms - “NoneType”对象没有属性“_prefetch_related_lookups”
- symfony - 在 Symfony 中将 Twig 变量传递给 Vue.js
- python - 多重继承适用于图形界面吗?
- python - 遍历数据框中列的每一行中的列表