Francesco Romani has uploaded a new change for review.

Change subject: WIP: core: bulk queries for VMConsoleProxyServlet #2
......................................................................

WIP: core: bulk queries for VMConsoleProxyServlet #2

WORK IN PROGRESS

Introduce new entity, VMConsole, to represent the
console endpoint to connect using virtio serial console

Add bulk queries to retrieve all of them for the consumption
from VMConsoleProxyServlet.

Change-Id: I905b88a1bec0883a6826b913d81bc21520bf406f
Signed-off-by: Francesco Romani <[email protected]>
---
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmConsole.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAO.java
A 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAODbFacadeImpl.java
M packaging/dbscripts/create_views.sql
A packaging/dbscripts/vm_consoles_sp.sql
6 files changed, 187 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/40699/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmConsole.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmConsole.java
new file mode 100644
index 0000000..6a0e6ff
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmConsole.java
@@ -0,0 +1,61 @@
+package org.ovirt.engine.core.common.businessentities;
+
+import org.ovirt.engine.core.common.utils.ObjectUtils;
+import org.ovirt.engine.core.compat.Guid;
+
+
+public class VmConsole  extends IVdcQueryable {
+    private static final long serialVersionUID = -2753306386502558044L; // 
FIXME
+
+    private Guid vm_guid;
+
+    private String vm_name;
+
+    private String address;
+
+    private String name;
+
+    public void setVmGuid(Guid vm_guid) { this.vm_guid = vm_guid; }
+
+    public Guid getVmGuid() { return vm_guid; }
+
+    public void setAddress(String address) { this.address = address; }
+
+    public String getAddress() { return address; }
+
+    public void setVmName(String vm_name) { this.vm_name = vm_name; }
+
+    public String getVmName() { return vm_name; }
+
+    public void setName(String name) { this.name = name; }
+
+    public String getName() { return name; }
+
+    public VmConsole() {
+        vm_guid = Guid.Empty;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) return true;
+        if (obj == null || getClass() != obj.getClass()) return false;
+
+        VmConsole other = (VmConsole) obj;
+        return ObjectUtils.objectsEqual(vm_guid, other.vm_guid) &&
+               ObjectUtils.objectsEqual(vm_name, other.vm_name) &&
+               ObjectUtils.objectsEqual(address, other.address) &&
+               ObjectUtils.objectsEqual(name, other.name);
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = prime;
+        result = prime * result + ((vm_guid == null) ? 0 : vm_guid.hashCode());
+        result = prime * result + ((vm_name == null) ? 0 : vm_name.hashCode());
+        result = prime * result + ((address == null) ? 0 : address.hashCode());
+        result = prime * result + ((name == null) ? 0 : name.hashCode());
+        return result;
+    }
+
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
index 53a876a..5675a8e 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dal/dbbroker/DbFacade.java
@@ -39,6 +39,7 @@
 import org.ovirt.engine.core.common.businessentities.VdsNumaNode;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.common.businessentities.VdsStatistics;
+import org.ovirt.engine.core.common.businessentities.VmConsole;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.businessentities.VmDynamic;
 import org.ovirt.engine.core.common.businessentities.VmIcon;
@@ -125,6 +126,7 @@
 import org.ovirt.engine.core.dao.VdsStatisticsDAO;
 import org.ovirt.engine.core.dao.VmAndTemplatesGenerationsDAO;
 import org.ovirt.engine.core.dao.VmDAO;
+import org.ovirt.engine.core.dao.VmConsoleDAO;
 import org.ovirt.engine.core.dao.VmDeviceDAO;
 import org.ovirt.engine.core.dao.VmDynamicDAO;
 import org.ovirt.engine.core.dao.VmGuestAgentInterfaceDao;
@@ -238,6 +240,7 @@
             put(UserProfile.class, UserProfileDAO.class);
             put(VmIcon.class, VmIconDao.class);
             put(VmIconDefault.class, VmIconDefaultDao.class);
+            put(VmConsole.class, VmConsoleDAO.class);
         }
     };
 
