package com.emc.storageos.imageservercontroller;
import java.net.URI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.ComputeImageServer;
import com.emc.storageos.db.client.model.ComputeImageServer.ComputeImageServerStatus;
import com.emc.storageos.db.client.model.Operation.Status;
import com.emc.storageos.exceptions.DeviceControllerException;
import com.emc.storageos.security.audit.AuditLogManager;
import com.emc.storageos.security.audit.AuditLogManagerFactory;
import com.emc.storageos.services.OperationTypeEnum;
import com.emc.storageos.svcs.errorhandling.model.ServiceCoded;
import com.emc.storageos.volumecontroller.TaskCompleter;
/**
* Completer class for handling ComputeImageServer completion tasks
*
*/
@SuppressWarnings("serial")
public class ComputeImageServerCompleter extends TaskCompleter{
private static final Logger log = LoggerFactory.getLogger(ComputeImageServerCompleter.class);
private OperationTypeEnum opType = null;
private String serviceType = null;
public ComputeImageServerCompleter(URI id, String opId, OperationTypeEnum opType, String serviceType) {
super(ComputeImageServer.class, id, opId);
this.opType = opType;
this.serviceType = serviceType;
}
/**
* Method to be invoked on job execution completion
* @param dbClient {@link DBClient} instance
* @param Status {@link Status} of job
* @param coded {@link ServiceCoded} instance
*/
@Override
protected void complete(DbClient dbClient, Status status, ServiceCoded coded)
throws DeviceControllerException {
log.info("ComputeImageServerCompleter.complete {}", status.name());
ComputeImageServer imageServer = dbClient.queryObject(ComputeImageServer.class, getId());
AuditLogManager auditMgr = AuditLogManagerFactory.getAuditLogManager();
if (status == Status.error) {
dbClient.error(ComputeImageServer.class, getId(), getOpId(), coded);
auditMgr.recordAuditLog(null, null, serviceType,
opType, System.currentTimeMillis(),
AuditLogManager.AUDITLOG_FAILURE, AuditLogManager.AUDITOP_END,
imageServer.getId().toString(), imageServer.getComputeImageServerStatus());
} else {
if (opType == OperationTypeEnum.DELETE_COMPUTE_IMAGESERVER) {
dbClient.markForDeletion(imageServer);
} else if (opType == OperationTypeEnum.IMAGESERVER_VERIFY_IMPORT_IMAGES) {
imageServer.setComputeImageServerStatus(ComputeImageServerStatus.AVAILABLE.name());
dbClient.persistObject(imageServer);
}
dbClient.ready(ComputeImageServer.class, getId(), getOpId());
auditMgr.recordAuditLog(null, null, serviceType,
opType, System.currentTimeMillis(),
AuditLogManager.AUDITLOG_SUCCESS, AuditLogManager.AUDITOP_END,
imageServer.getId().toString(), imageServer.getComputeImageServerStatus());
}
}
}