--- /dev/null
+<div class="container-fluid text-center">
+ <div class="alert alert-info alert-less-pad strong-text-2">
+ <span>[% l('Webclient Latency Test') %]</span>
+ </div>
+</div>
+
+<div class="row">
+ <div class="col-md-8">
+ <div class="panel panel-default">
+ <div class="panel-heading">[% l('Server Details') %]</div>
+ <div class="panel-body">
+ <!-- <div class="row pad-vert nav-pills-like-tabs">
+ <div class="col-md-6">[% l('Evergreen Version') %]</div>
+ <div class="col-md-6">{{context.version}}</div>
+ </div> -->
+ <div class="row pad-vert">
+ <div class="col-md-6">[% l('Hostname') %]</div>
+ <div class="col-md-6">{{hostname}}</div>
+ </div>
+ </div>
+ </div><!--panel-->
+ </div>
+</div>
+<div class="row">
+ <div class="col-md-8">
+ <h2>[% l('Latency Test') %]</h2>
+ <p>[% |l %]This will measure the websocket latency between your workstation client and the Evergreen server at the host above.[% END %]
+ </p>
+ <button ng-disable="isTesting" ng-click="testLatency()" type="button" class="btn btn-primary">Start Test</button>
+ <button ng-click='clearTestData()' type="button" class="btn btn-secondary">Clear</button>
+ <ol id="pingData">
+ <p>Latency results for {{hostname}}. Average Latency: <span ng-bind="avrg"></span> ms</p>
+ <li ng-show="tests.length" ng-repeat="t in tests">Time: {{t.t}} Latency: {{t.l}} ms</li>
+ </ol>
+ <button ng-disabled="!canCopyCommand" ng-click="copyTests()" type="button" class="btn btn-light btn-sm">Copy to Clipboard</button>
+ </div>
+</div>
+
+
+
+
resolve : resolver
});
+ $routeProvider.when('/admin/workstation/tests', {
+ templateUrl: './admin/workstation/t_tests',
+ controller: 'testsCtrl',
+ resolve : resolver
+ });
+
// default page
$routeProvider.otherwise({
templateUrl : './admin/workstation/t_splash',
}])
+/*
+ * Home of the Latency tester
+ * */
+.controller('testsCtrl', ['$scope', '$location', 'egCore', function($scope, $location, egCore) {
+ $scope.hostname = $location.host();
+
+ $scope.tests = [];
+ $scope.clearTestData = function(){
+ $scope.tests = [];
+ numPings = 0;
+ }
+
+ $scope.isTesting = false;
+ $scope.avrg = 0; // avrg latency
+ $scope.canCopyCommand = document.queryCommandSupported('copy');
+ var numPings = 0;
+ // fetch first 10
+
+ function calcAverage(){
+
+ if ($scope.tests.length == 0) return 0;
+
+ if ($scope.tests.length == 1) return $scope.tests[0].l;
+
+ var sum = 0;
+ angular.forEach($scope.tests, function(t){
+ sum += t.l;
+ });
+
+ return sum / $scope.tests.length;
+ }
+
+ function ping(){
+ $scope.isTesting = true;
+ var t = Date.now();
+ egCore.net.request(
+ "open-ils.pcrud", "opensrf.system.echo", "ping"
+ ).then(function(resp){
+ var t2 = Date.now();
+ var latency = t2 - t;
+ $scope.tests.push({t: new Date(t), l: latency});
+ console.log("Start: " + t + " and end: " + t2);
+ console.log("Latency: " + latency);
+ console.log(resp);
+ }).then(function(){
+ $scope.avrg = calcAverage();
+ numPings++;
+ $scope.isTesting = false;
+ });
+ }
+
+ $scope.testLatency = function(){
+
+ if (numPings >= 10){
+ ping(); // just ping once after the initial ten
+ } else {
+ for (var i=0; i<10; i++){
+ ping();
+ }
+ }
+ }
+
+ $scope.copyTests = function(){
+
+ var lNode = document.querySelector('#pingData');
+ var r = document.createRange();
+ r.selectNode(lNode);
+ var sel = window.getSelection();
+ sel.removeAllRanges();
+ sel.addRange(r);
+ document.execCommand('copy');
+ }
+
+}])
+
+