package org.zstack.console; import org.springframework.beans.factory.annotation.Autowired; import org.zstack.core.cloudbus.CloudBusCallBack; import org.zstack.core.config.GlobalConfig; import org.zstack.core.config.GlobalConfigUpdateExtensionPoint; import org.zstack.core.notification.N; import org.zstack.core.tacker.PingTracker; import org.zstack.header.console.*; import org.zstack.header.message.MessageReply; import org.zstack.header.message.NeedReplyMessage; import org.zstack.utils.Utils; import org.zstack.utils.logging.CLogger; /** * Created by xing5 on 2016/4/8. */ public class ConsoleProxyAgentTracker extends PingTracker { private static final CLogger logger = Utils.getLogger(ConsoleProxyAgentTracker.class); @Autowired private ConsoleManager cmgr; @Override public String getResourceName() { return "console proxy agent"; } @Override public NeedReplyMessage getPingMessage(String resUuid) { PingConsoleProxyAgentMsg msg = new PingConsoleProxyAgentMsg(); msg.setAgentUuid(resUuid); ConsoleBackend bkd = cmgr.getConsoleBackend(); msg.setServiceId(bkd.returnServiceIdForConsoleAgentMsg(msg, resUuid)); return msg; } @Override public int getPingInterval() { return ConsoleGlobalConfig.PING_INTERVAL.value(Integer.class); } @Override public int getParallelismDegree() { return Integer.MAX_VALUE; } @Override protected void startHook() { ConsoleGlobalConfig.PING_INTERVAL.installLocalUpdateExtension(new GlobalConfigUpdateExtensionPoint() { @Override public void updateGlobalConfig(GlobalConfig oldConfig, GlobalConfig newConfig) { pingIntervalChanged(); } }); } @Override public void handleReply(final String resourceUuid, MessageReply reply) { if (!reply.isSuccess()) { //TODO N.New(ConsoleProxyVO.class, resourceUuid).warn_("unable to ping the console proxy agent[uuid:%s], %s", resourceUuid, reply.getError()); return; } PingConsoleProxyAgentReply pr = reply.castReply(); if (pr.isDoReconnect()) { ReconnectConsoleProxyMsg rmsg = new ReconnectConsoleProxyMsg(); rmsg.setAgentUuid(resourceUuid); ConsoleBackend bkd = cmgr.getConsoleBackend(); rmsg.setServiceId(bkd.returnServiceIdForConsoleAgentMsg(rmsg, resourceUuid)); bus.send(rmsg, new CloudBusCallBack(null) { @Override public void run(MessageReply reply) { if (!reply.isSuccess()) { N.New(ConsoleProxyVO.class, resourceUuid).warn_("failed to reconnect console proxy agent[uuid:%s], %s", resourceUuid, reply.getError()); } else { N.New(ConsoleProxyVO.class, resourceUuid).info_("successfully reconnected the console proxy agent[uuid:%s]", resourceUuid); } } }); } } }