/*
* NOTE: This copyright does *not* cover user programs that use HQ program
* services by normal system calls through the application program interfaces
* provided as part of the Hyperic Plug-in Development Kit or the Hyperic Client
* Development Kit - this is merely considered normal use of the program, and
* does *not* fall under the heading of "derived work".
*
* Copyright (C) [2004-2008], Hyperic, Inc. This file is part of HQ.
*
* HQ is free software; you can redistribute it and/or modify it under the terms
* version 2 of the GNU General Public License as published by the Free Software
* Foundation. 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 General
* Public License for more details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
* Place, Suite 330, Boston, MA 02111-1307 USA.
*/
package org.hyperic.hq.appdef.server.session;
import java.util.List;
import javax.annotation.PostConstruct;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hyperic.hq.appdef.shared.AgentManager;
import org.hyperic.hq.appdef.shared.AppdefEntityID;
import org.hyperic.hq.authz.server.session.AuthzSubject;
import org.hyperic.hq.authz.shared.AuthzSubjectManager;
import org.hyperic.hq.zevents.ZeventEnqueuer;
import org.hyperic.hq.zevents.ZeventListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
* The Zevent Listener that upgrades agents.
*/
@Component
public class TransferAgentPluginZeventListener implements ZeventListener<TransferAgentPluginZevent> {
private final Log _log = LogFactory.getLog(TransferAgentPluginZeventListener.class);
private AgentManager agentManager;
private AuthzSubjectManager authzSubjectManager;
private ZeventEnqueuer zEventManager;
@Autowired
public TransferAgentPluginZeventListener(AgentManager agentManager, AuthzSubjectManager authzSubjectManager, ZeventEnqueuer zEventManager) {
this.agentManager = agentManager;
this.authzSubjectManager = authzSubjectManager;
this.zEventManager = zEventManager;
}
@PostConstruct
public void subscribe() {
zEventManager.addBufferedListener(TransferAgentPluginZevent.class, this);
}
/**
* @see org.hyperic.hq.zevents.ZeventListener#processEvents(java.util.List)
*/
public void processEvents(List<TransferAgentPluginZevent> events) {
AuthzSubject overlord = authzSubjectManager.getOverlordPojo();
for (TransferAgentPluginZevent zevent : events) {
final AppdefEntityID aid = zevent.getAgent();
try {
agentManager.transferAgentPlugin(overlord, zevent.getAgent(), zevent.getPlugin());
agentManager.restartAgent(overlord, aid);
} catch (Exception e) {
_log.warn("Failed to transfer plugin " + zevent.getPlugin() + " to agent " + zevent.getAgent().getID(),
e);
}
}
}
public String toString() {
return "AgentPluginTransfer";
}
}