/* * 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; }]);