跟踪帐户的总执行时间Google应用脚本

时间:2017-10-23 07:10:23

标签: google-apps-script

Google Apps脚本每个帐户每天都有6小时触发的脚本限制。

我最近开始收到提醒Service using too much computer time for one day

  

是否有办法按项目跟踪触发脚本的总时间?

到目前为止,我发现了post,但我需要查找我的所有50个项目。

谢谢

1 个答案:

答案 0 :(得分:1)

  • 您要检索由时间驱动的触发器执行的功能的总执行时间。

如果我的理解是正确的,那么这种方法呢?通过更新Apps Script API,添加了用于检索项目过程的方法。我认为这可以用于上述情况。

流量

  1. 通过Apps Script API中的“ processes.list”方法检索功能的进程列表。
    • 那时,使用startTimeendTime设置检索总执行时间的期限。
    • 使用进程类型的“ TIME_DRIVEN”作为过滤器。这样,可以检索由时间驱动的触发器执行的功能的处理列表。
  2. 对每个功能的持续时间求和。

示例脚本:

准备工作:

在使用此脚本之前,请按以下步骤启用Apps脚本API。

在API控制台上启用Apps Script API:
  • 在脚本编辑器上
    • 资源-> Cloud Platform项目
    • View API控制台
    • 在“入门”中,单击“探索并启用API”。
    • 在左侧,单击库。
    • 在“搜索API和服务”中,输入“应用脚本”。然后点击Apps Script API。
    • 单击“启用”按钮。
    • 如果已启用此API,请不要关闭。
添加范围:

请在清单文件(appsscript.json)中添加以下范围。

"oauthScopes": [
  "https://www.googleapis.com/auth/script.external_request",
  "https://www.googleapis.com/auth/script.processes"
]
  • 在脚本编辑器上
    • 查看->显示清单文件
    • 添加以上属性。

脚本:

在运行此脚本之前,请先设置startTimeendTime。这是计算总时间的时间。在此示例脚本中,计算了从2019-02-07T00:00:00.000Z2019-02-08T00:00:00.000Z的总时间。

function myFunction() {
  var startTime = "2019-02-07T00:00:00.000Z"; // Please set this.
  var endTime = "2019-02-08T00:00:00.000Z"; // Please set this.

  var params = {headers: {Authorization: "Bearer " + ScriptApp.getOAuthToken()}};
  var data = [];
  var nextPageToken = "";
  var url = "https://script.googleapis.com/v1/processes";
  do {
    var query = "?fields=%2a" +
    "&pageToken=" + encodeURIComponent(nextPageToken) +
    "&userProcessFilter.types=TIME_DRIVEN" +
    "&userProcessFilter.startTime=" + encodeURIComponent(startTime) +   
    "&userProcessFilter.endTime=" + encodeURIComponent(endTime);
    var res = JSON.parse(UrlFetchApp.fetch(url + query, params).getContentText());
    Array.prototype.push.apply(data, res.processes);
    nextPageToken = res.nextPageToken || "";
  } while (nextPageToken);
  var result = data.reduce(function(obj, e) {
    obj[e.functionName] = obj[e.functionName] ? obj[e.functionName] + Number(e.duration.replace("s", "")) : Number(e.duration.replace("s", ""));
    return obj;
  }, {});
  Logger.log(result)
}

结果:

作为示例情况,当由时间驱动的触发器运行myFunction1myFunction2的两个功能时,此脚本返回以下结果。结果表明,对于startTimeendTimemyFunction1myFunction2的总执行时间分别为123.456 s和12.345 s。

{
  "myFunction1": 123.456,
  "myFunction2": 12.345
}

注意:

  • 关于startTimeendTime,这是RFC3339 UTC“ Zulu”格式的时间戳,精确到纳秒。示例:2014-10-02T15:01:23.045123456Z。这是来自官方文件。
  • 这是一个简单的示例脚本。因此,请根据您的情况进行修改。

参考:

如果这对您的情况没有帮助,我深表歉意。