Использование диска пользователя без общих файлов - PullRequest
0 голосов
/ 26 февраля 2020

Я хотел бы создать отчет об использовании памяти для всех моих пользователей. Для этого я использую приложение AdminReports, вот так (где-то в примере с Google. Просто пришлось адаптировать массивы «параметры» и «строки»):

function generateUserUsageReport() {
  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');


  var parameters = [
    'accounts:gmail_used_quota_in_mb',
    'accounts:drive_used_quota_in_mb',
    'accounts:total_quota_in_mb ',
    'accounts:used_quota_in_percentage'
  ];
  var rows = [];
  var pageToken;
  var page;
  do {
    page = AdminReports.UserUsageReport.get('all', date, {
      parameters: parameters.join(','),
      maxResults: 500,
      pageToken: pageToken
    });
    if (page.warnings) {
      for (var i = 0; i < page.warnings.length; i++) {
        var warning = page.warnings[i];
        Logger.log(warning.message);
      }
    }
    var reports = page.usageReports;
    if (reports) {
      for (var i = 0; i < reports.length; i++) {
        var report = reports[i];
        var parameterValues = getParameterValues(report.parameters);
        var row = [
          report.date,
          report.entity.userEmail,
          parseInt(parameterValues['accounts:drive_used_quota_in_mb']),
          parseInt(parameterValues['accounts:gmail_used_quota_in_mb']),
          parseInt(parameterValues['accounts:total_quota_in_mb']),
          ((parseInt(parameterValues['accounts:gmail_used_quota_in_mb'])+parseInt(parameterValues['accounts:drive_used_quota_in_mb']))/parseInt(parameterValues['accounts:total_quota_in_mb']))*100
        ];
        rows.push(row);
      }
    }
    pageToken = page.nextPageToken;
  } while (pageToken);

  if (rows.length > 0) {
    var spreadsheet = SpreadsheetApp.getActive();
    var sheet = spreadsheet.getActiveSheet();

    // Append the headers.
    var headers = [['Date', 'User mail', 'Drive use','Gmail use', 'Total available',
        'Total(%)']];
    sheet.getRange(1, 1, 1, 6).setValues(headers);

    // Append the results.
    sheet.getRange(2, 1, rows.length, 6).setValues(rows);

    Logger.log('Report spreadsheet created: %s', spreadsheet.getUrl());
  } else {
    Logger.log('No results returned.');
  }
}

/**
 * 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.
 */
function getParameterValues(parameters) {
  return parameters.reduce(function(result, parameter) {
    var name = parameter.name;
    var value;
    if (parameter.intValue !== undefined) {
      value = parameter.intValue;
    } else if (parameter.stringValue !== undefined) {
      value = parameter.stringValue;
    } else if (parameter.datetimeValue !== undefined) {
      value = new Date(parameter.datetimeValue);
    } else if (parameter.boolValue !== undefined) {
      value = parameter.boolValue;
    }
    result[name] = value;
    return result;
  }, {});
}

У меня проблема в том, что Параметр «account: drive_used_quota_in_mb» дает вам использование диска с общими файлами (что не имеет значения для вычисления объема памяти, используемого пользователем (чтобы определить, нужно ли ему больше места или нет)).

Я даже пытался используйте «account: used_quota_in_percentage», которое, как мне показалось, было именно тем, что мне нужно, но рассчитывает процентное соотношение так же, как я: ((диск + почта) / общее пространство) * 100, и для этого нельзя игнорировать общие файлы.

Я работаю над возможностью проверки всех файлов на диске, но вы знаете следующую проблему: медлительность .. (только для 1 пользователя с небольшим количеством документов, это занимает 1-2 минуты)

Есть ли способ сделать это по сценарию, с другим классом или что-то, что сделано для этого в Google, которого я не видел?

Спасибо за ваше чтение, простите мой английский sh.

1 Ответ

1 голос
/ 27 февраля 2020

Ладно, проблем нет, я просто испугался, потому что у пользователя было потребление 30 Go, хотя его учетная запись была всего 2 месяца.

Но после обсуждения с ним он действительно загружал тяжелые файлы одна неделя go, и с тех пор он удалил ее.

И выполнение сценария только в течение 2 дней go дает правильный результат, поскольку он удалил эти файлы между этими двумя датами.

Причина моей ошибки в том, что мой сценарий предоставлял статистику, которая была 1-недельной давности (я не осознавал этого), и я проверял достоверность статистических данных этих тезисов в веб-интерфейсе, который порождает сегодняшнюю статистику.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...