From 2b84c56b0cb633fa45f0a0b445b5ef1ac5c1d129 Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Mon, 30 Jan 2017 13:09:33 -0600 Subject: [PATCH] trigger fetch urls by url type to avoid Google Apps script execution timeout limitations --- gs/type/RefreshData.gs | 126 ++++++++++++++++++++++++++--------------- 1 file changed, 79 insertions(+), 47 deletions(-) diff --git a/gs/type/RefreshData.gs b/gs/type/RefreshData.gs index 9d12c1c16..4ab46e881 100644 --- a/gs/type/RefreshData.gs +++ b/gs/type/RefreshData.gs @@ -39,7 +39,6 @@ function refreshJson() { range.setValues(data); refreshParsed(); refreshPublic(); - refreshHttpResponses(); } function refreshParsed() { @@ -79,52 +78,6 @@ function refreshPublic() { } } -function refreshHttpResponses() { - var sheetNameData = typeSheetPrefix[ss.getName()] + "Data"; - var sheetData = ss.getSheetByName(sheetNameData); - var sheetNameStatuses = typeSheetPrefix[ss.getName()] + "UrlStatuses"; - var sheetStatuses = ss.getSheetByName(sheetNameStatuses); - copyListNames(sheetData, sheetStatuses); - var listDataMax = getNumLists(sheetData) - var urlHeaders = findUrlColumnHeaders(sheetData); - for (i = 0; i < urlHeaders.length; i++) { - var currentUrlType = urlHeaders[i]; - var colHeaderData = findColumnHeader(sheetData, currentUrlType); - var colHeaderStatuses = findColumnHeader(sheetStatuses, currentUrlType); - var rangeData = sheetData.getRange(colHeaderData + "2:" + colHeaderData + (1 + listDataMax)); - var rangeStatuses = sheetStatuses.getRange(colHeaderStatuses + "2:" + colHeaderStatuses); - rangeStatuses.clearContent(); - for (j = 2; j <= rangeData.getNumRows(); j++) { - var rangeStatus = sheetStatuses.getRange(colHeaderStatuses + j); - var url = rangeData.getCell(j - 1, 1).getValue(); - if (url) { - try { - rangeStatus.setValue(UrlFetchApp.fetch(url).getResponseCode()); - } catch (err) { - rangeStatus.setValue(err.message); - } - } - } - } -} - -function copyListNames(sheetData, sheetStatuses) { - var sourceRange = sheetData.getRange("A1:A"); - var targetRange = sheetStatuses.getRange("A1:A"); - targetRange.clearContent(); - sourceRange.copyTo(targetRange); -} - -function getNumLists(sheetData) { - var listHeaderData = findColumnHeader(sheetData, "list"); - var listData = sheetData.getRange(listHeaderData + "2:" + listHeaderData); - for (i = 1; i <= listData.getNumRows(); i++) { - if (!(listData.getCell(i, 1).getValue())) { - return i - 1; - } - } -} - function findColumnHeader(sheet, header) { var headerRange = sheet.getRange("A1:1"); var headerData = headerRange.getValues(); @@ -428,4 +381,83 @@ function refreshMasterPublic(sheet) { rangeFull.clearContent(); rangeFull.setValues(data); } +} + +// refresh each type of url with a separate trigger due to Apps Script runtime limitations +function triggerRefreshHttpResponses1() { + refreshHttpResponses(1); +} + +function triggerRefreshHttpResponses2() { + refreshHttpResponses(2); +} + +function triggerRefreshHttpResponses3() { + refreshHttpResponses(3); +} + +function triggerRefreshHttpResponses4() { + refreshHttpResponses(4); +} + +function triggerRefreshHttpResponses5() { + refreshHttpResponses(5); +} + +function triggerRefreshHttpResponses6() { + refreshHttpResponses(6); +} + +function triggerRefreshHttpResponses7() { + refreshHttpResponses(7); +} + +function triggerRefreshHttpResponses8() { + refreshHttpResponses(8); +} + +function refreshHttpResponses(triggerNum) { + var sheetNameData = typeSheetPrefix[ss.getName()] + "Data"; + var sheetData = ss.getSheetByName(sheetNameData); + var sheetNameStatuses = typeSheetPrefix[ss.getName()] + "UrlStatuses"; + var sheetStatuses = ss.getSheetByName(sheetNameStatuses); + copyListNames(sheetData, sheetStatuses); + var listDataMax = getNumLists(sheetData) + var urlHeaders = findUrlColumnHeaders(sheetData); + if (urlHeaders.length >= triggerNum) { + var currentUrlType = urlHeaders[triggerNum - 1]; + var colHeaderData = findColumnHeader(sheetData, currentUrlType); + var colHeaderStatuses = findColumnHeader(sheetStatuses, currentUrlType); + var rangeData = sheetData.getRange(colHeaderData + "2:" + colHeaderData + (1 + listDataMax)); + var rangeStatuses = sheetStatuses.getRange(colHeaderStatuses + "2:" + colHeaderStatuses); + rangeStatuses.clearContent(); + for (i = 2; i <= rangeData.getNumRows(); i++) { + var rangeStatus = sheetStatuses.getRange(colHeaderStatuses + i); + var url = rangeData.getCell(i - 1, 1).getValue(); + if (url) { + try { + rangeStatus.setValue(UrlFetchApp.fetch(url).getResponseCode()); + } catch (err) { + rangeStatus.setValue(err.message); + } + } + } + } +} + +function copyListNames(sheetData, sheetStatuses) { + var sourceRange = sheetData.getRange("A1:A"); + var targetRange = sheetStatuses.getRange("A1:A"); + targetRange.clearContent(); + sourceRange.copyTo(targetRange); +} + +function getNumLists(sheetData) { + var listHeaderData = findColumnHeader(sheetData, "list"); + var listData = sheetData.getRange(listHeaderData + "2:" + listHeaderData); + for (i = 1; i <= listData.getNumRows(); i++) { + if (!(listData.getCell(i, 1).getValue())) { + return i - 1; + } + } } \ No newline at end of file