/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package util;
import com.emc.storageos.coordinator.client.model.SiteState;
import com.emc.storageos.model.dr.SiteActive;
import com.emc.storageos.model.dr.SiteAddParam;
import com.emc.storageos.model.dr.SiteDetailRestRep;
import com.emc.storageos.model.dr.SiteErrorResponse;
import com.emc.storageos.model.dr.SiteIdListParam;
import com.emc.storageos.model.dr.SiteRestRep;
import com.emc.storageos.model.dr.SiteUpdateParam;
import com.emc.storageos.svcs.errorhandling.resources.APIException;
import com.emc.vipr.client.exceptions.ServiceErrorException;
import com.google.common.collect.Lists;
import com.sun.jersey.api.client.ClientResponse;
import java.util.Iterator;
import java.util.List;
import static util.BourneUtil.getViprClient;
public class DisasterRecoveryUtils {
public static List<SiteRestRep> getSites() {
List<SiteRestRep> sites = Lists.newArrayList();
sites.addAll(getViprClient().site().listAllSites().getSites());
return sites;
}
public static boolean isLocalSiteRemoved() {
return getViprClient().site().isLocalSiteRemoved();
}
public static int getSiteCount() {
return getViprClient().site().listAllSites().getSites().size();
}
public static SiteActive checkActiveSite() {
return getViprClient().site().checkIsActive();
}
public static SiteRestRep addStandby(SiteAddParam standbySite) {
return getViprClient().site().createSite(standbySite);
}
public static ClientResponse deleteStandby(SiteIdListParam ids) {
return getViprClient().site().deleteSite(ids);
}
public static ClientResponse pauseStandby(SiteIdListParam ids) {
ClientResponse restresponse = null;
try {
restresponse = getViprClient().site().pauseSite(ids);
} catch (ServiceErrorException ex) {
throw APIException.internalServerErrors.pauseStandbyPrecheckFailed(ex.getServiceError().getCodeDescription(),
ex.getServiceError().getDetailedMessage());
} catch (Exception ex) {
throw APIException.internalServerErrors.pauseStandbyPrecheckFailed(ex.getCause().toString(), ex.getMessage());
}
return restresponse;
}
public static SiteRestRep resumeStandby(String uuid) {
return getViprClient().site().resumeSite(uuid);
}
public static SiteRestRep retryStandby(String uuid) {
return getViprClient().site().retrySite(uuid);
}
public static SiteRestRep getSite(String uuid) {
try {
return getViprClient().site().getSite(uuid);
} catch (Exception e) {
return null;
}
}
public static boolean hasStandbySite(String id) {
try {
SiteRestRep standbySite = getViprClient().site().getSite(id);
if (standbySite == null) {
return false;
}
return true;
} catch (Exception e) {
return false;
}
}
public static boolean hasStandbySites(List<String> ids) {
for (String id : ids) {
if (hasStandbySite(id)) {
return true;
}
}
return false;
}
public static boolean hasAnyStandbySite() {
List<SiteRestRep> sites = DisasterRecoveryUtils.getSites();
return sites.size() > 1;
}
public static boolean hasPausedSite() {
List<SiteRestRep> sites = DisasterRecoveryUtils.getSites();
for (SiteRestRep site : sites) {
if (SiteState.STANDBY_PAUSED.toString().equals(site.getState())) {
return true;
}
}
return false;
}
public static boolean hasActiveDegradedSite() {
List<SiteRestRep> sites = DisasterRecoveryUtils.getSites();
for (SiteRestRep site : sites) {
if (SiteState.ACTIVE_DEGRADED.toString().equals(site.getState())) {
return true;
}
}
return false;
}
public static ClientResponse doSwitchover(String id) {
return getViprClient().site().doSwitchover(id);
}
public static ClientResponse doFailover(String id) {
return getViprClient().site().doFailover(id);
}
public static SiteRestRep getActiveSite() {
List<SiteRestRep> sites = getViprClient().site().listAllSites().getSites();
for (SiteRestRep activeSite : sites) {
if (activeSite.getState().toUpperCase().equals(String.valueOf(SiteState.ACTIVE))) {
return activeSite;
}
}
return null;
}
public static List<SiteRestRep> getStandbySites() {
List<SiteRestRep> sites = getViprClient().site().listAllSites().getSites();
Iterator<SiteRestRep> iterator = sites.iterator();
while (iterator.hasNext()) {
SiteRestRep site = iterator.next();
if (site.getState().toUpperCase().equals(String.valueOf(SiteState.ACTIVE))) {
iterator.remove();
}
}
return sites;
}
public static boolean isActiveSite() {
SiteActive siteCheck = checkActiveSite();
return siteCheck.getIsActive();
}
public static String getLocalSiteName() {
SiteActive siteCheck = checkActiveSite();
return siteCheck.getLocalSiteName();
}
public static String getLocalUuid() {
SiteActive siteCheck = checkActiveSite();
return siteCheck.getLocalUuid();
}
public static SiteErrorResponse getSiteError(String uuid) {
return getViprClient().site().getSiteError(uuid);
}
public static ClientResponse updateSite(String uuid, SiteUpdateParam updatesite) {
return getViprClient().site().updateSite(uuid, updatesite);
}
public static SiteDetailRestRep getSiteDetails(String uuid) {
return getViprClient().site().getSiteDetails(uuid);
}
public static SiteRestRep getLocalSite() {
return getViprClient().site().getLocalSite();
}
public static boolean isMultiDrSite() {
SiteActive siteCheck = checkActiveSite();
return siteCheck.getIsMultiSite();
}
}