Stackdriver导出到.txt或驱动器/邮件上的PDF

时间:2018-04-24 09:20:44

标签: google-apps-script google-api google-drive-api google-cloud-stackdriver

我已经设置了一个脚本,该脚本从电子表格中读取数据并根据此数据发送电子邮件。

现在,我还设置了通过stackdriver进行一些简单的日志记录。

我想要做的是将这些日志(在每次执行邮件脚本之后/之后)导出到.txt.pdf文件,然后保存到特定的Google云端硬盘文件夹或通过邮件发送。

不幸的是,我似乎无法找到如何做到这一点,或者它是否可行?

2 个答案:

答案 0 :(得分:1)

如果您正在考虑这样做,则无法编辑Google文档文件。您必须在本地创建.txt或.pdf文件,然后将文件上传到Google云端硬盘或将其作为电子邮件发送。从技术上讲,如果您将文件上传为.txt,我认为Google驱动器允许您将其导出为pdf,但我还没有尝试使用新版Google驱动器。

var fileId = '1ZdR3L3qP4Bkq8noWLJHSr_iBau0DNT4Kli4SxNc2YEo';
var dest = fs.createWriteStream('/tmp/resume.pdf');
drive.files.export({
  fileId: fileId,
  mimeType: 'application/pdf'
})
    .on('end', function () {
      console.log('Done');
    })
    .on('error', function (err) {
      console.log('Error during download', err);
    })
    .pipe(dest);

Downloading google Documents

我也不认为您可以直接从Google云端硬盘发送文件,您必须在本地下载文件,然后添加发送电子邮件。

答案 1 :(得分:0)

Stackdriver有一个错误报告API。 Documentation for Stackdriver API具有REST功能,这意味着您可以使用UrlFetchApp.fetch(url)从Apps脚本中调用它,其中url是获取错误报告信息所需的URL。 Stackdriver API的基本URL为:https://clouderrorreporting.googleapis.com必须启用该API。

API可以使用多种方法。

您可能需要的方法是list方法,该方法需要url:

https://clouderrorreporting.googleapis.com/v1beta1/{projectName=projects/*}/events

其中projectName参数必须是Google Cloud Platform项目ID。

请参见projects.events.list

上有关list的文档

该HTTPS请求的返回值,如果成功,是具有以下结构和数据的“响应正文”:

{
  "errorEvents": [
    {
      object (ErrorEvent)
    }
  ],
  "nextPageToken": string,
  "timeRangeBegin": string
}

ErrorEvent是具有以下结构和数据的JSON对象:

{
  "eventTime": string,
  "serviceContext": {
    object (ServiceContext)
  },
  "message": string,
  "context": {
    object (ErrorContext)
  }
}

因此,如果您想从Stackdriver发送包含错误数据的电子邮件,则不会直接从Stackdriver发送,您需要从Apps Script向Stackdriver发出请求,获取错误信息,然后发送电子邮件来自Apps脚本。

当然,您可以拥有自己的错误处理系统,使用UrlFetchApp.fetch(url);将错误信息记录到某个外部目标(例如,电子表格或数据库)中。

要向Stackdriver API发送请求,您需要以下代码:

var projectID = "Enter project ID";
var url = 'https://clouderrorreporting.googleapis.com/v1beta1/' + projectID 
 + '/events';
var tkn = ScriptApp.getOAuthToken();

var options = {};
options.headers = {Authorization: 'Bearer ' + tkn}
options.muteHttpExceptions = true;

var rtrnObj = UrlFetchApp.fetch(url,options);

Logger.log(rtrnObj.getContentText())

我没有使用此API,也没有测试此代码。如果有人使用它,并且有信息或发现错误,请发表评论。