package com.ibyte.framework.discovery.core.listener;

import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.eureka.EurekaServerContextHolder;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.netflix.eureka.server.event.*;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * 注册中心状态监听
 *
 * @author <a href="mailto:[email protected]">iByte</a>
 * @since 1.0.1
 */
@Slf4j
@Component
public class EurekaStateChangeListener {

    @Resource
    private ApplicationInfoManager applicationInfoManager;

    /**
     * Eureka Registry启动事件
     * @param event
     */
    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        log.info("Eureka Registry在[{}]启动成功", event.getTimestamp());
    }

    /**
     * Eureka Server启动事件
     * @param event
     */
    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        log.info("Eureka Server在[{}]启动成功", event.getTimestamp());
    }

    /**
     * 服务实例下线事件
     * @param event
     */
    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        log.info("服务实例[{}]下线", event.getAppName());
    }

    /**
     * 服务实例注册事件
     * @param event
     */
    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        /**
         * 获取当前已注册的所有服务器实例
         */
        int total = EurekaServerContextHolder.getInstance().getServerContext().getRegistry().getSortedApplications().size();
//        event.getInstanceInfo().getActionType()
        log.info("服务实例[{}]注册成功,当前服务器已注册服务实例数量[{}]", event.getInstanceInfo().getAppName(), total);

    }

    /**
     * 服务实例续约事件
     * @param event
     */
    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
//    	log.info("服务实例[{}]续约成功", event.getInstanceInfo().getAppName());
    }
}