package org.ovirt.engine.core.vdsbroker.gluster;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSession;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepSessionDetails;
public class GlusterVolumeGeoRepStatusDetail extends GlusterVolumeGeoRepStatus {
private static final String SESSION_STATUS = "sessionStatus";
private static final String LAST_SYNCED = "lastSynced";
private static final String FAILURES = "failures";
private static final String DATA = "data";
private static final String META = "meta";
private static final String ENTRY = "entry";
private static final String TIMEZONE = "timeZone";
private static final String CHECK_POINT_COMPLETION_TIME = "checkpointCompletionTime";
private static final String CHECK_POINT_COMPLETED = "checkpointCompleted";
private static final String CHECK_POINT_TIME = "checkpointTime";
private final ArrayList<GlusterGeoRepSessionDetails> geoRepDetails = new ArrayList<>();
private Long parseSafeLong(Map<String, Object> innerMap, String key) {
return innerMap.containsKey(key) && StringUtils.isNumeric(innerMap.get(key).toString()) ? Long.parseLong(innerMap.get(key).toString())
: null;
}
@Override
protected GlusterGeoRepSessionDetails getSessionDetails(Map<String, Object> innerMap) {
GlusterGeoRepSessionDetails details = super.getSessionDetails(innerMap);
if (details != null) {
Long dataOpsPending = parseSafeLong(innerMap, DATA);
Long metaOpsPending = parseSafeLong(innerMap, META);
Long entryOpsPending = parseSafeLong(innerMap, ENTRY);
Long failures = parseSafeLong(innerMap, FAILURES);
details.setDataOpsPending(dataOpsPending);
details.setMetaOpsPending(metaOpsPending);
details.setEntryOpsPending(entryOpsPending);
details.setFailures(failures);
if (innerMap.containsKey(CHECK_POINT_COMPLETED)) {
if ("YES".equalsIgnoreCase(innerMap.get(CHECK_POINT_COMPLETED).toString())) {
details.setCheckpointCompleted(true);
} else {
details.setCheckpointCompleted(false);
}
}
String timezone = innerMap.containsKey(TIMEZONE) ? innerMap.get(TIMEZONE).toString() : null;
Long lastSynced = parseSafeLong(innerMap, LAST_SYNCED);
Long checkPointTime = parseSafeLong(innerMap, CHECK_POINT_TIME);
Long checkPointCompletionTime = parseSafeLong(innerMap, CHECK_POINT_COMPLETION_TIME);
details.setLastSyncedAt(lastSynced != null ? new Date(lastSynced * 1000L) : null);
details.setCheckPointCompletedAt(checkPointCompletionTime != null ?
new Date(checkPointCompletionTime * 1000L) : null);
details.setCheckPointTime(checkPointTime != null ? new Date(checkPointTime * 1000L) : null);
}
geoRepDetails.add(details);
return details;
}
public GlusterVolumeGeoRepStatusDetail(Map<String, Object> innerMap) {
super(innerMap, false);
if (innerMap.containsKey(SESSION_STATUS)) {
populateSessions((Map<String, Object>) innerMap.get(SESSION_STATUS));
}
}
public List<GlusterGeoRepSessionDetails> getGeoRepDetails() {
return geoRepDetails;
}
@Override
public List<GlusterGeoRepSession> getGeoRepSessions() {
return geoRepSessions;
}
}