Files
Gainsight/Scripts/GAS_GS/AnthologyCSV-Parse/parseCSV.js

199 lines
6.7 KiB
JavaScript
Executable File

const apiKey = 'ANTHOAPIKEY';
function main() {
prepareSheet();
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 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 full_data = Utilities.parseCsv(updated_blob, ',');
} else if (date != fileDateFormatted) {
var outdated_file = file.getBlob();
var outdated_blob = outdated_file.getDataAsString();
var outdated_data = Utilities.parseCsv(outdated_blob, ',');
}
}
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;
}
}
quickParse(domains_to_update);
}
function quickParse(domains_to_update) {
Logger.log("Quick Parse Item: "+domains_to_update)
for (var x = 1; 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)
Logger.log("Austin 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;
//const domain_to_update : { domain: dom, group_ids: groups }
sendWebhook({domain_to_update : { domain: dom, group_ids: groups }})
}
}
function fullParse(updated_data) {
Logger.log(updated_data)
for (var x = 1; x < updated_data.length; x++) {
var array = updated_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;
//const domain_to_update : { domain: dom, group_ids: groups }
sendWebhook({domain_to_update : { domain: dom, group_ids: groups }})
writeDataToSheet(dom, groups)
}
}
async function prepareSheet() {
var ss = SpreadsheetApp.openByUrl('https://docs.google.com/spreadsheets/d/1Kck1UUOkVIU4kbBC8b_bl77fNaCTSFStiv0I5Gg-kIc/');
sheet = ss.getActiveSheet();
sheet.clear()
sheet.getRange(1,1).setValue("domain");
for (var sh = 1; sh < 100; sh++) {
sheet.getRange(1, sh+1).setValue("groups_"+sh)
}
}
//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/');
sheet = ss.getActiveSheet();
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")
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);
}