blob: 4dc6b8a15f725bae32574e2bd27ab275b461f2b5 [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.
*/
/**
* 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;
}]);