package org.ovirt.engine.core.vdsbroker.gluster; import java.util.Map; import org.ovirt.engine.core.common.asynctasks.gluster.GlusterAsyncTaskStatus; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusDetail; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusForHost; import org.ovirt.engine.core.common.job.JobExecutionStatus; import org.ovirt.engine.core.compat.Guid; public class GlusterVolumeTaskReturn extends GlusterTaskInfoReturn { private static final String HOST_LIST = "hosts"; private static final String SUMMARY = "summary"; private static final String HOST_NAME = "name"; private static final String HOST_UUID = "id"; private static final String FILES_MOVED = "filesMoved"; private static final String TOTAL_SIZE_MOVED = "totalSizeMoved"; private static final String FILES_SCANNED = "filesScanned"; private static final String FILES_FAILED = "filesFailed"; private static final String FILES_SKIPPED = "filesSkipped"; private static final String STATUS = "status"; private static final String RUNTIME = "runtime"; private final GlusterVolumeTaskStatusEntity statusDetails = new GlusterVolumeTaskStatusEntity(); @SuppressWarnings("unchecked") public GlusterVolumeTaskReturn(Map<String, Object> innerMap) { super(innerMap); if (innerMap.containsKey(HOST_LIST)) { for (Object nodeStatus : (Object[]) innerMap.get(HOST_LIST)) { statusDetails.getHostwiseStatusDetails().add(getStatusForNode((Map<String, Object>) nodeStatus)); } } if (innerMap.containsKey(SUMMARY)) { populateGlusterVolumeTaskStatusDetail(statusDetails.getStatusSummary(), (Map<String, Object>) innerMap.get(SUMMARY)); } } private GlusterVolumeTaskStatusForHost getStatusForNode(Map<String, Object> nodeStatus) { GlusterVolumeTaskStatusForHost rebalanceStatusForHost = new GlusterVolumeTaskStatusForHost(); rebalanceStatusForHost.setHostName(nodeStatus.containsKey(HOST_NAME) ? (String) nodeStatus.get(HOST_NAME) : null); rebalanceStatusForHost.setHostUuid(nodeStatus.containsKey(HOST_UUID) ? new Guid((String) nodeStatus.get(HOST_UUID)) : null); populateGlusterVolumeTaskStatusDetail(rebalanceStatusForHost, nodeStatus); return rebalanceStatusForHost; } private void populateGlusterVolumeTaskStatusDetail(GlusterVolumeTaskStatusDetail detail, Map<String, Object> map) { detail.setFilesScanned(map.containsKey(FILES_SCANNED) ? Long.parseLong(map.get(FILES_SCANNED).toString()) : 0); detail.setFilesMoved(map.containsKey(FILES_MOVED) ? Long.parseLong(map.get(FILES_MOVED).toString()) : 0); detail.setFilesFailed(map.containsKey(FILES_FAILED) ? Long.parseLong(map.get(FILES_FAILED).toString()) : 0); detail.setFilesSkipped(map.containsKey(FILES_SKIPPED) ? Long.parseLong(map.get(FILES_SKIPPED).toString()) : 0); detail.setTotalSizeMoved(map.containsKey(TOTAL_SIZE_MOVED) ? Long.parseLong(map.get(TOTAL_SIZE_MOVED).toString()) : 0); detail.setStatus(map.containsKey(STATUS) ? GlusterAsyncTaskStatus.from(map.get(STATUS).toString()) .getJobExecutionStatus() : JobExecutionStatus.UNKNOWN); detail.setRunTime(map.containsKey(RUNTIME) ? Double.parseDouble(map.get(RUNTIME).toString()) : 0); } public GlusterVolumeTaskStatusEntity getStatusDetails() { return statusDetails; } }