/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.sa.service.vipr.tasks;
import java.util.List;
import javax.inject.Inject;
import com.emc.sa.engine.ExecutionUtils;
import com.emc.sa.model.dao.ModelClient;
import com.emc.sa.service.vipr.block.BlockStorageUtils;
import com.emc.storageos.db.client.model.ActionableEvent;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.client.model.Host;
import com.google.common.base.Joiner;
import com.google.common.collect.Lists;
public class GetActionableEvents extends ViPRExecutionTask<Void> {
@Inject
private ModelClient models;
private DataObject resource;
public GetActionableEvents(DataObject resource) {
this.resource = resource;
provideDetailArgs(resource.getId());
}
@Override
public Void executeTask() throws Exception {
List<ActionableEvent> events = models.actionableEvents().findPendingByAffectedResources(resource.getId());
if (!events.isEmpty()) {
ExecutionUtils.fail("failTask.actionableEvents.precheck", new Object[] {},
new Object[] { resource.forDisplay(), getEventOutput(events) });
}
// for clusters, check all hosts in the cluster
if (BlockStorageUtils.isCluster(resource.getId())) {
for (Host host : models.hosts().findByCluster(resource.getId())) {
events = models.actionableEvents().findPendingByAffectedResources(host.getId());
if (!events.isEmpty()) {
ExecutionUtils.fail("failTask.actionableEvents.precheck", new Object[] {},
new Object[] { host.forDisplay(), getEventOutput(events) });
}
}
}
return null;
}
/**
* Get human readable output for events
*
* @param events the list of events to get output for
* @return event information
*/
private String getEventOutput(List<ActionableEvent> events) {
List<String> result = Lists.newArrayList();
for (ActionableEvent event : events) {
result.add(event.getResource().getName() + ": " + event.forDisplay());
}
return Joiner.on("\n").join(result);
}
}