From 187d89fce58bbd3f9f0e3ca8a784626c53802dc6 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 25 Aug 2010 18:49:25 -0700 Subject: [PATCH 1/2] Refactoring listAlerts to the new API framework. This is now a BaseListCmd so it inherits keywork, page, and pagesize parameters. This also simplifies creating a Criteria object from the parameters, and then creating a search criteria from the criteria object. It's now one step...search criteria from the command itself. --- .../cloud/api/commands/ListAccountsCmd.java | 4 +- .../com/cloud/api/commands/ListAlertsCmd.java | 80 +++++-------------- .../com/cloud/server/ManagementServer.java | 3 +- .../cloud/server/ManagementServerImpl.java | 41 +++++++--- 4 files changed, 51 insertions(+), 77 deletions(-) diff --git a/server/src/com/cloud/api/commands/ListAccountsCmd.java b/server/src/com/cloud/api/commands/ListAccountsCmd.java index 89ed0af27d2..983467eb8f2 100644 --- a/server/src/com/cloud/api/commands/ListAccountsCmd.java +++ b/server/src/com/cloud/api/commands/ListAccountsCmd.java @@ -26,6 +26,8 @@ import java.util.Map; import org.apache.log4j.Logger; import com.cloud.api.BaseCmd; +import com.cloud.api.BaseCmd.CommandType; +import com.cloud.api.BaseListCmd; import com.cloud.api.Parameter; import com.cloud.api.ServerApiException; import com.cloud.configuration.ResourceCount.ResourceType; @@ -38,7 +40,7 @@ import com.cloud.uservm.UserVm; import com.cloud.utils.Pair; import com.cloud.vm.State; -public class ListAccountsCmd extends BaseCmd{ +public class ListAccountsCmd extends BaseListCmd{ public static final Logger s_logger = Logger.getLogger(ListAccountsCmd.class.getName()); private static final String s_name = "listaccountsresponse"; private static final List> s_properties = new ArrayList>(); diff --git a/server/src/com/cloud/api/commands/ListAlertsCmd.java b/server/src/com/cloud/api/commands/ListAlertsCmd.java index 4fb5bcd0352..05e371bff38 100644 --- a/server/src/com/cloud/api/commands/ListAlertsCmd.java +++ b/server/src/com/cloud/api/commands/ListAlertsCmd.java @@ -20,31 +20,22 @@ package com.cloud.api.commands; import java.util.ArrayList; import java.util.List; -import java.util.Map; import org.apache.log4j.Logger; import com.cloud.alert.AlertVO; -import com.cloud.api.BaseCmd; +import com.cloud.api.BaseListCmd; +import com.cloud.api.Implementation; import com.cloud.api.Parameter; -import com.cloud.api.ServerApiException; -import com.cloud.server.Criteria; -import com.cloud.utils.Pair; - +import com.cloud.api.response.AlertResponse; +import com.cloud.serializer.SerializerHelper; -public class ListAlertsCmd extends BaseCmd { +@Implementation(method="searchForALerts") +public class ListAlertsCmd extends BaseListCmd { public static final Logger s_logger = Logger.getLogger(ListAlertsCmd.class.getName()); private static final String s_name = "listalertsresponse"; - private static final List> s_properties = new ArrayList>(); - - static { - s_properties.add(new Pair(BaseCmd.Properties.TYPE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.KEYWORD, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGE, Boolean.FALSE)); - s_properties.add(new Pair(BaseCmd.Properties.PAGESIZE, Boolean.FALSE)); - } ///////////////////////////////////////////////////// //////////////// API parameters ///////////////////// @@ -67,60 +58,25 @@ public class ListAlertsCmd extends BaseCmd { /////////////// API Implementation/////////////////// ///////////////////////////////////////////////////// + @Override public String getName() { return s_name; } - public List> getProperties() { - return s_properties; - } + @Override @SuppressWarnings("unchecked") + public String getResponse() { + List alertList = (List)getResponseObject(); - @Override - public List> execute(Map params) { - String alertType = (String) params.get(BaseCmd.Properties.TYPE.getName()); - String keyword = (String) params.get(BaseCmd.Properties.KEYWORD.getName()); - Integer page = (Integer) params.get(BaseCmd.Properties.PAGE.getName()); - Integer pageSize = (Integer) params.get(BaseCmd.Properties.PAGESIZE.getName()); + List alertResponseList = new ArrayList(); + for (AlertVO alert : alertList) { + AlertResponse alertResponse = new AlertResponse(); + alertResponse.setAlertType(alert.getType()); + alertResponse.setDescription(alert.getSubject()); + alertResponse.setLastSent(alert.getLastSent()); - Long startIndex = Long.valueOf(0); - int pageSizeNum = 50; - if (pageSize != null) { - pageSizeNum = pageSize.intValue(); - } - if (page != null) { - int pageNum = page.intValue(); - if (pageNum > 0) { - startIndex = Long.valueOf(pageSizeNum * (pageNum - 1)); - } + alertResponseList.add(alertResponse); } - Criteria c = new Criteria("lastSent", Boolean.FALSE, startIndex, Long.valueOf(pageSizeNum)); - c.addCriteria(Criteria.KEYWORD, keyword); - - if (keyword == null) - c.addCriteria(Criteria.TYPE, alertType); - - List alerts = getManagementServer().searchForAlerts(c); - - if (alerts == null) { - throw new ServerApiException(BaseCmd.INTERNAL_ERROR, "unable to find alerts"); - } - - List> alertsTags = new ArrayList>(); - Object[] aTag = new Object[alerts.size()]; - int i = 0; - - for (AlertVO alert : alerts) { - List> alertData = new ArrayList>(); - alertData.add(new Pair(BaseCmd.Properties.TYPE.getName(), alert.getType())); - alertData.add(new Pair(BaseCmd.Properties.DESCRIPTION.getName(), alert.getSubject())); - alertData.add(new Pair(BaseCmd.Properties.SENT.getName(), alert.getLastSent())); - aTag[i++] = alertData; - } - - Pair alertTag = new Pair("alert", aTag); - alertsTags.add(alertTag); - return alertsTags; - + return SerializerHelper.toSerializedString(alertResponseList); } } diff --git a/server/src/com/cloud/server/ManagementServer.java b/server/src/com/cloud/server/ManagementServer.java index 27d2c836493..f6ec67fceb8 100644 --- a/server/src/com/cloud/server/ManagementServer.java +++ b/server/src/com/cloud/server/ManagementServer.java @@ -31,6 +31,7 @@ import com.cloud.api.commands.DisassociateIPAddrCmd; import com.cloud.api.commands.EnableAccountCmd; import com.cloud.api.commands.EnableUserCmd; import com.cloud.api.commands.GetCloudIdentifierCmd; +import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.RebootSystemVmCmd; @@ -1526,7 +1527,7 @@ public interface ManagementServer { * @param c * @return List of Alerts */ - List searchForAlerts(Criteria c); + List searchForAlerts(ListAlertsCmd cmd); /** * list all the capacity rows in capacity operations table diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index 8d6ed3a232e..2f360eb96fd 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -65,13 +65,13 @@ import com.cloud.api.commands.CreatePortForwardingServiceRuleCmd; import com.cloud.api.commands.CreateUserCmd; import com.cloud.api.commands.CreateVolumeCmd; import com.cloud.api.commands.DeleteIsoCmd; -import com.cloud.api.commands.DeleteTemplateCmd; import com.cloud.api.commands.DeleteUserCmd; import com.cloud.api.commands.DeployVMCmd; import com.cloud.api.commands.DisassociateIPAddrCmd; import com.cloud.api.commands.EnableAccountCmd; import com.cloud.api.commands.EnableUserCmd; import com.cloud.api.commands.GetCloudIdentifierCmd; +import com.cloud.api.commands.ListAlertsCmd; import com.cloud.api.commands.LockAccountCmd; import com.cloud.api.commands.LockUserCmd; import com.cloud.api.commands.PrepareForMaintenanceCmd; @@ -111,15 +111,15 @@ import com.cloud.async.executor.NetworkGroupIngressParam; import com.cloud.async.executor.SecurityGroupParam; import com.cloud.async.executor.UpdateLoadBalancerParam; import com.cloud.async.executor.VMOperationParam; -import com.cloud.async.executor.VolumeOperationParam; import com.cloud.async.executor.VMOperationParam.VmOp; +import com.cloud.async.executor.VolumeOperationParam; import com.cloud.async.executor.VolumeOperationParam.VolumeOp; import com.cloud.capacity.CapacityVO; import com.cloud.capacity.dao.CapacityDao; import com.cloud.configuration.ConfigurationManager; import com.cloud.configuration.ConfigurationVO; -import com.cloud.configuration.ResourceLimitVO; import com.cloud.configuration.ResourceCount.ResourceType; +import com.cloud.configuration.ResourceLimitVO; import com.cloud.configuration.dao.ConfigurationDao; import com.cloud.configuration.dao.ResourceLimitDao; import com.cloud.consoleproxy.ConsoleProxyManager; @@ -129,8 +129,8 @@ import com.cloud.dc.DataCenterIpAddressVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.PodVlanMapVO; -import com.cloud.dc.VlanVO; import com.cloud.dc.Vlan.VlanType; +import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; @@ -194,21 +194,21 @@ import com.cloud.storage.GuestOSCategoryVO; import com.cloud.storage.GuestOSVO; import com.cloud.storage.LaunchPermissionVO; import com.cloud.storage.Snapshot; +import com.cloud.storage.Snapshot.SnapshotType; import com.cloud.storage.SnapshotPolicyVO; import com.cloud.storage.SnapshotScheduleVO; import com.cloud.storage.SnapshotVO; import com.cloud.storage.Storage; +import com.cloud.storage.Storage.ImageFormat; import com.cloud.storage.StorageManager; import com.cloud.storage.StoragePoolVO; import com.cloud.storage.StorageStats; import com.cloud.storage.VMTemplateHostVO; import com.cloud.storage.VMTemplateStorageResourceAssoc; import com.cloud.storage.VMTemplateVO; +import com.cloud.storage.Volume.VolumeType; import com.cloud.storage.VolumeStats; import com.cloud.storage.VolumeVO; -import com.cloud.storage.Snapshot.SnapshotType; -import com.cloud.storage.Storage.ImageFormat; -import com.cloud.storage.Volume.VolumeType; import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.DiskTemplateDao; import com.cloud.storage.dao.GuestOSCategoryDao; @@ -218,9 +218,9 @@ import com.cloud.storage.dao.SnapshotDao; import com.cloud.storage.dao.SnapshotPolicyDao; import com.cloud.storage.dao.StoragePoolDao; import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.storage.dao.VMTemplateDao.TemplateFilter; import com.cloud.storage.dao.VMTemplateHostDao; import com.cloud.storage.dao.VolumeDao; -import com.cloud.storage.dao.VMTemplateDao.TemplateFilter; import com.cloud.storage.preallocatedlun.PreallocatedLunVO; import com.cloud.storage.preallocatedlun.dao.PreallocatedLunDao; import com.cloud.storage.secondary.SecondaryStorageVmManager; @@ -242,12 +242,12 @@ import com.cloud.user.dao.UserDao; import com.cloud.user.dao.UserStatisticsDao; import com.cloud.uservm.UserVm; import com.cloud.utils.DateUtil; +import com.cloud.utils.DateUtil.IntervalType; import com.cloud.utils.EnumUtils; import com.cloud.utils.NumbersUtil; import com.cloud.utils.Pair; import com.cloud.utils.PasswordGenerator; import com.cloud.utils.StringUtils; -import com.cloud.utils.DateUtil.IntervalType; import com.cloud.utils.component.Adapters; import com.cloud.utils.component.ComponentLocator; import com.cloud.utils.concurrency.NamedThreadFactory; @@ -6314,12 +6314,27 @@ public class ManagementServerImpl implements ManagementServer { } @Override - public List searchForAlerts(Criteria c) { - Filter searchFilter = new Filter(AlertVO.class, c.getOrderBy(), c.getAscending(), c.getOffset(), c.getLimit()); + public List searchForAlerts(ListAlertsCmd cmd) { + Integer page = cmd.getPage(); + Integer pageSize = cmd.getPageSize(); + Long startIndex = Long.valueOf(0); + long pageSizeNum = 50; + if (pageSize != null) { + pageSizeNum = pageSize.intValue(); + } + if (page != null) { + int pageNum = page.intValue(); + if (pageNum > 0) { + startIndex = pageSizeNum * (pageNum - 1L); + } + } + + Filter searchFilter = new Filter(AlertVO.class, "lastSent", false, startIndex, pageSizeNum); SearchCriteria sc = _alertDao.createSearchCriteria(); - Object type = c.getCriteria(Criteria.TYPE); - Object keyword = c.getCriteria(Criteria.KEYWORD); + + Object type = cmd.getType(); + Object keyword = cmd.getKeyword(); if (keyword != null) { SearchCriteria ssc = _alertDao.createSearchCriteria(); From f30e0dc383aaf20bc1d2bb0d487089791ee80502 Mon Sep 17 00:00:00 2001 From: Kris McQueen Date: Wed, 25 Aug 2010 18:50:08 -0700 Subject: [PATCH 2/2] Adding the response object for alerts, initially created as part of the listAlerts refactoring. --- .../com/cloud/api/response/AlertResponse.java | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 server/src/com/cloud/api/response/AlertResponse.java diff --git a/server/src/com/cloud/api/response/AlertResponse.java b/server/src/com/cloud/api/response/AlertResponse.java new file mode 100644 index 00000000000..7f6e6d34fc5 --- /dev/null +++ b/server/src/com/cloud/api/response/AlertResponse.java @@ -0,0 +1,41 @@ +package com.cloud.api.response; + +import java.util.Date; + +import com.cloud.api.ResponseObject; +import com.cloud.serializer.Param; + +public class AlertResponse implements ResponseObject { + @Param(name="type") + private Short alertType; + + @Param(name="description") + private String description; + + @Param(name="sent") + private Date lastSent; + + public Short getAlertType() { + return alertType; + } + + public void setAlertType(Short alertType) { + this.alertType = alertType; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Date getLastSent() { + return lastSent; + } + + public void setLastSent(Date lastSent) { + this.lastSent = lastSent; + } +}