package org.ourgrid.broker.business.requester;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.ourgrid.broker.business.dao.BrokerDAOFactory;
import org.ourgrid.broker.business.dao.JobDAO;
import org.ourgrid.broker.business.dao.PeerDAO;
import org.ourgrid.broker.business.dao.PeerEntry;
import org.ourgrid.broker.business.scheduler.SchedulerIF;
import org.ourgrid.broker.request.GetBrokerCompleteStatusRequestTO;
import org.ourgrid.broker.response.HereIsBrokerCompleteStatusResponseTO;
import org.ourgrid.broker.status.JobWorkerStatus;
import org.ourgrid.broker.status.PeerStatusInfo;
import org.ourgrid.broker.status.WorkerStatusInfo;
import org.ourgrid.common.interfaces.to.BrokerCompleteStatus;
import org.ourgrid.common.interfaces.to.JobsPackage;
import org.ourgrid.common.interfaces.to.PeersPackage;
import org.ourgrid.common.interfaces.to.WorkersPackage;
import org.ourgrid.common.internal.IResponseTO;
import org.ourgrid.common.util.CommonUtils;
public class GetBrokerCompleteStatusRequester extends AbstractBrokerStatusRequester<GetBrokerCompleteStatusRequestTO> {
public List<IResponseTO> execute(GetBrokerCompleteStatusRequestTO to) {
List<IResponseTO> responses = new ArrayList<IResponseTO>();
if (to.canStatusBeUsed()) {
HereIsBrokerCompleteStatusResponseTO responseTO = new HereIsBrokerCompleteStatusResponseTO();
responseTO.setCompleteStatus(getCompleteStatus(to));
responseTO.setClientAddress(to.getClientAddress());
responseTO.setMyAddress(to.getMyAddress());
responses.add(responseTO);
}
return responses;
}
/**
* Broker Complete status request
* @param client
*/
private BrokerCompleteStatus getCompleteStatus(GetBrokerCompleteStatusRequestTO to) {
BrokerCompleteStatus status = new BrokerCompleteStatus(
new JobsPackage(getAllJobsInfo()),
new PeersPackage(getAllPeersInfo()),
new WorkersPackage(getAllWorkersInfo()),
to.getUptime(),
to.getConfiguration());
return status;
}
private List<PeerStatusInfo> getAllPeersInfo() {
PeerDAO peerDAO = BrokerDAOFactory.getInstance().getPeerDAO();
List<PeerEntry> peers = new ArrayList<PeerEntry>(peerDAO.getPeers());
List<PeerStatusInfo> peerInfoList = new ArrayList<PeerStatusInfo>();
for (PeerEntry peerEntry : peers) {
peerInfoList.add(new PeerStatusInfo(peerEntry.getState().toString(), peerEntry.getPeerSpec(), peerEntry.getLoginError()));
}
return peerInfoList;
}
private Map<Integer, Set<WorkerStatusInfo>> getAllWorkersInfo() {
Map<Integer, Set<WorkerStatusInfo>> allWorkers = CommonUtils.createSerializableMap();
JobWorkerStatus jwStatus = null;
JobDAO jobDAO = BrokerDAOFactory.getInstance().getJobDAO();
for(SchedulerIF scheduler: jobDAO.getSchedulers()) {
jwStatus = scheduler.getCompleteStatus();
allWorkers.putAll(convertWorkerStatus(jwStatus.getWorkers()));
}
return allWorkers;
}
}