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.');
}
}