From 3d7b8ee89b278e7bfc0ccad1fa78092450761086 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Mon, 11 Sep 2017 19:47:59 -0700 Subject: [PATCH] GUACAMOLE-394: Pull connection last active time from history records. --- .../auth/jdbc/connection/ConnectionModel.java | 33 ++++++++++++++++++ .../jdbc/connection/ModeledConnection.java | 2 +- .../auth/jdbc/connection/ConnectionMapper.xml | 34 ++++++++++++------- .../auth/jdbc/connection/ConnectionMapper.xml | 34 ++++++++++++------- .../auth/jdbc/connection/ConnectionMapper.xml | 34 ++++++++++++------- 5 files changed, 100 insertions(+), 37 deletions(-) diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionModel.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionModel.java index 788daa1b0..da454025d 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionModel.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ConnectionModel.java @@ -19,6 +19,7 @@ package org.apache.guacamole.auth.jdbc.connection; +import java.util.Date; import java.util.HashSet; import java.util.Set; import org.apache.guacamole.auth.jdbc.base.ChildObjectModel; @@ -92,6 +93,12 @@ public class ConnectionModel extends ChildObjectModel { */ private EncryptionMethod proxyEncryptionMethod; + /** + * The date and time that this connection was last used, or null if this + * connection has never been used. + */ + private Date lastActive; + /** * Creates a new, empty connection. */ @@ -341,6 +348,32 @@ public class ConnectionModel extends ChildObjectModel { this.sharingProfileIdentifiers = sharingProfileIdentifiers; } + /** + * Returns the date and time that this connection was last used, or null if + * this connection has never been used. + * + * @return + * The date and time that this connection was last used, or null if this + * connection has never been used. + */ + public Date getLastActive() { + return lastActive; + } + + /** + * Sets the date and time that this connection was last used. This value is + * expected to be set automatically via queries, derived from connection + * history records. It does NOT correspond to an actual column, and values + * set manually through invoking this function will not persist. + * + * @param lastActive + * The date and time that this connection was last used, or null if this + * connection has never been used. + */ + public void setLastActive(Date lastActive) { + this.lastActive = lastActive; + } + @Override public String getIdentifier() { diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java index c596b2771..eb392bc7b 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-base/src/main/java/org/apache/guacamole/auth/jdbc/connection/ModeledConnection.java @@ -235,7 +235,7 @@ public class ModeledConnection extends ModeledChildDirectoryObject + SELECT - connection_id, - connection_name, + guacamole_connection.connection_id, + guacamole_connection.connection_name, parent_id, protocol, max_connections, @@ -99,13 +100,16 @@ proxy_port, proxy_encryption_method, connection_weight, - failover_only + failover_only, + MAX(start_date) AS last_active FROM guacamole_connection - WHERE connection_id IN + JOIN guacamole_connection_history ON guacamole_connection_history.connection_id = guacamole_connection.connection_id + WHERE guacamole_connection.connection_id IN #{identifier,jdbcType=VARCHAR} - ; + + GROUP BY guacamole_connection.connection_id; SELECT primary_connection_id, sharing_profile_id FROM guacamole_sharing_profile @@ -123,7 +127,7 @@ SELECT guacamole_connection.connection_id, - connection_name, + guacamole_connection.connection_name, parent_id, protocol, max_connections, @@ -132,16 +136,19 @@ proxy_port, proxy_encryption_method, connection_weight, - failover_only + failover_only, + MAX(start_date) AS last_active FROM guacamole_connection JOIN guacamole_connection_permission ON guacamole_connection_permission.connection_id = guacamole_connection.connection_id + JOIN guacamole_connection_history ON guacamole_connection_history.connection_id = guacamole_connection.connection_id WHERE guacamole_connection.connection_id IN #{identifier,jdbcType=VARCHAR} AND user_id = #{user.objectID,jdbcType=INTEGER} - AND permission = 'READ'; + AND permission = 'READ' + GROUP BY guacamole_connection.connection_id; SELECT primary_connection_id, guacamole_sharing_profile.sharing_profile_id FROM guacamole_sharing_profile @@ -160,8 +167,8 @@ diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml index dd9265dfa..09bd51027 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-postgresql/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml @@ -39,6 +39,7 @@ javaType="org.apache.guacamole.net.auth.GuacamoleProxyConfiguration$EncryptionMethod"/> + SELECT - connection_id, - connection_name, + guacamole_connection.connection_id, + guacamole_connection.connection_name, parent_id, protocol, max_connections, @@ -99,13 +100,16 @@ proxy_port, proxy_encryption_method, connection_weight, - failover_only + failover_only, + MAX(start_date) AS last_active FROM guacamole_connection - WHERE connection_id IN + JOIN guacamole_connection_history ON guacamole_connection_history.connection_id = guacamole_connection.connection_id + WHERE guacamole_connection.connection_id IN #{identifier,jdbcType=INTEGER}::integer - ; + + GROUP BY guacamole_connection.connection_id; SELECT primary_connection_id, sharing_profile_id FROM guacamole_sharing_profile @@ -123,7 +127,7 @@ SELECT guacamole_connection.connection_id, - connection_name, + guacamole_connection.connection_name, parent_id, protocol, max_connections, @@ -132,16 +136,19 @@ proxy_port, proxy_encryption_method, connection_weight, - failover_only + failover_only, + MAX(start_date) AS last_active FROM guacamole_connection JOIN guacamole_connection_permission ON guacamole_connection_permission.connection_id = guacamole_connection.connection_id + JOIN guacamole_connection_history ON guacamole_connection_history.connection_id = guacamole_connection.connection_id WHERE guacamole_connection.connection_id IN #{identifier,jdbcType=INTEGER}::integer AND user_id = #{user.objectID,jdbcType=INTEGER} - AND permission = 'READ'; + AND permission = 'READ' + GROUP BY guacamole_connection.connection_id; SELECT primary_connection_id, guacamole_sharing_profile.sharing_profile_id FROM guacamole_sharing_profile @@ -160,8 +167,8 @@ diff --git a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml index 3e6819f06..d27b5282d 100644 --- a/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml +++ b/extensions/guacamole-auth-jdbc/modules/guacamole-auth-jdbc-sqlserver/src/main/resources/org/apache/guacamole/auth/jdbc/connection/ConnectionMapper.xml @@ -39,6 +39,7 @@ javaType="org.apache.guacamole.net.auth.GuacamoleProxyConfiguration$EncryptionMethod"/> + SELECT - connection_id, - connection_name, + [guacamole_connection].connection_id, + [guacamole_connection].connection_name, parent_id, protocol, max_connections, @@ -99,13 +100,16 @@ proxy_port, proxy_encryption_method, connection_weight, - failover_only + failover_only, + MAX(start_date) AS last_active FROM [guacamole_connection] - WHERE connection_id IN + JOIN [guacamole_connection_history] ON [guacamole_connection_history].connection_id = [guacamole_connection].connection_id + WHERE [guacamole_connection].connection_id IN #{identifier,jdbcType=INTEGER} - ; + + GROUP BY [guacamole_connection].connection_id; SELECT primary_connection_id, sharing_profile_id FROM [guacamole_sharing_profile] @@ -123,7 +127,7 @@ SELECT [guacamole_connection].connection_id, - connection_name, + [guacamole_connection].connection_name, parent_id, protocol, max_connections, @@ -132,16 +136,19 @@ proxy_port, proxy_encryption_method, connection_weight, - failover_only + failover_only, + MAX(start_date) AS last_active FROM [guacamole_connection] JOIN [guacamole_connection_permission] ON [guacamole_connection_permission].connection_id = [guacamole_connection].connection_id + JOIN [guacamole_connection_history] ON [guacamole_connection_history].connection_id = [guacamole_connection].connection_id WHERE [guacamole_connection].connection_id IN #{identifier,jdbcType=INTEGER} AND user_id = #{user.objectID,jdbcType=INTEGER} - AND permission = 'READ'; + AND permission = 'READ' + GROUP BY [guacamole_connection].connection_id; SELECT primary_connection_id, [guacamole_sharing_profile].sharing_profile_id FROM [guacamole_sharing_profile] @@ -160,8 +167,8 @@