Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,24 @@

package org.apache.cloudstack.api;

import java.util.List;

import javax.inject.Inject;

import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.api.command.admin.volume.ListVolumesCmdByAdmin;
import org.apache.cloudstack.api.command.user.volume.ListVolumesCmd;
import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.metrics.MetricsService;
import org.apache.cloudstack.response.VolumeMetricsResponse;

import javax.inject.Inject;
import java.util.List;

@APICommand(name = ListVolumesMetricsCmd.APINAME, description = "Lists volume metrics", responseObject = VolumeMetricsResponse.class,
requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, responseView = ResponseObject.ResponseView.Full,
since = "4.9.3", authorized = {RoleType.Admin, RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User})
public class ListVolumesMetricsCmd extends ListVolumesCmdByAdmin {
@APICommand(name = ListVolumesMetricsCmd.APINAME,
description = "Lists volume metrics",
responseObject = VolumeMetricsResponse.class,
requestHasSensitiveInfo = false,
responseHasSensitiveInfo = false,
since = "4.9.3",
authorized = {RoleType.Admin, RoleType.ResourceAdmin, RoleType.DomainAdmin, RoleType.User})
public class ListVolumesMetricsCmd extends ListVolumesCmd {
public static final String APINAME = "listVolumesMetrics";

@Inject
Expand All @@ -41,7 +46,7 @@ public String getCommandName() {
}

@Override
public void execute() {
public void execute() {
final List<VolumeMetricsResponse> metricsResponses = metricsService.listVolumeMetrics(_queryService.searchForVolumes(this).getResponses());
ListResponse<VolumeMetricsResponse> response = new ListResponse<>();
response.setResponses(metricsResponses, metricsResponses.size());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
import com.cloud.org.Cluster;
import com.cloud.org.Grouping;
import com.cloud.org.Managed;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.utils.component.ComponentLifecycleBase;
import com.cloud.vm.VMInstanceVO;
import com.cloud.vm.VirtualMachine;
Expand All @@ -58,6 +60,7 @@
import org.apache.cloudstack.api.response.UserVmResponse;
import org.apache.cloudstack.api.response.VolumeResponse;
import org.apache.cloudstack.api.response.ZoneResponse;
import org.apache.cloudstack.context.CallContext;
import org.apache.cloudstack.response.ClusterMetricsResponse;
import org.apache.cloudstack.response.HostMetricsResponse;
import org.apache.cloudstack.response.InfrastructureResponse;
Expand Down Expand Up @@ -97,6 +100,8 @@ public class MetricsServiceImpl extends ComponentLifecycleBase implements Metric
@Inject
private CapacityDao capacityDao;
@Inject
private AccountManager accountMgr;
@Inject
private ManagementServerHostDao managementServerHostDao;

protected MetricsServiceImpl() {
Expand Down Expand Up @@ -158,7 +163,10 @@ public List<VolumeMetricsResponse> listVolumeMetrics(List<VolumeResponse> volume
}

metricsResponse.setDiskSizeGB(volumeResponse.getSize());
metricsResponse.setStorageType(volumeResponse.getStorageType(), volumeResponse.getVolumeType());
Account account = CallContext.current().getCallingAccount();
if (accountMgr.isAdmin(account.getAccountId())) {
metricsResponse.setStorageType(volumeResponse.getStorageType(), volumeResponse.getVolumeType());
}
metricsResponses.add(metricsResponse);
}
return metricsResponses;
Expand Down
16 changes: 2 additions & 14 deletions server/src/main/java/com/cloud/api/query/QueryManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@
import org.apache.cloudstack.api.command.admin.template.ListTemplatesCmdByAdmin;
import org.apache.cloudstack.api.command.admin.user.ListUsersCmd;
import org.apache.cloudstack.api.command.admin.vm.ListVMsCmdByAdmin;
import org.apache.cloudstack.api.command.admin.volume.ListVolumesCmdByAdmin;
import org.apache.cloudstack.api.command.admin.zone.ListZonesCmdByAdmin;
import org.apache.cloudstack.api.command.user.account.ListAccountsCmd;
import org.apache.cloudstack.api.command.user.account.ListProjectAccountsCmd;
Expand Down Expand Up @@ -168,7 +167,6 @@
import com.cloud.ha.HighAvailabilityManager;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.network.dao.NetworkDetailsDao;
import com.cloud.network.security.SecurityGroupVMMapVO;
import com.cloud.network.security.dao.SecurityGroupVMMapDao;
import com.cloud.org.Grouping;
Expand Down Expand Up @@ -208,7 +206,6 @@
import com.cloud.utils.Pair;
import com.cloud.utils.StringUtils;
import com.cloud.utils.Ternary;
import com.cloud.utils.db.EntityManager;
import com.cloud.utils.db.Filter;
import com.cloud.utils.db.JoinBuilder;
import com.cloud.utils.db.SearchBuilder;
Expand All @@ -221,7 +218,6 @@
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.dao.DomainRouterDao;
import com.cloud.vm.dao.UserVmDao;
import com.cloud.vm.dao.UserVmDetailsDao;
import com.cloud.vm.dao.VMInstanceDao;

@Component
Expand Down Expand Up @@ -333,9 +329,6 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
@Inject
private DomainRouterDao _routerDao;

@Inject
private UserVmDetailsDao _userVmDetailDao;

@Inject
private HighAvailabilityManager _haMgr;

Expand Down Expand Up @@ -368,18 +361,12 @@ public class QueryManagerImpl extends MutualExclusiveIdsManagerBase implements Q
@Inject
private AffinityGroupDomainMapDao _affinityGroupDomainMapDao;

@Inject
private NetworkDetailsDao _networkDetailsDao;

@Inject
private ResourceTagDao _resourceTagDao;

@Inject
private DataStoreManager dataStoreManager;

@Inject
private EntityManager _entityMgr;

@Inject
ManagementServerHostDao managementServerHostDao;

Expand Down Expand Up @@ -1665,7 +1652,8 @@ public ListResponse<VolumeResponse> searchForVolumes(ListVolumesCmd cmd) {
ListResponse<VolumeResponse> response = new ListResponse<VolumeResponse>();

ResponseView respView = ResponseView.Restricted;
if (cmd instanceof ListVolumesCmdByAdmin) {
Account account = CallContext.current().getCallingAccount();
if (_accountMgr.isAdmin(account.getAccountId())) {
respView = ResponseView.Full;
}

Expand Down
37 changes: 19 additions & 18 deletions server/src/main/java/com/cloud/api/query/ViewResponseHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -284,29 +284,30 @@ public static List<VolumeResponse> createVolumeResponse(ResponseView view, Volum
}
vrDataList.put(vr.getId(), vrData);

if (view == ResponseView.Full) {
VolumeStats vs = null;
if (vr.getFormat() == ImageFormat.QCOW2) {
vs = ApiDBUtils.getVolumeStatistics(vrData.getId());
}
else if (vr.getFormat() == ImageFormat.VHD){
vs = ApiDBUtils.getVolumeStatistics(vrData.getPath());
}
else if (vr.getFormat() == ImageFormat.OVA){
if (vrData.getChainInfo() != null) {
vs = ApiDBUtils.getVolumeStatistics(vrData.getChainInfo());
}
VolumeStats vs = null;
if (vr.getFormat() == ImageFormat.QCOW2) {
vs = ApiDBUtils.getVolumeStatistics(vrData.getId());
}
else if (vr.getFormat() == ImageFormat.VHD){
vs = ApiDBUtils.getVolumeStatistics(vrData.getPath());
}
else if (vr.getFormat() == ImageFormat.OVA){
if (vrData.getChainInfo() != null) {
vs = ApiDBUtils.getVolumeStatistics(vrData.getChainInfo());
}
if (vs != null){
long vsz = vs.getVirtualSize();
long psz = vs.getPhysicalSize() ;
double util = (double)psz/vsz;
}

if (vs != null){
long vsz = vs.getVirtualSize();
long psz = vs.getPhysicalSize() ;
double util = (double)psz/vsz;
vrData.setUtilization(df.format(util));

if (view == ResponseView.Full) {
vrData.setVirtualsize(vsz);
vrData.setPhysicalsize(psz);
vrData.setUtilization(df.format(util));
}
}

}
return new ArrayList<VolumeResponse>(vrDataList.values());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,9 @@ public VolumeResponse newVolumeResponse(ResponseView view, VolumeJoinVO volume)
volResponse.setDiskOfferingDisplayText(volume.getDiskOfferingDisplayText());
}

volResponse.setStorageType(volume.isUseLocalStorage() ? ServiceOffering.StorageType.local.toString() : ServiceOffering.StorageType.shared.toString());
if (view == ResponseView.Full) {
volResponse.setStorageType(volume.isUseLocalStorage() ? ServiceOffering.StorageType.local.toString() : ServiceOffering.StorageType.shared.toString());
}
volResponse.setBytesReadRate(volume.getBytesReadRate());
volResponse.setBytesWriteRate(volume.getBytesReadRate());
volResponse.setIopsReadRate(volume.getIopsWriteRate());
Expand Down
11 changes: 10 additions & 1 deletion ui/scripts/metrics.js
Original file line number Diff line number Diff line change
Expand Up @@ -553,6 +553,15 @@
cloudStack.sections.metrics.volumes = {
title: 'label.metrics',
listView: {
preFilter: function(args) {
var hiddenFields = [];
if (!isAdmin()) {
hiddenFields.push('physicalsize');
hiddenFields.push('storage');
hiddenFields.push('storagetype');
}
return hiddenFields;
},
id: 'volumes',
fields: {
name: {
Expand Down Expand Up @@ -598,7 +607,7 @@
},
storage: {
label: 'label.metrics.storagepool'
},
}
},
dataProvider: function(args) {
var data = {listAll: true};
Expand Down
4 changes: 3 additions & 1 deletion ui/scripts/ui/widgets/listView.js
Original file line number Diff line number Diff line change
Expand Up @@ -862,8 +862,10 @@
if (groupableColumns) {
$tr.addClass('groupable-header-columns').addClass('groupable-header');
$.each(fields, function(key) {
if ($.inArray(key, hiddenFields) != -1)
if ($.inArray(key, hiddenFields) != -1) {
return true;
}

var field = this;
if (field.columns) {
var colspan = Object.keys(field.columns).length;
Expand Down