var submitLogs = function()

in Frontend/connect-ccp-metric-worker.js [116:221]


var submitLogs = function() {
  console.log("Submitting logs to metrics API: "+ Date.now());
  if(busy < 1 && completeObjectStoreLength > 0 && apiGatewayEndpoint) {
    //Get all data from IDB and format for API Gateway
    if (debug) {
      var transaction = db.transaction(["contactsPending", "contactsComplete", "contactsSubmitting"], "readwrite");
    } else {
      var transaction = db.transaction(["contactsPending", "contactsComplete"], "readwrite");
    }
    var data = {};

    busy++;
    transaction.oncomplete = function(event) {
      var completeCountRequest = db.transaction(["contactsComplete"]).objectStore("contactsComplete").count();
      busy++
      completeCountRequest.onsuccess = function () {
        completeObjectStoreLength = completeCountRequest.result;
        busy--;
      };
      busy--;
      //Create xhr to send data to AWS
    }
    transaction.onerror = function(event) {
      //Handle for errors
      console.log('error with transaction')
      var completeCountRequest = db.transaction(["contactsComplete"]).objectStore("contactsComplete").count();
      busy++
      completeCountRequest.onsuccess = function () {
        completeObjectStoreLength = completeCountRequest.result;
        busy--;
      };
      busy--;
    }
    var completeObjectStore = transaction.objectStore("contactsComplete");
    if (debug) var sentObjectStore = transaction.objectStore("contactsSubmitting");
    var getAll = completeObjectStore.getAll();
    getAll.onsuccess = function () {
      if (debug) {
        var saveSubmissionData = sentObjectStore.add({requestPayload: getAll.result})
        saveSubmissionData.onsuccess = function () {
          //Save ID of request IDB record in case of reversion upon API call failure.
          console.log("requestPayloadId: " + saveSubmissionData.result);
          var requestPayloadId = saveSubmissionData.result;
          completeObjectStore.clear();
          var saveResult = saveSubmissionData.result;
          data = getAll.result;
          console.log("Data for submission");
          console.log(getAll.result);

          //Make post request
          var xhr = new XMLHttpRequest();
          xhr.open("POST", apiGatewayEndpoint);
          xhr.setRequestHeader('Content-Type', 'application/json');
          xhr.send(JSON.stringify({DeliveryStreamName:"CallConnectionFirehose", Record: {Data: btoa(JSON.stringify(data).slice(1,-1)+'\n')}}));
          xhr.requestId = requestPayloadId;
          xhr.onreadystatechange = function() {
              postMessage(xhr.responseText);
              if (xhr.status = 200) {
                // If successful, remove from browser memory
                postMessage({type: 'contactSubmitted', contacts: data.map(a => a.contactId)});
                console.log('xhr success: ');
                console.log(xhr.requestId);
              } else {
                console.log('xhr failure: ');
                console.log(xhr.requestId);
                transaction.abort();
              }
              
          };
          xhr.onerror = function () {
            console.log('xhr error: ');
            console.log(xhr.requestId);
          };

        }
      } else {
        completeObjectStore.clear();
        data = getAll.result;
        console.log("Data for submission");
        console.log(getAll.result);

        //Make post request
        var xhr = new XMLHttpRequest();
        xhr.open("POST", apiGatewayEndpoint);
        xhr.setRequestHeader('Content-Type', 'application/json');
        xhr.send(JSON.stringify({DeliveryStreamName:"CallConnectionFirehose", Record: {Data: btoa(JSON.stringify(data).slice(1,-1)+'\n')}}));
        xhr.onreadystatechange = function() {
            postMessage(xhr.responseText);
            if (xhr.status = 200) {
              postMessage({type: 'contactSubmitted', contacts: data.map(a => a.contactId)});
              console.log('xhr success, request id:' + xhr.requestId);
            } else {
              console.log('xhr failure, request id:' + xhr.requestId);
              transaction.abort();
            }
            
        };
        xhr.onerror = function () {
          transaction.abort();
        };
      }
    }
  } else if (!apiGatewayEndpoint) {
    console.log('API Endpoint is not set.');
  }
}