package io.cattle.platform.agent.connection.simulator.impl;
import io.cattle.platform.agent.connection.simulator.AgentConnectionSimulator;
import io.cattle.platform.agent.connection.simulator.AgentSimulatorEventProcessor;
import io.cattle.platform.core.model.Agent;
import io.cattle.platform.eventing.model.Event;
import io.cattle.platform.eventing.model.EventVO;
import io.cattle.platform.iaas.event.IaasEvents;
import io.cattle.platform.iaas.event.delegate.DelegateEvent;
import io.cattle.platform.json.JsonMapper;
import io.cattle.platform.object.ObjectManager;
import io.cattle.platform.util.type.Priority;
import javax.inject.Inject;
public class SimulatorDelegateProcessor implements AgentSimulatorEventProcessor, Priority {
@Inject
JsonMapper jsonMapper;
@Inject
ObjectManager objectManager;
@Override
public int getPriority() {
return Priority.PRE;
}
@Override
public Event handle(AgentConnectionSimulator simulator, final Event event) throws Exception {
String name = event.getName();
if (name == null || !name.startsWith(IaasEvents.DELEGATE_REQUEST)) {
return null;
}
DelegateEvent delegate = jsonMapper.convertValue(event, DelegateEvent.class);
Object agentId = delegate.getData().getInstanceData().get("agentId");
if (agentId == null) {
throw new IllegalStateException("Failed to find agent id to simulate for delegate event [" + event.getId() + "]");
}
Agent agent = objectManager.loadResource(Agent.class, agentId.toString());
if (agent == null) {
throw new IllegalStateException("Failed to find agent to simulate for delegate event [" + event.getId() + "]");
}
AgentConnectionSimulator delegateSimulator = new AgentConnectionSimulator(objectManager, agent, simulator.getProcessors());
Event input = delegateSimulator.execute(delegate.getData().getEvent());
return EventVO.reply(event).withData(input);
}
}