Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
DsRestAPIComm.js 4.09 KiB
// Copyright (c) 2000-2017 Ericsson 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 !== " ")
                    {
                        try {
                            var contentlist = JSON.parse(data).contentList;
                            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);
                        } catch (e) {
                            mThis.handleError("Badly encoded response received from server", e.message, aHandler, end, start);
                        }
                    }
                    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);
    };
}