blob: 9741189421bb37dc283f71486ac962ec3f574c0d [file] [log] [blame]
// Copyright (c) 2000-2019 Ericsson Telecom AB Telecom AB //
// All rights reserved. This program and the accompanying materials are made available under the //
// terms of the Eclipse Public License v2.0 which accompanies this distribution, and is available at //
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html //
///////////////////////////////////////////////////////////////////////////////////////////////////////
function CDsRestAPIComm(p_extension) {
"use strict";
var mThis = this;
var mRequestsDisabled = false;
var mTimeLastRequestFailed = 0;
var mNoAnswer = [{"node":{"val":"No answer", "tp":3}}];
// disable cache (mainly for IE, it works all right with firefox and chrome)
$.ajaxSetup({cache: false});
/* This gives a more sane initial value than being zero. */
var start = Date.now();
var ajaxCallURL = "api.dsapi";
if (p_extension != undefined) {
ajaxCallURL = "api." + p_extension;
}
/** public functions */
this.ajaxCall = function(aData, aHandler) {
if (mRequestsDisabled) {
aData = {"requests": [], "timeOut": 5.0};
}
var end = Date.now();
$('#cll_DsRestAPI_FPS').html((1000 / (end - start)).toFixed(2)); // diff to previous ajaxCall's end.
start = Date.now();
$.ajax({
url: ajaxCallURL,
type: 'POST',
data: JSON.stringify(aData),
//contentType: 'application/json',
//accepts: 'application/json',
dataType: 'text',
cache: false,
success: function(data, textStatus, jqXHR) {
var end = Date.now();
if (mRequestsDisabled) {
mRequestsDisabled = false;
// if we were disconnected for more than 15 secs, reload the page
if (end - mTimeLastRequestFailed > 15000) {
location.reload();
} else {
aHandler(mNoAnswer);
}
} else {
$('#cll_DsRestAPI_serverTime').html(parseFloat(jqXHR.getResponseHeader("X-EPTF-CLL-ServerTime")).toFixed(2));
$('#cll_DsRestAPI_roundtrip').html(end - start);
$('#cll_DsRestAPI_dataSize').html(data.length);
$('#cll_DsRestAPI_error').html("");
$('#cll_DsRestAPI_error').addClass("hidden");
if (data && data !== "" && data !== " ")
{
var contentlist;
try {
contentlist = JSON.parse(data).contentList;
} catch (e) {
mThis.handleError("Badly encoded response received from server", e.message, aHandler, end, start);
return;
}
if (contentlist.length == 1 && contentlist[0].node != undefined && contentlist[0].node.val == "timeout")
{
mThis.handleError("Timeout received from server", "Overload", aHandler, end, start);
}
else
aHandler(contentlist);
}
else
aHandler(mNoAnswer);
}
},
error: function(jqXHR, textStatus, errorThrown) {
mThis.handleError("UI has been disconnected", textStatus, aHandler, end, start);
},
timeout: 10000
});
};
this.handleError = function(aState, aError, aHandler, aEnd, aStart)
{
if (!mRequestsDisabled) {
mRequestsDisabled = true;
mTimeLastRequestFailed = Date.now();
}
$('#cll_DsRestAPI_roundtrip').html(aEnd - aStart);
$('#cll_DsRestAPI_error').html("State: " + aState + " <br/>Error: " + aError + "<br/>Action: reconnecting");
$('#cll_DsRestAPI_error').removeClass("hidden");
aHandler(mNoAnswer);
};
}