This is an automated email from the ASF dual-hosted git repository. dahn pushed a commit to branch 4.20 in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.20 by this push: new a841ed949fc Refactor alert email generation method (#8831) a841ed949fc is described below commit a841ed949fc6877b14cace82094abc87eca8d093 Author: Henrique Sato <henriquesato2...@gmail.com> AuthorDate: Wed Mar 5 07:03:16 2025 -0300 Refactor alert email generation method (#8831) Co-authored-by: Henrique Sato <henrique.s...@scclouds.com.br> --- .../java/com/cloud/alert/AlertManagerImpl.java | 160 +++++++++------------ 1 file changed, 67 insertions(+), 93 deletions(-) diff --git a/server/src/main/java/com/cloud/alert/AlertManagerImpl.java b/server/src/main/java/com/cloud/alert/AlertManagerImpl.java index 60ba90b77d5..db2ed4927d5 100644 --- a/server/src/main/java/com/cloud/alert/AlertManagerImpl.java +++ b/server/src/main/java/com/cloud/alert/AlertManagerImpl.java @@ -615,107 +615,81 @@ public class AlertManagerImpl extends ManagerBase implements AlertManager, Confi String msgSubject = null; String msgContent = null; - String totalStr; - String usedStr; - String pctStr = formatPercent(usedCapacity / totalCapacity); + String percentual = formatPercent(usedCapacity / totalCapacity); + String totalInMB = formatBytesToMegabytes(totalCapacity); + String usedInMB = formatBytesToMegabytes(usedCapacity); + String totalInString = String.valueOf(totalCapacity); + String usedInString = String.valueOf(usedCapacity); AlertType alertType = null; Long podId = pod == null ? null : pod.getId(); Long clusterId = cluster == null ? null : cluster.getId(); + String clusterName = cluster == null ? null : cluster.getName(); + String podName = pod == null ? null : pod.getName(); + String dataCenterName = dc.getName(); switch (capacityType) { - - //Cluster Level - case Capacity.CAPACITY_TYPE_MEMORY: - msgSubject = "System Alert: Low Available Memory in cluster " + cluster.getName() + " pod " + pod.getName() + " of availability zone " + dc.getName(); - totalStr = formatBytesToMegabytes(totalCapacity); - usedStr = formatBytesToMegabytes(usedCapacity); - msgContent = "System memory is low, total: " + totalStr + " MB, used: " + usedStr + " MB (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_MEMORY; - break; - case Capacity.CAPACITY_TYPE_CPU: - msgSubject = "System Alert: Low Unallocated CPU in cluster " + cluster.getName() + " pod " + pod.getName() + " of availability zone " + dc.getName(); - totalStr = DfWhole.format(totalCapacity); - usedStr = DfWhole.format(usedCapacity); - msgContent = "Unallocated CPU is low, total: " + totalStr + " Mhz, used: " + usedStr + " Mhz (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_CPU; - break; - case Capacity.CAPACITY_TYPE_STORAGE: - msgSubject = "System Alert: Low Available Storage in cluster " + cluster.getName() + " pod " + pod.getName() + " of availability zone " + dc.getName(); - totalStr = formatBytesToMegabytes(totalCapacity); - usedStr = formatBytesToMegabytes(usedCapacity); - msgContent = "Available storage space is low, total: " + totalStr + " MB, used: " + usedStr + " MB (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_STORAGE; - break; - case Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED: - msgSubject = "System Alert: Remaining unallocated Storage is low in cluster " + cluster.getName() + " pod " + pod.getName() + " of availability zone " + - dc.getName(); - totalStr = formatBytesToMegabytes(totalCapacity); - usedStr = formatBytesToMegabytes(usedCapacity); - msgContent = "Unallocated storage space is low, total: " + totalStr + " MB, allocated: " + usedStr + " MB (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_STORAGE_ALLOCATED; - break; - case Capacity.CAPACITY_TYPE_LOCAL_STORAGE: - msgSubject = "System Alert: Remaining unallocated Local Storage is low in cluster " + cluster.getName() + " pod " + pod.getName() + " of availability zone " + - dc.getName(); - totalStr = formatBytesToMegabytes(totalCapacity); - usedStr = formatBytesToMegabytes(usedCapacity); - msgContent = "Unallocated storage space is low, total: " + totalStr + " MB, allocated: " + usedStr + " MB (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_LOCAL_STORAGE; - break; - - //Pod Level - case Capacity.CAPACITY_TYPE_PRIVATE_IP: - msgSubject = "System Alert: Number of unallocated private IPs is low in pod " + pod.getName() + " of availability zone " + dc.getName(); - totalStr = Double.toString(totalCapacity); - usedStr = Double.toString(usedCapacity); - msgContent = "Number of unallocated private IPs is low, total: " + totalStr + ", allocated: " + usedStr + " (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_PRIVATE_IP; - break; - - //Zone Level - case Capacity.CAPACITY_TYPE_SECONDARY_STORAGE: - msgSubject = "System Alert: Low Available Secondary Storage in availability zone " + dc.getName(); - totalStr = formatBytesToMegabytes(totalCapacity); - usedStr = formatBytesToMegabytes(usedCapacity); - msgContent = "Available secondary storage space is low, total: " + totalStr + " MB, used: " + usedStr + " MB (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_SECONDARY_STORAGE; - break; - case Capacity.CAPACITY_TYPE_VIRTUAL_NETWORK_PUBLIC_IP: - msgSubject = "System Alert: Number of unallocated virtual network public IPs is low in availability zone " + dc.getName(); - totalStr = Double.toString(totalCapacity); - usedStr = Double.toString(usedCapacity); - msgContent = "Number of unallocated public IPs is low, total: " + totalStr + ", allocated: " + usedStr + " (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_VIRTUAL_NETWORK_PUBLIC_IP; - break; - case Capacity.CAPACITY_TYPE_DIRECT_ATTACHED_PUBLIC_IP: - msgSubject = "System Alert: Number of unallocated shared network IPs is low in availability zone " + dc.getName(); - totalStr = Double.toString(totalCapacity); - usedStr = Double.toString(usedCapacity); - msgContent = "Number of unallocated shared network IPs is low, total: " + totalStr + ", allocated: " + usedStr + " (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_DIRECT_ATTACHED_PUBLIC_IP; - break; - case Capacity.CAPACITY_TYPE_VLAN: - msgSubject = "System Alert: Number of unallocated VLANs is low in availability zone " + dc.getName(); - totalStr = Double.toString(totalCapacity); - usedStr = Double.toString(usedCapacity); - msgContent = "Number of unallocated VLANs is low, total: " + totalStr + ", allocated: " + usedStr + " (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_VLAN; - break; - case Capacity.CAPACITY_TYPE_VIRTUAL_NETWORK_IPV6_SUBNET: - msgSubject = "System Alert: Number of unallocated virtual network guest IPv6 subnets is low in availability zone " + dc.getName(); - totalStr = Double.toString(totalCapacity); - usedStr = Double.toString(usedCapacity); - msgContent = "Number of unallocated virtual network guest IPv6 subnets is low, total: " + totalStr + ", allocated: " + usedStr + " (" + pctStr + "%)"; - alertType = AlertManager.AlertType.ALERT_TYPE_VIRTUAL_NETWORK_IPV6_SUBNET; - break; + case Capacity.CAPACITY_TYPE_MEMORY: + msgSubject = String.format("System Alert: Low Available Memory in cluster [%s] pod [%s] of availability zone [%s].", clusterName, podName, dataCenterName); + msgContent = String.format("System memory is low, total: %s MB, used: %s MB (%s%%).", totalInMB, usedInMB, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_MEMORY; + break; + case Capacity.CAPACITY_TYPE_CPU: + msgSubject = String.format("System Alert: Low Unallocated CPU in cluster [%s] pod [%s] of availability zone [%s].", clusterName, podName, dataCenterName); + msgContent = String.format("Unallocated CPU is low, total: %s Mhz, used: %s Mhz (%s%%).", DfWhole.format(totalCapacity), DfWhole.format(usedCapacity), percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_CPU; + break; + case Capacity.CAPACITY_TYPE_STORAGE: + msgSubject = String.format("System Alert: Low Available Storage in cluster [%s] pod [%s] of availability zone [%s].", clusterName, podName, dataCenterName); + msgContent = String.format("Available storage space is low, total: %s MB, used: %s MB (%s%%).", totalInMB, usedInMB, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_STORAGE; + break; + case Capacity.CAPACITY_TYPE_STORAGE_ALLOCATED: + msgSubject = String.format("System Alert: Remaining unallocated Storage is low in cluster [%s] pod [%s] of availability zone [%s].", clusterName, podName, + dataCenterName); + msgContent = String.format("Unallocated storage space is low, total: %s MB, allocated: %s MB (%s%%)", totalInMB, usedInMB, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_STORAGE_ALLOCATED; + break; + case Capacity.CAPACITY_TYPE_LOCAL_STORAGE: + msgSubject = String.format("System Alert: Remaining unallocated Local Storage is low in cluster [%s] pod [%s] of availability zone [%s].", clusterName, podName, + dataCenterName); + msgContent = String.format("Unallocated storage space is low, total: %s MB, allocated: %s MB (%s%%)", totalInMB, usedInMB, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_LOCAL_STORAGE; + break; + case Capacity.CAPACITY_TYPE_PRIVATE_IP: + msgSubject = String.format("System Alert: Number of unallocated private IPs is low in pod %s of availability zone [%s].", podName, dataCenterName); + msgContent = String.format("Number of unallocated private IPs is low, total: %s, allocated: %s (%s%%)", totalInString, usedInString, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_PRIVATE_IP; + break; + case Capacity.CAPACITY_TYPE_SECONDARY_STORAGE: + msgSubject = String.format("System Alert: Low Available Secondary Storage in availability zone [%s].", dataCenterName); + msgContent = String.format("Available secondary storage space is low, total: %s MB, used: %s MB (%s%%).", totalInMB, usedInMB, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_SECONDARY_STORAGE; + break; + case Capacity.CAPACITY_TYPE_VIRTUAL_NETWORK_PUBLIC_IP: + msgSubject = String.format("System Alert: Number of unallocated virtual network public IPs is low in availability zone [%s].", dataCenterName); + msgContent = String.format("Number of unallocated public IPs is low, total: %s, allocated: %s (%s%%).", totalInString, usedInString, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_VIRTUAL_NETWORK_PUBLIC_IP; + break; + case Capacity.CAPACITY_TYPE_DIRECT_ATTACHED_PUBLIC_IP: + msgSubject = String.format("System Alert: Number of unallocated shared network IPs is low in availability zone [%s].", dataCenterName); + msgContent = String.format("Number of unallocated shared network IPs is low, total: %s, allocated: %s (%s%%).", totalInString, usedInString, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_DIRECT_ATTACHED_PUBLIC_IP; + break; + case Capacity.CAPACITY_TYPE_VLAN: + msgSubject = String.format("System Alert: Number of unallocated VLANs is low in availability zone [%s].", dataCenterName); + msgContent = String.format("Number of unallocated VLANs is low, total: %s, allocated: %s (%s%%).", totalInString, usedInString, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_VLAN; + break; + case Capacity.CAPACITY_TYPE_VIRTUAL_NETWORK_IPV6_SUBNET: + msgSubject = String.format("System Alert: Number of unallocated virtual network guest IPv6 subnets is low in availability zone [%s].", dc.getName()); + msgContent = String.format("Number of unallocated virtual network guest IPv6 subnets is low, total: [%s], allocated: [%s] (%s%%).", totalInString, usedInString, percentual); + alertType = AlertManager.AlertType.ALERT_TYPE_VIRTUAL_NETWORK_IPV6_SUBNET; + break; } try { - if (logger.isDebugEnabled()) { - logger.debug(msgSubject); - logger.debug(msgContent); - } - sendAlert(alertType, dc, pod, cluster, msgSubject, msgContent); + logger.debug("Sending alert with subject [{}] and content [{}].", msgSubject, msgContent); + sendAlert(alertType, dc.getId(), podId, clusterId, msgSubject, msgContent); } catch (Exception ex) { logger.error("Exception in CapacityChecker", ex); }