109 lines
3.5 KiB
JavaScript
109 lines
3.5 KiB
JavaScript
/*
|
|
* 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.
|
|
*/
|
|
|
|
/**
|
|
* A directive which displays frame rendering performance statistics for a
|
|
* Guacamole client.
|
|
*/
|
|
angular.module('client').directive('guacClientStatistics', [function guacClientStatistics() {
|
|
|
|
const directive = {
|
|
restrict: 'E',
|
|
templateUrl: 'app/ext/display-stats/templates/guacClientStatistics.html',
|
|
};
|
|
|
|
directive.scope = {
|
|
|
|
/**
|
|
* The Guacamole client to display frame rendering statistics for.
|
|
*
|
|
* @type ManagedClient
|
|
*/
|
|
client : '='
|
|
|
|
};
|
|
|
|
directive.controller = ['$scope', function guacClientStatisticsController($scope) {
|
|
|
|
/**
|
|
* Updates the displayed frame rendering statistics to the values
|
|
* within the given statistics object.
|
|
*
|
|
* @param {!Guacamole.Display.Statistics} stats
|
|
* An object containing general rendering performance statistics for
|
|
* the remote desktop, Guacamole server, and Guacamole client.
|
|
*/
|
|
var updateStatistics = function updateStatistics(stats) {
|
|
$scope.$apply(function statisticsChanged() {
|
|
$scope.statistics = stats;
|
|
});
|
|
};
|
|
|
|
/**
|
|
* Returns whether the given value is a defined value that should be
|
|
* rendered within the statistics toolbar.
|
|
*
|
|
* @param {number} value
|
|
* The value to test.
|
|
*
|
|
* @returns {!boolean}
|
|
* true if the given value should be rendered within the statistics
|
|
* toolbar, false otherwise.
|
|
*/
|
|
$scope.hasValue = function hasValue(value) {
|
|
return value || value === 0;
|
|
};
|
|
|
|
/**
|
|
* Rounds the given numeric value to the nearest hundredth (two decimal places).
|
|
*
|
|
* @param {!number} value
|
|
* The value to round.
|
|
*
|
|
* @param {!number}
|
|
* The given value, rounded to the nearest hundredth.
|
|
*/
|
|
$scope.round = function round(value) {
|
|
return Math.round(value * 100) / 100;
|
|
};
|
|
|
|
// Assign/remove onstatistics handlers to track the statistics of the
|
|
// current client
|
|
$scope.$watch('client', function clientChanged(client, oldClient) {
|
|
|
|
if (oldClient)
|
|
oldClient.managedDisplay.display.onstatistics = null;
|
|
|
|
client.managedDisplay.display.statisticWindow = 1000;
|
|
client.managedDisplay.display.onstatistics = updateStatistics;
|
|
|
|
});
|
|
|
|
// Clear onstatistics handler when directive is being unloaded
|
|
$scope.$on('$destroy', function scopeDestroyed() {
|
|
if ($scope.client)
|
|
$scope.client.managedDisplay.display.onstatistics = null;
|
|
});
|
|
|
|
}];
|
|
|
|
return directive;
|
|
|
|
}]);
|