mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
GUAC-586: Use data source when determining active user count.
This commit is contained in:
@@ -93,45 +93,38 @@ angular.module('groupList').directive('guacGroupList', [function guacGroupList()
|
||||
|
||||
// Required services
|
||||
var activeConnectionService = $injector.get('activeConnectionService');
|
||||
var dataSourceService = $injector.get('dataSourceService');
|
||||
|
||||
// Required types
|
||||
var GroupListItem = $injector.get('GroupListItem');
|
||||
|
||||
/**
|
||||
* The number of active connections associated with a given
|
||||
* connection identifier. If this information is unknown, or there
|
||||
* are no active connections for a given identifier, no number will
|
||||
* be stored.
|
||||
* Map of data source identifier to the number of active
|
||||
* connections associated with a given connection identifier.
|
||||
* If this information is unknown, or there are no active
|
||||
* connections for a given identifier, no number will be stored.
|
||||
*
|
||||
* @type Object.<String, Number>
|
||||
* @type Object.<String, Object.<String, Number>>
|
||||
*/
|
||||
var connectionCount = {};
|
||||
|
||||
/**
|
||||
* A list of all items which should appear at the root level. As
|
||||
* connections and connection groups from multiple data sources may
|
||||
* be included in a guacGroupList, there may be multiple root
|
||||
* items, even if the root connection group is shown.
|
||||
*
|
||||
* @type GroupListItem[]
|
||||
*/
|
||||
$scope.rootItems = [];
|
||||
|
||||
// Count active connections by connection identifier
|
||||
activeConnectionService.getActiveConnections()
|
||||
.success(function activeConnectionsRetrieved(activeConnections) {
|
||||
|
||||
// Count each active connection by identifier
|
||||
angular.forEach(activeConnections, function addActiveConnection(activeConnection) {
|
||||
|
||||
// If counter already exists, increment
|
||||
var identifier = activeConnection.connectionIdentifier;
|
||||
if (connectionCount[identifier])
|
||||
connectionCount[identifier]++;
|
||||
|
||||
// Otherwise, initialize counter to 1
|
||||
else
|
||||
connectionCount[identifier] = 1;
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
/**
|
||||
* Returns the number of active usages of a given connection.
|
||||
*
|
||||
* @param {String} dataSource
|
||||
* The identifier of the data source containing the given
|
||||
* connection.
|
||||
*
|
||||
* @param {Connection} connection
|
||||
* The connection whose active connections should be counted.
|
||||
*
|
||||
@@ -139,8 +132,8 @@ angular.module('groupList').directive('guacGroupList', [function guacGroupList()
|
||||
* The number of currently-active usages of the given
|
||||
* connection.
|
||||
*/
|
||||
var countActiveConnections = function countActiveConnections(connection) {
|
||||
return connectionCount[connection.identifier];
|
||||
var countActiveConnections = function countActiveConnections(dataSource, connection) {
|
||||
return connectionCount[dataSource][connection.identifier];
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -178,12 +171,22 @@ angular.module('groupList').directive('guacGroupList', [function guacGroupList()
|
||||
// Set contents whenever the connection group is assigned or changed
|
||||
$scope.$watch('connectionGroups', function setContents(connectionGroups) {
|
||||
|
||||
// Reset stored data
|
||||
var dataSources = [];
|
||||
$scope.rootItems = [];
|
||||
connectionCount = {};
|
||||
|
||||
// If connection groups are given, add them to the interface
|
||||
if (connectionGroups) {
|
||||
|
||||
// Add each provided connection group
|
||||
angular.forEach(connectionGroups, function addConnectionGroup(connectionGroup, dataSource) {
|
||||
|
||||
// Prepare data source for active connection counting
|
||||
dataSources.push(dataSource);
|
||||
connectionCount[dataSource] = {};
|
||||
|
||||
// Create root item for current connection group
|
||||
var rootItem = GroupListItem.fromConnectionGroup(dataSource, connectionGroup,
|
||||
!!$scope.connectionTemplate, countActiveConnections);
|
||||
|
||||
@@ -199,6 +202,32 @@ angular.module('groupList').directive('guacGroupList', [function guacGroupList()
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
// Count active connections by connection identifier
|
||||
dataSourceService.apply(
|
||||
activeConnectionService.getActiveConnections,
|
||||
dataSources
|
||||
)
|
||||
.then(function activeConnectionsRetrieved(activeConnectionMap) {
|
||||
|
||||
// Within each data source, count each active connection by identifier
|
||||
angular.forEach(activeConnectionMap, function addActiveConnections(activeConnections, dataSource) {
|
||||
angular.forEach(activeConnections, function addActiveConnection(activeConnection) {
|
||||
|
||||
// If counter already exists, increment
|
||||
var identifier = activeConnection.connectionIdentifier;
|
||||
if (connectionCount[dataSource][identifier])
|
||||
connectionCount[dataSource][identifier]++;
|
||||
|
||||
// Otherwise, initialize counter to 1
|
||||
else
|
||||
connectionCount[dataSource][identifier] = 1;
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
|
@@ -143,7 +143,9 @@ angular.module('groupList').factory('GroupListItem', ['ConnectionGroup', functio
|
||||
* @param {Function} [countActiveConnections]
|
||||
* A getter which returns the current number of active connections for
|
||||
* the given connection. If omitted, the number of active connections
|
||||
* known at the time this function was called is used instead.
|
||||
* known at the time this function was called is used instead. This
|
||||
* function will be passed, in order, the data source identifier and
|
||||
* the connection in question.
|
||||
*
|
||||
* @returns {GroupListItem}
|
||||
* A new GroupListItem which represents the given connection.
|
||||
@@ -169,7 +171,7 @@ angular.module('groupList').factory('GroupListItem', ['ConnectionGroup', functio
|
||||
|
||||
// Use getter, if provided
|
||||
if (countActiveConnections)
|
||||
return countActiveConnections(connection);
|
||||
return countActiveConnections(dataSource, connection);
|
||||
|
||||
return connection.activeConnections;
|
||||
|
||||
@@ -201,13 +203,16 @@ angular.module('groupList').factory('GroupListItem', ['ConnectionGroup', functio
|
||||
* @param {Function} [countActiveConnections]
|
||||
* A getter which returns the current number of active connections for
|
||||
* the given connection. If omitted, the number of active connections
|
||||
* known at the time this function was called is used instead.
|
||||
* known at the time this function was called is used instead. This
|
||||
* function will be passed, in order, the data source identifier and
|
||||
* the connection group in question.
|
||||
*
|
||||
* @param {Function} [countActiveConnectionGroups]
|
||||
* A getter which returns the current number of active connections for
|
||||
* the given connection group. If omitted, the number of active
|
||||
* connections known at the time this function was called is used
|
||||
* instead.
|
||||
* instead. This function will be passed, in order, the data source
|
||||
* identifier and the connection group in question.
|
||||
*
|
||||
* @returns {GroupListItem}
|
||||
* A new GroupListItem which represents the given connection group,
|
||||
@@ -257,7 +262,7 @@ angular.module('groupList').factory('GroupListItem', ['ConnectionGroup', functio
|
||||
|
||||
// Use getter, if provided
|
||||
if (countActiveConnectionGroups)
|
||||
return countActiveConnectionGroups(connectionGroup);
|
||||
return countActiveConnectionGroups(dataSource, connectionGroup);
|
||||
|
||||
return connectionGroup.activeConnections;
|
||||
|
||||
|
Reference in New Issue
Block a user