package org.ourgrid.peer.business.requester; import java.util.ArrayList; import java.util.List; import org.ourgrid.common.config.Configuration; import org.ourgrid.common.interfaces.status.CommunityInfo; import org.ourgrid.common.interfaces.status.ConsumerInfo; import org.ourgrid.common.interfaces.status.NetworkOfFavorsStatus; import org.ourgrid.common.interfaces.to.DiscoveryServiceState; import org.ourgrid.common.internal.IResponseTO; import org.ourgrid.common.statistics.control.AccountingControl; import org.ourgrid.common.util.StringUtil; import org.ourgrid.peer.business.dao.ConsumerDAO; import org.ourgrid.peer.business.dao.PeerDAOFactory; import org.ourgrid.peer.dao.DiscoveryServiceClientDAO; import org.ourgrid.peer.request.GetCompleteStatusRequestTO; import org.ourgrid.peer.response.HereIsCompleteStatusResponseTO; import org.ourgrid.peer.status.PeerCompleteStatus; import org.ourgrid.peer.to.AllocableWorker; import org.ourgrid.peer.to.RemoteConsumer; import org.ourgrid.reqtrace.Req; public class GetCompleteStatusRequester extends AbstractGetStatusRequester<GetCompleteStatusRequestTO> { public List<IResponseTO> execute(GetCompleteStatusRequestTO request) { List<IResponseTO> responses = new ArrayList<IResponseTO>(); if (request.canStatusBeUsed()) { HereIsCompleteStatusResponseTO to = new HereIsCompleteStatusResponseTO(); to.setClientAddress(request.getClientAddress()); to.setPeerAddress(request.getPeerAddress()); to.setPeerCompleteStatus(getCompleteStatus(responses, request)); responses.add(to); } return responses; } @Req("REQ038a") protected PeerCompleteStatus getCompleteStatus(List<IResponseTO> responses, GetCompleteStatusRequestTO request) { PeerCompleteStatus completeStatus = new PeerCompleteStatus( getLocalWorkersInfo(responses, StringUtil.addressToUserAtServer(request.getPeerAddress())), getRemoteWorkersInfo(), getLocalConsumersInfo(), getRemoteConsumersInfo(), getUsersInfo(responses), getNetworkOfFavorsStatus(responses, request), getCommunityInfo(), request.getUpTime(), request.getLabel(), Configuration.VERSION.toString(), getDescription(request.getContextString(), request.getPropConfDir(), request.getPropLabel(), request.getPropJoinCommunity(), request.isJoinCommunityEnabled())); return completeStatus; } @Req("REQ038a") private List<ConsumerInfo> getRemoteConsumersInfo() { ConsumerDAO consumerDAO = PeerDAOFactory.getInstance().getConsumerDAO(); List<RemoteConsumer> remoteConsumers = consumerDAO.getRemoteConsumers(); List<ConsumerInfo> remoteConsumersInfo = new ArrayList<ConsumerInfo>(); for (RemoteConsumer remoteConsumer : remoteConsumers) { if (remoteConsumer.getConsumerAddress() == null) { continue; } int noOfLocalWorkers = 0; for (AllocableWorker allWorker : remoteConsumer.getAllocableWorkers()) { if (allWorker.isWorkerLocal()) { noOfLocalWorkers++; } } ConsumerInfo consumerInfo = new ConsumerInfo( noOfLocalWorkers, StringUtil.addressToUserAtServer(remoteConsumer.getConsumerAddress())); remoteConsumersInfo.add(consumerInfo); } return remoteConsumersInfo; } @Req("REQ038a") private NetworkOfFavorsStatus getNetworkOfFavorsStatus(List<IResponseTO> responses, GetCompleteStatusRequestTO request) { return new NetworkOfFavorsStatus(AccountingControl.getInstance().getBalances(responses, request.getMyCertSubjectDN())); } private CommunityInfo getCommunityInfo() { String dsAddress = null; DiscoveryServiceClientDAO dsDao = PeerDAOFactory.getInstance().getDiscoveryServiceClientDAO(); dsAddress = dsDao.getDsAddresses().toString(); List<String> connectedPeers = new ArrayList<String>(); for (String peerAddress : dsDao.getRemoteWorkerProvidersAddress()) { connectedPeers.add(StringUtil.addressToUserAtServer(peerAddress)); } return new CommunityInfo(dsAddress, dsDao.isConnected() ? DiscoveryServiceState.UP : DiscoveryServiceState.CONTACTING, connectedPeers); } }