This is an automated email from the ASF dual-hosted git repository.
dahn pushed a commit to branch 4.19
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.19 by this push:
new c25264bada3 UI Fixes: allow filtering on alertype in UI & add events
tab (#8630)
c25264bada3 is described below
commit c25264bada3b84118b4b20720426625bf6e4b1c0
Author: Vishesh <[email protected]>
AuthorDate: Thu Apr 4 17:21:56 2024 +0530
UI Fixes: allow filtering on alertype in UI & add events tab (#8630)
---
.../org/apache/cloudstack/alert/AlertService.java | 4 ++
.../admin/acl/project/CreateProjectRoleCmd.java | 10 ++++
.../project/CreateProjectRolePermissionCmd.java | 11 ++++
.../admin/acl/project/DeleteProjectRoleCmd.java | 11 ++++
.../project/DeleteProjectRolePermissionCmd.java | 11 ++++
.../admin/acl/project/UpdateProjectRoleCmd.java | 11 ++++
.../project/UpdateProjectRolePermissionCmd.java | 11 ++++
.../ChangeOutOfBandManagementPasswordCmd.java | 11 ++++
.../ConfigureOutOfBandManagementCmd.java | 11 ++++
.../DisableOutOfBandManagementForClusterCmd.java | 11 ++++
.../DisableOutOfBandManagementForHostCmd.java | 11 ++++
.../DisableOutOfBandManagementForZoneCmd.java | 11 ++++
.../EnableOutOfBandManagementForClusterCmd.java | 11 ++++
.../EnableOutOfBandManagementForHostCmd.java | 11 ++++
.../EnableOutOfBandManagementForZoneCmd.java | 11 ++++
.../IssueOutOfBandManagementPowerActionCmd.java | 5 ++
.../command/admin/resource/ListAlertTypesCmd.java | 54 +++++++++++++++++++
.../user/vmsnapshot/CreateVMSnapshotCmd.java | 6 +++
.../cloudstack/api/response/AlertTypeResponse.java | 55 ++++++++++++++++++++
.../com/cloud/server/ManagementServerImpl.java | 2 +
ui/src/components/view/SearchView.vue | 44 +++++++++++++++-
ui/src/config/section/compute.js | 18 +++++++
ui/src/config/section/infra.js | 1 +
ui/src/config/section/infra/hosts.js | 5 ++
ui/src/config/section/infra/ilbvms.js | 11 ++++
ui/src/config/section/network.js | 11 ++++
ui/src/config/section/offering.js | 60 ++++++++++++++++++++++
ui/src/config/section/role.js | 7 +++
ui/src/config/section/user.js | 2 +-
ui/src/views/network/PublicIpResource.vue | 12 +++++
30 files changed, 448 insertions(+), 2 deletions(-)
diff --git a/api/src/main/java/org/apache/cloudstack/alert/AlertService.java
b/api/src/main/java/org/apache/cloudstack/alert/AlertService.java
index 50e48526d26..1250284b5c2 100644
--- a/api/src/main/java/org/apache/cloudstack/alert/AlertService.java
+++ b/api/src/main/java/org/apache/cloudstack/alert/AlertService.java
@@ -91,6 +91,10 @@ public interface AlertService {
return null;
}
+ public static Set<AlertType> getAlertTypes() {
+ return defaultAlertTypes;
+ }
+
@Override
public String toString() {
return String.valueOf(this.getType());
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRoleCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRoleCmd.java
index c03e6112ea7..ed17a876b24 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRoleCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRoleCmd.java
@@ -20,6 +20,7 @@ package org.apache.cloudstack.api.command.admin.acl.project;
import org.apache.cloudstack.acl.ProjectRole;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseCmd;
@@ -70,4 +71,13 @@ public class CreateProjectRoleCmd extends ProjectRoleCmd {
return Account.ACCOUNT_ID_SYSTEM;
}
+ @Override
+ public Long getApiResourceId() {
+ return getProjectId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Project;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRolePermissionCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRolePermissionCmd.java
index 9b6c2e633fc..d39c2312aa9 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRolePermissionCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/CreateProjectRolePermissionCmd.java
@@ -22,6 +22,7 @@ import org.apache.cloudstack.acl.ProjectRolePermission;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.Parameter;
@@ -96,4 +97,14 @@ public class CreateProjectRolePermissionCmd extends
BaseRolePermissionCmd {
response.setObjectName("projectrolepermission");
setResponseObject(response);
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getProjectId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Project;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRoleCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRoleCmd.java
index 4bb460c63f7..9f8d8248958 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRoleCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRoleCmd.java
@@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.ProjectRole;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseCmd;
@@ -79,4 +80,14 @@ public class DeleteProjectRoleCmd extends BaseCmd {
public long getEntityOwnerId() {
return CallContext.current().getCallingAccountId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getProjectId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Project;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRolePermissionCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRolePermissionCmd.java
index 8b83253c869..ac68278535e 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRolePermissionCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/DeleteProjectRolePermissionCmd.java
@@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.ProjectRolePermission;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseCmd;
@@ -80,4 +81,14 @@ public class DeleteProjectRolePermissionCmd extends BaseCmd {
public long getEntityOwnerId() {
return CallContext.current().getCallingAccountId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getProjectId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Project;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRoleCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRoleCmd.java
index 202daa3d49c..3bc8b3d6186 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRoleCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRoleCmd.java
@@ -21,6 +21,7 @@ import org.apache.cloudstack.acl.ProjectRole;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseCmd;
@@ -76,4 +77,14 @@ public class UpdateProjectRoleCmd extends ProjectRoleCmd {
public long getEntityOwnerId() {
return 0;
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getProjectId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Project;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRolePermissionCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRolePermissionCmd.java
index d27235e5aae..dd59310c66a 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRolePermissionCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/acl/project/UpdateProjectRolePermissionCmd.java
@@ -26,6 +26,7 @@ import org.apache.cloudstack.acl.ProjectRolePermission;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseCmd;
@@ -154,4 +155,14 @@ public class UpdateProjectRolePermissionCmd extends
BaseCmd {
public long getEntityOwnerId() {
return CallContext.current().getCallingAccountId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getProjectId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Project;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
index dad6506729a..e2c31d6cf07 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ChangeOutOfBandManagementPasswordCmd.java
@@ -26,6 +26,7 @@ import com.cloud.host.Host;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -102,4 +103,14 @@ public class ChangeOutOfBandManagementPasswordCmd extends
BaseAsyncCmd {
public String getEventDescription() {
return "change out-of-band management password for host: " +
getHostId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getHostId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Host;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
index 699e2855185..157d3c627db 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/ConfigureOutOfBandManagementCmd.java
@@ -26,6 +26,7 @@ import com.google.common.collect.ImmutableMap;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseCmd;
@@ -112,4 +113,14 @@ public class ConfigureOutOfBandManagementCmd extends
BaseCmd {
builder.put(option, value);
}
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getHostId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Host;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
index 604aae66889..445e7b92665 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForClusterCmd.java
@@ -27,6 +27,7 @@ import com.cloud.org.Cluster;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -94,4 +95,14 @@ public class DisableOutOfBandManagementForClusterCmd extends
BaseAsyncCmd {
public String getEventDescription() {
return "disable out-of-band management password for cluster: " +
getClusterId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getClusterId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Cluster;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
index 51c0fbcc3db..7e4444e93fb 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForHostCmd.java
@@ -27,6 +27,7 @@ import com.cloud.host.Host;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -95,4 +96,14 @@ public class DisableOutOfBandManagementForHostCmd extends
BaseAsyncCmd {
public String getEventDescription() {
return "disable out-of-band management password for host: " +
getHostId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getHostId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Host;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
index 4c3e92cf05d..2028f8fc2a0 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/DisableOutOfBandManagementForZoneCmd.java
@@ -27,6 +27,7 @@ import com.cloud.exception.ResourceUnavailableException;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -94,4 +95,14 @@ public class DisableOutOfBandManagementForZoneCmd extends
BaseAsyncCmd {
public String getEventDescription() {
return "disable out-of-band management password for zone: " +
getZoneId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getZoneId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Zone;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
index a69f27fb3ac..549743b3172 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForClusterCmd.java
@@ -27,6 +27,7 @@ import com.cloud.org.Cluster;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -94,4 +95,14 @@ public class EnableOutOfBandManagementForClusterCmd extends
BaseAsyncCmd {
public String getEventDescription() {
return "enable out-of-band management password for cluster: " +
getClusterId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getClusterId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Cluster;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
index 5e32c8943bf..834181a5e1c 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForHostCmd.java
@@ -27,6 +27,7 @@ import com.cloud.host.Host;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -95,4 +96,14 @@ public class EnableOutOfBandManagementForHostCmd extends
BaseAsyncCmd {
public String getEventDescription() {
return "enable out-of-band management password for host: " +
getHostId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getHostId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Host;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
index 4eea4d50fe0..de4c4d801de 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/EnableOutOfBandManagementForZoneCmd.java
@@ -27,6 +27,7 @@ import com.cloud.exception.ResourceUnavailableException;
import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.APICommand;
import org.apache.cloudstack.api.ApiArgValidator;
+import org.apache.cloudstack.api.ApiCommandResourceType;
import org.apache.cloudstack.api.ApiConstants;
import org.apache.cloudstack.api.ApiErrorCode;
import org.apache.cloudstack.api.BaseAsyncCmd;
@@ -94,4 +95,14 @@ public class EnableOutOfBandManagementForZoneCmd extends
BaseAsyncCmd {
public String getEventDescription() {
return "enable out-of-band management password for zone: " +
getZoneId();
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getZoneId();
+ }
+
+ @Override
+ public ApiCommandResourceType getApiResourceType() {
+ return ApiCommandResourceType.Zone;
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
index d10664f0a25..97a813c9d47 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/outofbandmanagement/IssueOutOfBandManagementPowerActionCmd.java
@@ -114,4 +114,9 @@ public class IssueOutOfBandManagementPowerActionCmd extends
BaseAsyncCmd {
public ApiCommandResourceType getApiResourceType() {
return ApiCommandResourceType.Host;
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getHostId();
+ }
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListAlertTypesCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListAlertTypesCmd.java
new file mode 100644
index 00000000000..e7bfbdbc625
--- /dev/null
+++
b/api/src/main/java/org/apache/cloudstack/api/command/admin/resource/ListAlertTypesCmd.java
@@ -0,0 +1,54 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.command.admin.resource;
+
+import com.cloud.user.Account;
+import org.apache.cloudstack.alert.AlertService;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.BaseCmd;
+import org.apache.cloudstack.api.response.AlertResponse;
+import org.apache.cloudstack.api.response.AlertTypeResponse;
+import org.apache.cloudstack.api.response.ListResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
+
+@APICommand(name = "listAlertTypes", description = "Lists all alerts types",
responseObject = AlertResponse.class,
+ requestHasSensitiveInfo = false, responseHasSensitiveInfo = false)
+public class ListAlertTypesCmd extends BaseCmd {
+
+ @Override
+ public long getEntityOwnerId() {
+ return Account.ACCOUNT_ID_SYSTEM;
+ }
+
+ @Override
+ public void execute() {
+ Set<AlertService.AlertType> result =
AlertService.AlertType.getAlertTypes();
+ ListResponse<AlertTypeResponse> response = new ListResponse<>();
+ List<AlertTypeResponse> typeResponseList = new ArrayList<>();
+ for (AlertService.AlertType alertType : result) {
+ AlertTypeResponse alertResponse = new
AlertTypeResponse(alertType.getType(), alertType.getName());
+ alertResponse.setObjectName("alerttype");
+ typeResponseList.add(alertResponse);
+ }
+ response.setResponses(typeResponseList, result.size());
+ response.setResponseName(getCommandName());
+ this.setResponseObject(response);
+ }
+}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
index 2c0ea6bc4ae..e83c6b4009d 100644
---
a/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
+++
b/api/src/main/java/org/apache/cloudstack/api/command/user/vmsnapshot/CreateVMSnapshotCmd.java
@@ -138,4 +138,10 @@ public class CreateVMSnapshotCmd extends
BaseAsyncCreateCmd {
public ApiCommandResourceType getApiResourceType() {
return ApiCommandResourceType.VmSnapshot;
}
+
+ @Override
+ public Long getApiResourceId() {
+ return getEntityId();
+ }
+
}
diff --git
a/api/src/main/java/org/apache/cloudstack/api/response/AlertTypeResponse.java
b/api/src/main/java/org/apache/cloudstack/api/response/AlertTypeResponse.java
new file mode 100644
index 00000000000..3f91cde0178
--- /dev/null
+++
b/api/src/main/java/org/apache/cloudstack/api/response/AlertTypeResponse.java
@@ -0,0 +1,55 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+package org.apache.cloudstack.api.response;
+
+import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.BaseResponse;
+
+public class AlertTypeResponse extends BaseResponse {
+
+ @SerializedName("alerttypeid")
+ @Param(description = "alert type")
+ private short alertType;
+
+ @SerializedName(ApiConstants.NAME)
+ @Param(description = "description of alert type")
+ private String name;
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public short getUsageType() {
+ return alertType;
+ }
+
+ public void setUsageType(short alertType) {
+ this.alertType = alertType;
+ }
+
+ public AlertTypeResponse(short alertType, String name) {
+ this.alertType = alertType;
+ this.name = name;
+ setObjectName("alerttype");
+ }
+}
diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
index 5cd5b92054b..9b635cea5f3 100644
--- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java
+++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java
@@ -185,6 +185,7 @@ import
org.apache.cloudstack.api.command.admin.region.UpdateRegionCmd;
import org.apache.cloudstack.api.command.admin.resource.ArchiveAlertsCmd;
import org.apache.cloudstack.api.command.admin.resource.CleanVMReservationsCmd;
import org.apache.cloudstack.api.command.admin.resource.DeleteAlertsCmd;
+import org.apache.cloudstack.api.command.admin.resource.ListAlertTypesCmd;
import org.apache.cloudstack.api.command.admin.resource.ListAlertsCmd;
import org.apache.cloudstack.api.command.admin.resource.ListCapacityCmd;
import
org.apache.cloudstack.api.command.admin.resource.StartRollingMaintenanceCmd;
@@ -3468,6 +3469,7 @@ public class ManagementServerImpl extends ManagerBase
implements ManagementServe
cmdList.add(RemoveRegionCmd.class);
cmdList.add(UpdateRegionCmd.class);
cmdList.add(ListAlertsCmd.class);
+ cmdList.add(ListAlertTypesCmd.class);
cmdList.add(ListCapacityCmd.class);
cmdList.add(UpdatePodManagementNetworkIpRangeCmd.class);
cmdList.add(UploadCustomCertificateCmd.class);
diff --git a/ui/src/components/view/SearchView.vue
b/ui/src/components/view/SearchView.vue
index 9e65cdb36eb..7a2154ad426 100644
--- a/ui/src/components/view/SearchView.vue
+++ b/ui/src/components/view/SearchView.vue
@@ -186,7 +186,8 @@ export default {
inputKey: null,
inputValue: null,
fieldValues: {},
- isFiltered: false
+ isFiltered: false,
+ alertTypes: []
}
},
created () {
@@ -347,6 +348,7 @@ export default {
},
async fetchDynamicFieldData (arrayField, searchKeyword) {
const promises = []
+ let typeIndex = -1
let zoneIndex = -1
let domainIndex = -1
let imageStoreIndex = -1
@@ -355,6 +357,14 @@ export default {
let clusterIndex = -1
let groupIndex = -1
+ if (arrayField.includes('type')) {
+ if (this.$route.path === '/alert') {
+ typeIndex = this.fields.findIndex(item => item.name === 'type')
+ this.fields[typeIndex].loading = true
+ promises.push(await this.fetchAlertTypes())
+ }
+ }
+
if (arrayField.includes('zoneid')) {
zoneIndex = this.fields.findIndex(item => item.name === 'zoneid')
this.fields[zoneIndex].loading = true
@@ -398,6 +408,12 @@ export default {
}
Promise.all(promises).then(response => {
+ if (typeIndex > -1) {
+ const types = response.filter(item => item.type === 'type')
+ if (types && types.length > 0) {
+ this.fields[typeIndex].opts = this.sortArray(types[0].data)
+ }
+ }
if (zoneIndex > -1) {
const zones = response.filter(item => item.type === 'zoneid')
if (zones && zones.length > 0) {
@@ -441,6 +457,9 @@ export default {
}
}
}).finally(() => {
+ if (typeIndex > -1) {
+ this.fields[typeIndex].loading = false
+ }
if (zoneIndex > -1) {
this.fields[zoneIndex].loading = false
}
@@ -585,6 +604,29 @@ export default {
})
})
},
+ fetchAlertTypes () {
+ if (this.alertTypes.length > 0) {
+ return new Promise((resolve, reject) => {
+ resolve({
+ type: 'type',
+ data: this.alertTypes
+ })
+ })
+ } else {
+ return new Promise((resolve, reject) => {
+ api('listAlertTypes').then(json => {
+ const alerttypes = json.listalerttypesresponse.alerttype.map(a =>
{ return { id: a.alerttypeid, name: a.name } })
+ this.alertTypes = alerttypes
+ resolve({
+ type: 'type',
+ data: alerttypes
+ })
+ }).catch(error => {
+ reject(error.response.headers['x-description'])
+ })
+ })
+ }
+ },
fetchGuestNetworkTypes () {
const types = []
if (this.apiName.indexOf('listNetworks') > -1) {
diff --git a/ui/src/config/section/compute.js b/ui/src/config/section/compute.js
index bd18535f380..9390d2a7d62 100644
--- a/ui/src/config/section/compute.js
+++ b/ui/src/config/section/compute.js
@@ -483,6 +483,12 @@ export default {
name: 'details',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
},
+ {
+ name: 'events',
+ resourceType: 'VmSnapshot',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ },
{
name: 'comments',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/AnnotationsTab.vue')))
@@ -990,6 +996,18 @@ export default {
title: 'label.instances',
param: 'affinitygroupid'
}],
+ tabs: [
+ {
+ name: 'details',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
+ },
+ {
+ name: 'events',
+ resourceType: 'AffinityGroup',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ }
+ ],
actions: [
{
api: 'createAffinityGroup',
diff --git a/ui/src/config/section/infra.js b/ui/src/config/section/infra.js
index 0b3b1e7ae4f..5b3b38a68e5 100644
--- a/ui/src/config/section/infra.js
+++ b/ui/src/config/section/infra.js
@@ -79,6 +79,7 @@ export default {
permission: ['listAlerts'],
columns: ['name', 'description', 'type', 'sent'],
details: ['name', 'id', 'type', 'sent', 'description'],
+ searchFilters: ['type'],
actions: [
{
api: 'archiveAlerts',
diff --git a/ui/src/config/section/infra/hosts.js
b/ui/src/config/section/infra/hosts.js
index 803e6160de3..d92f4af21e6 100644
--- a/ui/src/config/section/infra/hosts.js
+++ b/ui/src/config/section/infra/hosts.js
@@ -44,6 +44,11 @@ export default {
tabs: [{
name: 'details',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
+ }, {
+ name: 'events',
+ resourceType: 'Host',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
}, {
name: 'comments',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/AnnotationsTab.vue')))
diff --git a/ui/src/config/section/infra/ilbvms.js
b/ui/src/config/section/infra/ilbvms.js
index fa20d6990e9..5ab9b3edfc0 100644
--- a/ui/src/config/section/infra/ilbvms.js
+++ b/ui/src/config/section/infra/ilbvms.js
@@ -16,6 +16,8 @@
// under the License.
import { shallowRef, defineAsyncComponent } from 'vue'
+import store from '@/store'
+
export default {
name: 'ilbvm',
title: 'label.internal.lb',
@@ -25,6 +27,15 @@ export default {
params: { projectid: '-1' },
columns: ['name', 'state', 'publicip', 'guestnetworkname', 'vpcname',
'version', 'softwareversion', 'hostname', 'account', 'zonename',
'requiresupgrade'],
details: ['name', 'id', 'version', 'softwareversion', 'requiresupgrade',
'guestnetworkname', 'vpcname', 'publicip', 'guestipaddress', 'linklocalip',
'serviceofferingname', 'networkdomain', 'isredundantrouter', 'redundantstate',
'hostname', 'account', 'zonename', 'created', 'hostcontrolstate'],
+ tabs: [{
+ name: 'details',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
+ }, {
+ name: 'events',
+ resourceType: 'InternalLbVm',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ }],
actions: [
{
api: 'startInternalLoadBalancerVM',
diff --git a/ui/src/config/section/network.js b/ui/src/config/section/network.js
index cd7dfbc828f..3d5241feb59 100644
--- a/ui/src/config/section/network.js
+++ b/ui/src/config/section/network.js
@@ -1046,6 +1046,11 @@ export default {
name: 'loadbalancerinstance',
component: shallowRef(defineAsyncComponent(() =>
import('@/views/network/InternalLBAssignedVmTab.vue'))),
show: () => true
+ }, {
+ name: 'events',
+ resourceType: 'LoadBalancerRule',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
}],
actions: [
{
@@ -1162,6 +1167,12 @@ export default {
name: 'details',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
},
+ {
+ name: 'events',
+ resourceType: 'VpnCustomerGateway',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ },
{
name: 'comments',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/AnnotationsTab.vue')))
diff --git a/ui/src/config/section/offering.js
b/ui/src/config/section/offering.js
index 3f040924242..3e99f602d91 100644
--- a/ui/src/config/section/offering.js
+++ b/ui/src/config/section/offering.js
@@ -56,6 +56,12 @@ export default {
name: 'details',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
},
+ {
+ name: 'events',
+ resourceType: 'ServiceOffering',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ },
{
name: 'comments',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/AnnotationsTab.vue'))),
@@ -130,6 +136,24 @@ export default {
columns: ['name', 'state', 'systemvmtype', 'cpunumber', 'cpuspeed',
'memory', 'storagetype', 'order'],
filters: ['active', 'inactive'],
details: ['name', 'id', 'displaytext', 'systemvmtype',
'provisioningtype', 'storagetype', 'iscustomized', 'limitcpuuse', 'cpunumber',
'cpuspeed', 'memory', 'storagetags', 'hosttags', 'tags', 'domain', 'zone',
'created', 'dynamicscalingenabled', 'diskofferingstrictness'],
+ resourceType: 'ServiceOffering',
+ tabs: [
+ {
+ name: 'details',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
+ },
+ {
+ name: 'events',
+ resourceType: 'ServiceOffering',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ },
+ {
+ name: 'comments',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/AnnotationsTab.vue'))),
+ show: (record, route, user) => { return ['Admin',
'DomainAdmin'].includes(user.roletype) }
+ }
+ ],
actions: [{
api: 'createServiceOffering',
icon: 'plus-outlined',
@@ -207,6 +231,12 @@ export default {
name: 'details',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
},
+ {
+ name: 'events',
+ resourceType: 'DiskOffering',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ },
{
name: 'comments',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/AnnotationsTab.vue'))),
@@ -284,6 +314,18 @@ export default {
title: 'label.instances',
param: 'backupofferingid'
}],
+ tabs: [
+ {
+ name: 'details',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
+ },
+ {
+ name: 'events',
+ resourceType: 'BackupOffering',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ }
+ ],
actions: [{
api: 'importBackupOffering',
icon: 'plus-outlined',
@@ -326,6 +368,12 @@ export default {
name: 'details',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
},
+ {
+ name: 'events',
+ resourceType: 'NetworkOffering',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ },
{
name: 'comments',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/AnnotationsTab.vue'))),
@@ -418,6 +466,18 @@ export default {
title: 'label.vpc',
param: 'vpcofferingid'
}],
+ tabs: [
+ {
+ name: 'details',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
+ },
+ {
+ name: 'events',
+ resourceType: 'VpcOffering',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
+ }
+ ],
actions: [{
api: 'createVPCOffering',
icon: 'plus-outlined',
diff --git a/ui/src/config/section/role.js b/ui/src/config/section/role.js
index d903ea0fae8..3823d633b18 100644
--- a/ui/src/config/section/role.js
+++ b/ui/src/config/section/role.js
@@ -16,6 +16,8 @@
// under the License.
import { shallowRef, defineAsyncComponent } from 'vue'
+import store from '@/store'
+
export default {
name: 'role',
title: 'label.roles',
@@ -30,6 +32,11 @@ export default {
}, {
name: 'rules',
component: shallowRef(defineAsyncComponent(() =>
import('@/views/iam/RolePermissionTab.vue')))
+ }, {
+ name: 'events',
+ resourceType: 'Role',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in store.getters.apis }
}],
actions: [
{
diff --git a/ui/src/config/section/user.js b/ui/src/config/section/user.js
index eef9ea3f939..d4f4d700db7 100644
--- a/ui/src/config/section/user.js
+++ b/ui/src/config/section/user.js
@@ -25,7 +25,7 @@ export default {
docHelp: 'adminguide/accounts.html#users',
hidden: true,
permission: ['listUsers'],
- columns: ['username', 'state', 'firstname', 'lastname', 'email', 'account'],
+ columns: ['username', 'state', 'firstname', 'lastname', 'email', 'account',
'domain'],
details: ['username', 'id', 'firstname', 'lastname', 'email', 'usersource',
'timezone', 'rolename', 'roletype', 'is2faenabled', 'account', 'domain',
'created'],
tabs: [
{
diff --git a/ui/src/views/network/PublicIpResource.vue
b/ui/src/views/network/PublicIpResource.vue
index fdbd96a761a..18bc003b499 100644
--- a/ui/src/views/network/PublicIpResource.vue
+++ b/ui/src/views/network/PublicIpResource.vue
@@ -66,10 +66,22 @@ export default {
tabs: [{
name: 'details',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
+ },
+ {
+ name: 'events',
+ resourceType: 'IpAddress',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in this.$store.getters.apis }
}],
defaultTabs: [{
name: 'details',
component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/DetailsTab.vue')))
+ },
+ {
+ name: 'events',
+ resourceType: 'IpAddress',
+ component: shallowRef(defineAsyncComponent(() =>
import('@/components/view/EventsTab.vue'))),
+ show: () => { return 'listEvents' in this.$store.getters.apis }
}],
activeTab: ''
}