blob: 0779ccc1ab0eb56ca7ad01e57a353cde41d0699b [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
var perfStats = null;
var currentRun = {};
function perfService(message) {
if (perfStats.numResults++ === 0) {
perfStats.firstMsg = message; // stored since it has "real" start time
}
perfStats.bytesReceived += message.length;
}
function clearPerfStats(inOrOut) {
perfStats = {
numResults: 0,
bytesReceived: 0,
firstMsg: null
};
document.getElementById('in_or_out').innerHTML = inOrOut;
// hide results fields
document.getElementById('results').style.display = 'none';
}
function completePerfStats() {
perfStats.timeEnded = new Date().getTime();
// get time started from the first sent message
perfStats.timeStarted = perfStats.firstMsg.substr(0, perfStats.firstMsg.indexOf(':'));
var timeUsedMs = perfStats.timeEnded - perfStats.timeStarted;
// fill in fields
document.getElementById('results_num_received').innerHTML = perfStats.numResults;
document.getElementById('results_bytes_received').innerHTML = perfStats.bytesReceived;
document.getElementById('results_time_used').innerHTML = timeUsedMs + 'ms';
document.getElementById('results_msgs_per_sec').innerHTML = (perfStats.numResults / (timeUsedMs / 1000));
document.getElementById('results_bytes_per_sec').innerHTML = (perfStats.bytesReceived / (timeUsedMs / 1000));
document.getElementById('results_referrer').innerHTML = (this['referer'] || 'n/a') + ' -- config: ' +
(gadgets.config.get('rpc')['passReferrer'] || '<empty>');
document.getElementById('test_running').style.display = 'none';
document.getElementById('results').style.display = '';
}
function syncCallbackService(toEcho) {
return toEcho;
}
function asyncCallbackService(toEcho) {
var self = this;
window.setTimeout(function() {
self.callback(toEcho);
}, 0);
}
function initPerfTest() {
clearPerfStats();
gadgets.rpc.register('perf_service', perfService);
gadgets.rpc.register('clear_perf_stats', clearPerfStats);
gadgets.rpc.register('complete_perf_stats', completePerfStats);
gadgets.rpc.register('sync_callback_service', syncCallbackService);
gadgets.rpc.register('async_callback_service', asyncCallbackService);
}
var alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 _-*&(){}'";
function sendPerfMessage() {
var msgToSend = currentRun.msg;
if (currentRun.curMsgId++ <= 1) {
var nowString = new Date().getTime() + ':';
msgToSend = nowString + currentRun.msg.substring(nowString.length);
}
gadgets.rpc.call(currentRun.targetId, 'perf_service', null, msgToSend);
if (currentRun.curMsgId < currentRun.endMsgId) {
// loop, giving up execution in case rpc technique demands it
window.setTimeout(sendPerfMessage, 0);
} else {
// send finisher
window.setTimeout(function() { gadgets.rpc.call(currentRun.targetId, 'complete_perf_stats', null); }, 0);
}
}
function runPerfTest(targetId) {
document.getElementById('test_running').style.display = '';
// initialize the current run
var num_msgs = document.getElementById('num_msgs').value;
var msg_size = document.getElementById('msg_size').value;
currentRun.targetId = targetId;
currentRun.curMsgId = 0;
currentRun.endMsgId = num_msgs;
var msg = [];
for (var i = 0; i < msg_size; ++i) {
msg[i] = alphabet.charAt(Math.round(Math.random(alphabet.length)));
}
currentRun.msg = msg.join('');
// clear local perf stats
clearPerfStats('(outbound)');
// clear target perf stats
gadgets.rpc.call(targetId, 'clear_perf_stats', null, '(inbound)');
// kick off the send loop
sendPerfMessage();
}
function runCallbackTest(targetId, isSync) {
document.getElementById('echo_test_result').innerHTML = '';
var service = (isSync ? '' : 'a') + 'sync_callback_service';
var echoValue = document.getElementById('echo_test_input').value;
var callback = function(response) {
document.getElementById('echo_test_result').innerHTML = response + ' at ' + new Date().toUTCString() + ' from referer: ' + this['referer'];
};
gadgets.rpc.call(targetId, service, callback, echoValue);
}