/* * Copyright (C) 2011 Universidade Federal de Campina Grande * * This file is part of OurGrid. * * OurGrid is free software: you can redistribute it and/or modify it under the * terms of the GNU Lesser General Public License as published by the Free * Software Foundation, either version 3 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * */ package org.ourgrid.aggregator.communication.receiver; import java.util.ArrayList; import java.util.List; import org.ourgrid.aggregator.request.CommunityStatusProviderIsDownRequestTO; import org.ourgrid.aggregator.request.CommunityStatusProviderIsUpRequestTO; import org.ourgrid.aggregator.request.HereIsPeerStatusChangeHistoryRequestTO; import org.ourgrid.aggregator.request.HereIsStatusProviderListRequestTO; import org.ourgrid.common.interfaces.CommunityStatusProvider; import org.ourgrid.common.interfaces.CommunityStatusProviderClient; import org.ourgrid.common.internal.OurGridRequestControl; import org.ourgrid.common.statistics.beans.ds.DS_PeerStatusChange; import org.ourgrid.peer.PeerConstants; import br.edu.ufcg.lsd.commune.Module; import br.edu.ufcg.lsd.commune.api.FailureNotification; import br.edu.ufcg.lsd.commune.api.InvokeOnDeploy; import br.edu.ufcg.lsd.commune.api.RecoveryNotification; import br.edu.ufcg.lsd.commune.container.servicemanager.ServiceManager; import br.edu.ufcg.lsd.commune.identification.DeploymentID; import br.edu.ufcg.lsd.commune.identification.ServiceID; /** * This class implements the interface CommunityStatusProviderClient and serves to * notify the Community Status. * */ public class CommunityStatusProviderClientReceiver implements CommunityStatusProviderClient { private ServiceManager serviceManager; @InvokeOnDeploy public void init(ServiceManager serviceManager) { this.serviceManager = serviceManager; } /** * {@inheritDoc} */ @Override public void hereIsStatusProviderList(List<String> statusProviders) { HereIsStatusProviderListRequestTO request = new HereIsStatusProviderListRequestTO(); List<String> newStatusProviderAddress = new ArrayList<String>(); for (int i=0; i < statusProviders.size(); i++) { newStatusProviderAddress.add(serviceIDProvider(statusProviders.get(i)).toString()); } request.setStatusProviders(newStatusProviderAddress); OurGridRequestControl.getInstance().execute(request, serviceManager); } /** * {@inheritDoc} */ @Override public void hereIsPeerStatusChangeHistory( List<DS_PeerStatusChange> statusChanges, long since) { HereIsPeerStatusChangeHistoryRequestTO request = new HereIsPeerStatusChangeHistoryRequestTO(); request.setStatusChanges(statusChanges); request.setSince(since); OurGridRequestControl.getInstance().execute(request, serviceManager); } /** * Notifies the Community Status Provider failure and send a request. * @param monitorable {@link CommunityStatusProvider} */ @FailureNotification public void doNotifyFailure(CommunityStatusProvider monitorable, DeploymentID monitorableID) { CommunityStatusProviderIsDownRequestTO request = new CommunityStatusProviderIsDownRequestTO(); request.setProviderAddress(monitorableID.getServiceID().toString()); OurGridRequestControl.getInstance().execute(request, serviceManager); } /** * Notifies the Community Status Provider recovery and send a request. * @param commStatusProvider {@link CommunityStatusProvider} */ @RecoveryNotification public void doNotifyRecovery(CommunityStatusProvider commStatusProvider) { CommunityStatusProviderIsUpRequestTO request = new CommunityStatusProviderIsUpRequestTO(); request.setCommStatusProviderAddress(serviceManager.getStubDeploymentID(commStatusProvider) .getServiceID().toString()); OurGridRequestControl.getInstance().execute(request, serviceManager); } private ServiceID serviceIDProvider(String providerAddress) { String[] addresses = providerAddress.split("@"); return new ServiceID(addresses[0], addresses[1], PeerConstants.MODULE_NAME, Module.CONTROL_OBJECT_NAME); } }