@@ -440,6 +443,15 @@
     }
 
     /**
+     * Returns the singleton instance of {@link VmConsoleDAO}.
+     *
+     * @return the dao
+     */
+    public VmConsoleDAO getVmConsoleDao() {
+        return getDao(VmConsoleDAO.class);
+    }
+
+    /**
      * Returns the singleton instance of {@link VdsDAO}.
      *
      * @return the dao
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAO.java
new file mode 100644
index 0000000..e0fcb3f
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAO.java
@@ -0,0 +1,29 @@
+package org.ovirt.engine.core.dao;
+
+import org.ovirt.engine.core.common.businessentities.VmConsole;
+import org.ovirt.engine.core.compat.Guid;
+
+import java.util.List;
+
+public interface VmConsoleDAO extends DAO {
+    /**
+     * Retrieves the VM console with the specified name.
+     *
+     * @param userGuid
+     *            guid of the user performing the query
+     * @param name
+     *            the name
+     * @return the VM console, or <code>null</code> if the name was invalid
+     */
+    VmConsole get(Guid userGuid, String name);
+
+    /**
+     * Retrieves all vm consoles.
+     *
+     * @param userGuid
+     *            guid of the user performing the query
+     *
+     * @return the collection of all vm consoles
+     */
+    List<VmConsole> getAllForUser(Guid userGuid);
+}
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAODbFacadeImpl.java
new file mode 100644
index 0000000..54e428c
--- /dev/null
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmConsoleDAODbFacadeImpl.java
@@ -0,0 +1,50 @@
+package org.ovirt.engine.core.dao;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.List;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.ovirt.engine.core.common.businessentities.VmConsole;
+import org.ovirt.engine.core.compat.Guid;
+import org.springframework.jdbc.core.RowMapper;
+import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
+
+@Named
+@Singleton
+public class VmConsoleDAODbFacadeImpl extends BaseDAODbFacade implements 
VmConsoleDAO {
+
+    private static class VmConsoleRowMapper implements RowMapper<VmConsole> {
+
+        public static final VmConsoleRowMapper instance = new 
VmConsoleRowMapper();
+
+        @Override
+        public VmConsole mapRow(ResultSet rs, int rowNum) throws SQLException {
+            VmConsole console = new VmConsole();
+            console.setVmGuid(getGuidDefaultEmpty(rs, "vm_guid"));
+            console.setVmName(rs.getString("vm_name"));
+            console.setAddress(rs.getString("address"));
+            console.setName(rs.getString("name"));
+            return console;
+        }
+    }
+
+    @Override
+    public VmConsole get(Guid userGuid, String name) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("user_id", userGuid)
+                .addValue("name", name);
+
+        return getCallsHandler().executeRead("GetVmConsoleForUserByName", 
VmConsoleRowMapper.instance, parameterSource);
+    }
+
+    @Override
+    public List<VmConsole> getAllForUser(Guid userGuid) {
+        MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
+                .addValue("user_id", userGuid);
+
+        return getCallsHandler().executeReadList("GetAllVmConsolesForUser", 
VmConsoleRowMapper.instance, parameterSource);
+    }
+}
diff --git a/packaging/dbscripts/create_views.sql 
b/packaging/dbscripts/create_views.sql
index 3ec0a6f..aa9e16b 100644
--- a/packaging/dbscripts/create_views.sql
+++ b/packaging/dbscripts/create_views.sql
@@ -3257,3 +3257,7 @@
 FROM user_profiles
 INNER JOIN users ON user_profiles.user_id = users.user_id;
 
+CREATE OR REPLACE VIEW vm_consoles AS
+SELECT vms.vm_guid, vms.vm_name, vds_interface.addr AS address, '' AS 
console_name
+FROM vms
+INNER JOIN vds_interface ON vms.run_on_vds = vds_interface.vds_id;
diff --git a/packaging/dbscripts/vm_consoles_sp.sql 
b/packaging/dbscripts/vm_consoles_sp.sql
new file mode 100644
index 0000000..b2f6889
--- /dev/null
+++ b/packaging/dbscripts/vm_consoles_sp.sql
@@ -0,0 +1,31 @@
+
+----------------------------------------------------------------
+-- [vm_consoles] Table
+--
+
+
+Create or replace FUNCTION GetVmConsoleForUserByName(v_user_id UUID, v_name 
VARCHAR(50))
+RETURNS SETOF vm_consoles STABLE
+AS $procedure$
+BEGIN
+    RETURN QUERY
+      SELECT vm_consoles.*
+      FROM vm_consoles
+      inner join permissions on vm_consoles.vm_guid = permissions.object_id
+      WHERE permissions.ad_element_id = v_user_id
+        AND vm_consoles.name = v_name
+END; $procedure$
+LANGUAGE plpgsql;
+
+
+
+Create or replace FUNCTION GetAllVmConsolesForUser(v_user_id UUID) RETURNS 
SETOF vm_consoles STABLE
+   AS $procedure$
+BEGIN
+    RETURN QUERY
+      SELECT vm_consoles.*
+      FROM vm_consoles
+      inner join permissions on vm_consoles.vm_guid = permissions.object_id
+      WHERE permissions.ad_element_id = v_user_id;
+END; $procedure$
+LANGUAGE plpgsql;


-- 
To view, visit https://gerrit.ovirt.org/40699
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I905b88a1bec0883a6826b913d81bc21520bf406f
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to