From 90afcf2f85759830e0085c18726264903a8fe08e Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Thu, 9 May 2024 02:56:07 +0530 Subject: [PATCH] metrics: optimise code and query to get summed cpu sockets Signed-off-by: Rohit Yadav --- .../src/main/java/com/cloud/host/dao/HostDao.java | 2 ++ .../main/java/com/cloud/host/dao/HostDaoImpl.java | 14 ++++++++++++++ .../cloudstack/metrics/MetricsServiceImpl.java | 8 +------- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java b/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java index 423d79a90c8..0022b4c4f86 100644 --- a/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java +++ b/engine/schema/src/main/java/com/cloud/host/dao/HostDao.java @@ -45,6 +45,8 @@ public interface HostDao extends GenericDao, StateDao implements HostDao return getCount(sc); } + @Override + public Integer countAllCPUSockets() { + final String sql = "SELECT SUM(host.cpu_sockets) FROM host WHERE host.type = 'Routing' AND host.removed IS NULL"; + Integer cpuSockets = 0; + TransactionLegacy txn = TransactionLegacy.currentTxn(); + try (PreparedStatement pstmt = txn.prepareAutoCloseStatement(sql)) { + ResultSet rs = pstmt.executeQuery(); + cpuSockets = rs.getInt(1); + } catch (SQLException e) { + s_logger.debug("SQLException caught", e); + } + return cpuSockets; + } + @Override public List listByDataCenterId(long id) { return listByDataCenterIdAndState(id, ResourceState.Enabled); diff --git a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java index 7c03bccce61..102ddff8735 100644 --- a/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java +++ b/plugins/metrics/src/main/java/org/apache/cloudstack/metrics/MetricsServiceImpl.java @@ -562,13 +562,7 @@ public class MetricsServiceImpl extends MutualExclusiveIdsManagerBase implements response.setRouters(domainRouterDao.countAllByRole(VirtualRouter.Role.VIRTUAL_ROUTER)); response.setInternalLbs(domainRouterDao.countAllByRole(VirtualRouter.Role.INTERNAL_LB_VM)); response.setAlerts(alertDao.countAll()); - int cpuSockets = 0; - for (final Host host : hostDao.listByType(Host.Type.Routing)) { - if (host.getCpuSockets() != null) { - cpuSockets += host.getCpuSockets(); - } - } - response.setCpuSockets(cpuSockets); + response.setCpuSockets(hostDao.countAllCPUSockets()); response.setManagementServers(managementServerHostDao.countAll()); return response; }