Stackdriver экспорт в .txt или PDF на диск / почту

Я создал сценарий, который считывает данные из электронной таблицы и отправляет электронные письма в соответствии с этими данными.

Теперь я также настроил его для простой записи в журнал через stackdriver.

Я бы хотел экспортировать эти журналы (после / в конце каждого выполнения почтового скрипта) в файл .txt или .pdf, который затем сохраняется в определенной папке Google Диска или отправляется по почте.

К сожалению, я не могу понять, как это сделать, и возможно ли это?


person fietstasss    schedule 24.04.2018    source источник
comment
А использование собственного класса Logger, который поддерживает getLogs(), нецелесообразно?   -  person tehhowch    schedule 24.04.2018


Ответы (2)


Невозможно отредактировать файл документации Google, если это то, что вы собираетесь делать. Вам нужно будет создать файл .txt или .pdf локально, а затем загрузить файл на диск Google или отправить его по электронной почте. Технически, если вы загружаете файл как .txt, я думаю, что Google Drive позволит вам экспортировать его как pdf, но я не пробовал с новой версией Google Drive.

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);

Загрузка документов Google

Я также не думаю, что вы сможете отправить файл по электронной почте прямо с Google Диска, вам нужно будет загрузить файл локально, а затем добавить отправку электронной почты.

person DaImTo    schedule 24.04.2018
comment
Здравствуйте, спасибо за ответ. Что я забыл упомянуть: сценарий (сценарий приложений) отправляет почту с помощью команды GmailApp.sendEmail. Я не знаю, находимся ли мы в одном ряду с интерпретацией, но чтобы быть уверенным: что я хотел бы сделать, так это захватить файл журнала / строки журнала и экспортировать их в файл (.txt из. pdf) Затем этот файл нужно либо сохранить на Google Диск, либо отправить через приложение MailApp на какой-либо почтовый адрес. Отправка файлов не проблема, поскольку текущий сценарий уже берет файлы с диска и добавляет их в качестве вложения. Единственное, как экспортировать журнал в файл? - person fietstasss; 24.04.2018
comment
Насколько мне известно, сценарий приложения сможет прочитать файл, только если у вас есть ссылка на него UrlFetchApp.fetch (url) .getContentText (); - person DaImTo; 24.04.2018
comment
В этом ответе неверная информация. Drive.Files.export() не принимает объект в качестве аргумента. Drive.Files.export(fileId, mimeType) имеет два параметра. - person Alan Wells; 23.06.2019

В Stackdriver есть API отчетов об ошибках. Документация для Stackdriver API имеет возможность REST, что означает, что вы можете вызывать его из Скрипт приложений с использованием UrlFetchApp.fetch(url), где url - это URL-адрес, необходимый для получения информации об ошибках. Базовый URL-адрес API Stackdriver: https://clouderrorreporting.googleapis.com API должен быть включен.

С API можно использовать несколько методов.

Вам, вероятно, понадобится метод list, для которого требуется URL-адрес:

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

где параметр projectName должен быть идентификатором проекта Google Cloud Platform.

См. Документацию по list по адресу: projects.events.list < / а>

Возвращаемое значение для этого запроса HTTPS, в случае успеха, представляет собой "тело ответа" со следующей структурой и данными:

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

ErrorEvent - это объект JSON со следующей структурой и данными:

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

Итак, если вы хотите отправить электронное письмо с данными об ошибке из Stackdriver, оно не будет отправлено напрямую из Stackdriver, вам нужно сделать запрос в Stackdriver из Apps Script, получить информацию об ошибке, а затем отправить электронное письмо из Apps Script .

Конечно, у вас может быть собственная система обработки ошибок, которая регистрирует информацию об ошибках для некоторой внешней цели (например, вашей электронной таблицы или базы данных) с помощью 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 и не тестировал этот код. Если кто-то пользуется им и имеет информацию или обнаруживает ошибку, пожалуйста, оставьте комментарий.

person Alan Wells    schedule 23.06.2019