Production script in Google for Anthology. Currently seems to be working well.
This commit is contained in:
1
Scripts/GAS_GS/AnthologyCSV-Parse-Prod/.clasp.json
Normal file
1
Scripts/GAS_GS/AnthologyCSV-Parse-Prod/.clasp.json
Normal file
@ -0,0 +1 @@
|
||||
{"scriptId":"1daBpFcVj0FuYrB6TJjXJX3YAVHZcK-BcHXJSW6kdngRcEKitCxbhncbe","rootDir":"/Users/normrasmussen/Documents/Work/Scripts/GAS_GS/AnthologyCSV-Parse-Prod"}
|
||||
251
Scripts/GAS_GS/AnthologyCSV-Parse-Prod/MasterCSV_Parser.js
Normal file
251
Scripts/GAS_GS/AnthologyCSV-Parse-Prod/MasterCSV_Parser.js
Normal file
@ -0,0 +1,251 @@
|
||||
const apiKey = '8ALsk8jDOlynEwn8ScMBSnG87';
|
||||
|
||||
function newTrigger() {
|
||||
ScriptApp.newTrigger(readLog)
|
||||
.timeBased()
|
||||
.everyMinutes(1)
|
||||
.create();
|
||||
prepareSheet();
|
||||
}
|
||||
|
||||
async function prepareSheet() {
|
||||
var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1Kck1UUOkVIU4kbBC8b_bl77fNaCTSFStiv0I5Gg-kIc/');
|
||||
sheet = ss.getActiveSheet();
|
||||
sheet = ss.getActiveSheet();
|
||||
lastRow = sheet.getLastRow();
|
||||
sheet.clear()
|
||||
sheet.getRange(1,1).setValue("domain");
|
||||
for (var sh = 1; sh < 100; sh++) {
|
||||
sheet.getRange(1, sh+1).setValue("groups_"+sh)
|
||||
}
|
||||
}
|
||||
|
||||
function readLog() {
|
||||
//var previousLast = 0
|
||||
var folder = DriveApp.getFolderById("1nAkWPYFNpRx-UZECMJN4C3N--i0Clcho")
|
||||
var files = folder.getFiles()
|
||||
while (files.hasNext()) {
|
||||
var fileName = files.next()
|
||||
if (fileName == "status.json") {
|
||||
var content = fileName.getBlob().getDataAsString();
|
||||
var json = JSON.parse(content);
|
||||
var previousLast = json['lastLine'];
|
||||
main(previousLast)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function createLog() {
|
||||
var folder = DriveApp.getFolderById("1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j")
|
||||
blob = JSON.stringify(obj);
|
||||
file = folder.createFile("status.json", blob);
|
||||
}
|
||||
|
||||
function updateLog(lastUpdatedLine) {
|
||||
var folder = DriveApp.getFolderById("1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j");
|
||||
obj = JSON.stringify({ lastLine: lastUpdatedLine });
|
||||
var files = folder.getFiles();
|
||||
while (files.hasNext()) {
|
||||
var fileName = files.next();
|
||||
if (fileName == "status.json") {
|
||||
Logger.log(fileName+" found!")
|
||||
fileName.setContent(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function deleteLog() {
|
||||
var folder = DriveApp.getFolderById("1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j");
|
||||
var files = folder.getFiles();
|
||||
while (files.hasNext()) {
|
||||
var fileName = files.next();
|
||||
if (fileName == "status.json") {
|
||||
folder.removeFile(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function main(previousLast) {
|
||||
Logger.log("Main PL: "+previousLast)
|
||||
var folder = DriveApp.getFolderById("1hAz7O-eoxFUk4YW7FoHr4uNJmPs7CiV5BjBNTLtMJzXwY0CbpykYgSAkFR5Quy_MPdn3e_5j");
|
||||
var files = folder.getFiles();
|
||||
while (files.hasNext()) {
|
||||
var file = files.next();
|
||||
var getDate = new Date();
|
||||
var date = Utilities.formatDate(getDate, 'America/New_York', 'MM/dd/yyyy hh');
|
||||
var fileDate = file.getDateCreated();
|
||||
var fileDateFormatted = Utilities.formatDate(fileDate, 'America/New_York', 'MM/dd/yyyy hh');
|
||||
if (date == fileDateFormatted) {
|
||||
var updated_file = file.getBlob()
|
||||
var updated_blob = updated_file.getDataAsString();
|
||||
var updated_data = Utilities.parseCsv(updated_blob, ',');
|
||||
//var updated_data = updated_data.slice(previousLast);
|
||||
var full_data = Utilities.parseCsv(updated_data, ',');
|
||||
//var full_data = full_data.slice(previousLast)
|
||||
} else if (date != fileDateFormatted) {
|
||||
var outdated_file = file.getBlob()
|
||||
var outdated_blob = outdated_file.getDataAsString();
|
||||
var outdated_data = Utilities.parseCsv(outdated_blob, ',');
|
||||
//var outdated_data = outdated_data.slice(previousLast);
|
||||
}
|
||||
}
|
||||
austinComparseData(outdated_data, updated_data);
|
||||
fullParse(full_data);
|
||||
moveOldFiles();
|
||||
}
|
||||
|
||||
function moveOldFiles() {
|
||||
var folder = DriveApp.getFolderById("15p4vXVQd6hhcMl73VOxD8VctL2gR-q43")
|
||||
var files = folder.getFiles()
|
||||
while (files.hasNext()) {
|
||||
var file = files.next();
|
||||
var getDate = new Date();
|
||||
var date = Utilities.formatDate(getDate, 'America/New_York', 'MM/dd/yyyy');
|
||||
var fileDate = file.getDateCreated();
|
||||
var fileDateFormatted = Utilities.formatDate(fileDate, 'America/New_York', 'MM/dd/yyyy');
|
||||
if (date != fileDateFormatted) {
|
||||
const destination = DriveApp.getFolderById('17WCI5QkV9W6j35a-1n9BspTF6z_MZ9yu');
|
||||
file.moveTo(destination);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function austinComparseData(outdated_data, updated_data) {
|
||||
let domains_to_update = [];
|
||||
let updatedFlag = 1;
|
||||
let outdatedFlag = 1;
|
||||
|
||||
while(updatedFlag < updated_data.length && outdatedFlag < outdated_data.length){
|
||||
if(updated_data[updatedFlag][0] == outdated_data[outdatedFlag][0]) {
|
||||
let allUpdatedGroups = [];
|
||||
let allOutdatedGroups = [];
|
||||
|
||||
for(let i = 1; i < updated_data[updatedFlag].length; i++){
|
||||
if(updated_data[updatedFlag][i]){
|
||||
allUpdatedGroups.push(updated_data[updatedFlag][i].trim());
|
||||
}
|
||||
}
|
||||
for(let j = 1; j < outdated_data[outdatedFlag].length; j++){
|
||||
if(outdated_data[outdatedFlag][j]){
|
||||
allOutdatedGroups.push(outdated_data[outdatedFlag][j].trim());
|
||||
}
|
||||
}
|
||||
|
||||
if(allUpdatedGroups.length !== allOutdatedGroups.length){
|
||||
domains_to_update.push(updated_data[updatedFlag]);
|
||||
} else {
|
||||
for(let k = 0; k < allUpdatedGroups.length; k++){
|
||||
if(allOutdatedGroups.indexOf(allUpdatedGroups[k]) == -1){
|
||||
domains_to_update.push(updated_data[updatedFlag]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updatedFlag++;
|
||||
outdatedFlag++;
|
||||
} else {
|
||||
if(updated_data[updatedFlag][0] > outdated_data[outdatedFlag][0]){
|
||||
outdatedFlag++;
|
||||
}
|
||||
else if(updated_data[updatedFlag][0] < outdated_data[outdatedFlag][0]){
|
||||
domains_to_update.push(updated_data[updatedFlag]);
|
||||
updatedFlag++;
|
||||
}
|
||||
}
|
||||
|
||||
if(updatedFlag > updated_data.length-1 || outdatedFlag > outdated_data.length-1){
|
||||
break;
|
||||
}
|
||||
}
|
||||
updatedDomainsOnly(domains_to_update);
|
||||
}
|
||||
|
||||
function updatedDomainsOnly(domains_to_update) {
|
||||
for (var x = 0; x < domains_to_update.length; x++) {
|
||||
var array = domains_to_update[x];
|
||||
for (var i = 1; i < array.length; i++) {
|
||||
var item = array[i]
|
||||
if (item != "") {
|
||||
var api_url = 'https://api.northpass.com/v2/groups/?filter[name][eq]='+encodeURIComponent(item);
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parseData = JSON.parse(uuidResponse);
|
||||
var groupID = parseData['data'][0]['id'];
|
||||
var groupName = array.indexOf(item);
|
||||
if (groupName != -1) {
|
||||
array[groupName] = groupID;
|
||||
}
|
||||
}
|
||||
}
|
||||
const dom = array.shift();
|
||||
const groups = array;
|
||||
sendWebhook({domain_to_update : { domain: dom, group_ids: groups }})
|
||||
}
|
||||
}
|
||||
|
||||
function fullParse(full_data) {
|
||||
for (var x = 1; x < full_data.length; x++) {
|
||||
var array = full_data[x];
|
||||
for (var i = 1; i < array.length; i++) {
|
||||
var item = array[i]
|
||||
if (item != "") {
|
||||
var api_url = 'https://api.northpass.com/v2/groups/?filter[name][eq]='+encodeURIComponent(item);
|
||||
const settings = {
|
||||
async: true,
|
||||
crossDomain: true,
|
||||
method: 'GET',
|
||||
headers: {
|
||||
accept: 'application/json',
|
||||
'X-Api-Key': apiKey
|
||||
}
|
||||
};
|
||||
const sendMsg = UrlFetchApp.fetch(api_url, settings);
|
||||
var uuidResponse = sendMsg.getContentText();
|
||||
var parseData = JSON.parse(uuidResponse)
|
||||
Logger.log("Current Check:"+item)
|
||||
var groupID = parseData['data'][0]['id']
|
||||
var groupName = array.indexOf(item);
|
||||
if (groupName != -1) {
|
||||
array[groupName] = groupID;
|
||||
}
|
||||
}
|
||||
}
|
||||
const dom = array.shift();
|
||||
const groups = array;
|
||||
previousLast++
|
||||
Logger.log(previousLast)
|
||||
updateLog(previousLast)
|
||||
writeDataToSheet(dom, groups)
|
||||
}
|
||||
}
|
||||
|
||||
//Inserts a new sheet and writes a 2D array of data in it
|
||||
function writeDataToSheet(dom, groups) {
|
||||
var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1Kck1UUOkVIU4kbBC8b_bl77fNaCTSFStiv0I5Gg-kIc/');
|
||||
var dataRow = Math.max(sheet.getLastRow(),1);
|
||||
sheet.insertRowAfter(dataRow);
|
||||
sheet.getRange(dataRow + 1, 1).setValue(dom);
|
||||
for (var g = 1; g < groups.length; g++) {
|
||||
sheet.getRange(dataRow + 1, g+1).setValue(groups[g]);
|
||||
}
|
||||
}
|
||||
|
||||
function sendWebhook(domain_to_update){
|
||||
Logger.log("Webhook function Object: "+JSON.stringify(domain_to_update))
|
||||
var payload = domain_to_update
|
||||
var options = {
|
||||
'method': 'post',
|
||||
'payload': JSON.stringify(payload)
|
||||
};
|
||||
UrlFetchApp.fetch('https://webhooks.workato.com/webhooks/rest/604b4fc0-fcd9-4f3b-b715-b42d7f740ba6/domains-updated', options);
|
||||
|
||||
}
|
||||
7
Scripts/GAS_GS/AnthologyCSV-Parse-Prod/appsscript.json
Normal file
7
Scripts/GAS_GS/AnthologyCSV-Parse-Prod/appsscript.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"timeZone": "America/New_York",
|
||||
"dependencies": {
|
||||
},
|
||||
"exceptionLogging": "STACKDRIVER",
|
||||
"runtimeVersion": "V8"
|
||||
}
|
||||
Reference in New Issue
Block a user