104 lines
3.3 KiB
JavaScript
104 lines
3.3 KiB
JavaScript
|
// Copyright 2020 Google LLC
|
||
|
//
|
||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
// you may not use this file except in compliance with the License.
|
||
|
// You may obtain a copy of the License at
|
||
|
//
|
||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||
|
//
|
||
|
// Unless required by applicable law or agreed to in writing, software
|
||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
// See the License for the specific language governing permissions and
|
||
|
// limitations under the License.
|
||
|
|
||
|
const functions = require("@google-cloud/functions-framework");
|
||
|
const superagent = require("superagent");
|
||
|
const { LoggingBunyan } = require("@google-cloud/logging-bunyan");
|
||
|
const bunyan = require("bunyan");
|
||
|
const { GoogleAuth } = require("google-auth-library");
|
||
|
|
||
|
const loggingBunyan = new LoggingBunyan();
|
||
|
const logger = bunyan.createLogger({
|
||
|
name: "analyticsExport",
|
||
|
streams: [
|
||
|
{ stream: process.stdout, level: "info" },
|
||
|
loggingBunyan.stream("info"),
|
||
|
],
|
||
|
});
|
||
|
|
||
|
const ORGANIZATION = process.env.ORGANIZATION;
|
||
|
const ENVIRONMENTS = process.env.ENVIRONMENTS.split(',');
|
||
|
const DATASTORE = process.env.DATASTORE;
|
||
|
|
||
|
const MANAGEMENT_API_URL = "https://apigee.googleapis.com/v1";
|
||
|
|
||
|
function formatDate(date) {
|
||
|
var d = new Date(date),
|
||
|
month = "" + (d.getMonth() + 1),
|
||
|
day = "" + d.getDate(),
|
||
|
year = d.getFullYear();
|
||
|
|
||
|
if (month.length < 2) month = "0" + month;
|
||
|
if (day.length < 2) day = "0" + day;
|
||
|
|
||
|
return [year, month, day].join("-");
|
||
|
}
|
||
|
|
||
|
async function getAccessToken() {
|
||
|
logger.info("Requesting access token...");
|
||
|
const auth = new GoogleAuth();
|
||
|
const token = await auth.getAccessToken();
|
||
|
logger.info("Got access token ");
|
||
|
return token;
|
||
|
}
|
||
|
|
||
|
async function scheduleAnalyticsExport(org, env, token, startDate, endDate) {
|
||
|
logger.info(
|
||
|
`Sending request for an analytics export from ${startDate} to ${endDate} for environment ${env}`
|
||
|
);
|
||
|
try {
|
||
|
const response = await superagent
|
||
|
.post(
|
||
|
`${MANAGEMENT_API_URL}/organizations/${org}/environments/${env}/analytics/exports`
|
||
|
)
|
||
|
.send({
|
||
|
name: `Analytics from ${startDate} to ${endDate}`,
|
||
|
description: `Analytics from ${startDate} to ${endDate}`,
|
||
|
dateRange: {
|
||
|
start: startDate,
|
||
|
end: endDate,
|
||
|
},
|
||
|
outputFormat: "csv",
|
||
|
csvDelimiter: ",",
|
||
|
datastoreName: DATASTORE,
|
||
|
})
|
||
|
.set('Authorization', `Bearer ${token}`)
|
||
|
.accept('json');
|
||
|
logger.info('Analytics export scheduled');
|
||
|
return response;
|
||
|
} catch (error) {
|
||
|
logger.error('Error scheduling analytics export');
|
||
|
logger.error(error);
|
||
|
throw error;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
functions.cloudEvent("export", async (cloudEvent) => {
|
||
|
const today = new Date();
|
||
|
const endDate = formatDate(today);
|
||
|
const yesterday = new Date(today.setDate(today.getDate() - 1));
|
||
|
const startDate = formatDate(yesterday);
|
||
|
const token = await getAccessToken();
|
||
|
try {
|
||
|
for(let i = 0; i < ENVIRONMENTS.length; i++) {
|
||
|
const env = ENVIRONMENTS[i];
|
||
|
const response = await scheduleAnalyticsExport(ORGANIZATION, env, token, startDate, endDate);
|
||
|
logger.error('Export scheduled: ' + response.body.self);
|
||
|
}
|
||
|
} catch (error) {
|
||
|
logger.error('Analytics exports was not scheduled');
|
||
|
logger.error(error);
|
||
|
}
|
||
|
});
|