This is an automated email from the ASF dual-hosted git repository.

zhangxiaowei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozhera.git


The following commit(s) were added to refs/heads/master by this push:
     new 422dc630 refactor: improve code layering of ozhera-prometheus-agent 
module (#437)
422dc630 is described below

commit 422dc630edbcb9da1d2d3bf5359ca8c8c934b2d8
Author: Black Pan <[email protected]>
AuthorDate: Fri Sep 6 14:31:53 2024 +0800

    refactor: improve code layering of ozhera-prometheus-agent module (#437)
    
    * refactor: improve code layering of ozhera-prometheus-agent module
    
    * refactor: improve code layering of ozhera-prometheus-agent-service module
    
    ---------
    
    Co-authored-by: wodiwudi <[email protected]>
---
 .../prometheus/agent/service/DingDingService.java  | 265 +-------------
 .../prometheus/agent/service/FeishuService.java    |  77 +---
 .../prometheus/agent/service/InitService.java      |  49 +--
 .../agent/service/MioneMachineService.java         |  49 +--
 .../agent/service/PrometheusIpService.java         |  87 +----
 .../agent/service/PrometheusVmService.java         |  74 +---
 .../service/api/MioneMachineServiceExtension.java  |   2 +
 .../impl/MioneMachineServiceExtensionImpl.java}    |   4 +-
 .../impl/PrometheusIpServiceExtensionImpl.java}    | 177 +++++----
 .../DingDingServiceImpl.java}                      | 108 +++---
 .../FeishuServiceImpl.java}                        |  10 +-
 .../InitServiceImpl.java}                          |  29 +-
 .../service/impl/MioneMachineServiceImpl.java      |  19 +-
 ...rtImpl.java => PrometheusAlertServiceImpl.java} |   2 +-
 .../service/impl/PrometheusIpServiceImpl.java      | 403 +++------------------
 .../PrometheusVmServiceImpl.java}                  |  21 +-
 16 files changed, 305 insertions(+), 1071 deletions(-)

diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/DingDingService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/DingDingService.java
index 99ce2842..6f5b452e 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/DingDingService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/DingDingService.java
@@ -13,265 +13,20 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service;
-
-import com.alibaba.nacos.api.config.annotation.NacosValue;
-import com.aliyun.dingtalkcard_1_0.models.RegisterCallbackResponse;
-import com.aliyun.dingtalkim_1_0.Client;
-import com.aliyun.dingtalkim_1_0.models.SendRobotInteractiveCardHeaders;
-import com.aliyun.dingtalkim_1_0.models.SendRobotInteractiveCardRequest;
-import com.aliyun.dingtalkim_1_0.models.UpdateRobotInteractiveCardHeaders;
-import com.aliyun.dingtalkim_1_0.models.UpdateRobotInteractiveCardRequest;
-import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest;
-import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse;
-import com.aliyun.tea.TeaException;
-import com.aliyun.teaopenapi.models.Config;
-import com.aliyun.teautil.models.RuntimeOptions;
-import com.google.common.cache.Cache;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
-import java.util.*;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+package com.xiaomi.youpin.prometheus.agent.service;
 
 /**
  * @author zhangxiaowei6
  * @Date 2023/9/15 09:33
  */
-@Service
-@Slf4j
-@ConditionalOnProperty(name = "service.selector.property", havingValue = 
"outer")
-public class DingDingService {
-    private Client dingClient;
-    private Config dingConfig;
-
-    @Autowired
-    private Cache<String, Object> cache;
-
-    private com.aliyun.dingtalkoauth2_1_0.Client dingOauthClient;
-
-    private com.aliyun.dingtalkcard_1_0.Client dingCardClient;
-
-    @NacosValue(value = "${dingding.appKey}", autoRefreshed = true)
-    private String appKey;
-
-    @NacosValue(value = "${dingding.appSecret}", autoRefreshed = true)
-    private String appSecret;
-
-    @NacosValue(value = "${dingding.robotCode}", autoRefreshed = true)
-    private String robotCode;
-
-    @NacosValue(value = "${dingding.callbackUrl}", autoRefreshed = true)
-    private String callbackUrl;
-
-    @NacosValue(value = "${hera.alert.whiteList}", autoRefreshed = true)
-    private String whiteListStr;
-
-    @NacosValue(value = "${dingding.user.type}", autoRefreshed = true)
-    private String dingdingUserType;
-
-    private final String ACCESS_TOKEN = "dingding_access_token";
-
-    private final String DINGDING_USER_INFO_URL = 
"https://oapi.dingtalk.com/topapi/v2/user/get";;
-
-    private final Map<String, String> whiteListMap = new HashMap<>();
-
-    private Object getDingDingAccessToken() {
-
-        // Get data from the cache
-        return cache.getIfPresent(ACCESS_TOKEN);
-    }
-
-    private void setDingDingAccessToken(String accessToken) {
-        // Get data from the cache
-        cache.put(ACCESS_TOKEN, accessToken);
-    }
-
-    @PostConstruct
-    public void init() throws Exception {
-        dingConfig = new Config();
-        dingConfig.protocol = "https";
-        dingConfig.regionId = "central";
-        dingClient = new Client(dingConfig);
-        dingCardClient = new com.aliyun.dingtalkcard_1_0.Client(dingConfig);
-        dingOauthClient = new com.aliyun.dingtalkoauth2_1_0.Client(dingConfig);
-        //registerDingDingCallBack();
-        //user type judge
-        if (!dingdingUserType.equals("userId") && 
!dingdingUserType.equals("unionId")) {
-            log.error("DingDingService.userType not valid, userType: 
{}",dingdingUserType);
-            //set default value
-            dingdingUserType = "userId";
-        }
-        periodicRefreshWhiteList();
-    }
-
-    //2m auto refresh white list
-    private void periodicRefreshWhiteList() {
-        new ScheduledThreadPoolExecutor(1).scheduleWithFixedDelay(() -> {
-            //fill in white list
-            if (!StringUtils.isBlank(whiteListStr)) {
-                List<String> whiteList = Arrays.asList(whiteListStr.split(",", 
-1));
-                log.info("DingDingService init whiteList is :{}", whiteList);
-                if (whiteList.size() % 2 != 0) {
-                    log.error("DingDingService sendDingDing whiteList error , 
because whiteList size is not even");
-                    return;
-                }
-                //fill in map
-                for (int i = 0; i < whiteList.size(); i = i + 2) {
-                    whiteListMap.put(whiteList.get(i), whiteList.get(i + 1));
-                }
-            }
-        }, 0, 120, TimeUnit.SECONDS);
-    }
-
-    private String getAccessToken() {
-        String accessToken = (String) getDingDingAccessToken();
-        if (accessToken != null) {
-            return accessToken;
-        }
-        //TODO:token redis cache
-        GetAccessTokenRequest getAccessTokenRequest = new 
GetAccessTokenRequest();
-        getAccessTokenRequest.setAppKey(appKey);
-        getAccessTokenRequest.setAppSecret(appSecret);
-        try {
-            GetAccessTokenResponse accessTokenRes = 
dingOauthClient.getAccessToken(getAccessTokenRequest);
-            if (accessTokenRes.getBody() == null) {
-                return null;
-            }
-            accessToken = accessTokenRes.getBody().getAccessToken();
-            log.info("accessToken:{}", accessToken);
-            if (accessToken != null) {
-                setDingDingAccessToken(accessToken);
-            }
-            return accessToken;
-        } catch (Exception e) {
-            log.error("DingDingService getAccessToken err:{}", e);
-            return null;
-        }
-    }
-
-    private void registerDingDingCallBack() {
-        String token = getAccessToken();
-        if (token == null) {
-            log.error("DingDingService registerDingDingCallBack token is 
null");
-            return;
-        }
-        com.aliyun.dingtalkcard_1_0.models.RegisterCallbackHeaders 
registerCallbackHeaders =
-                new 
com.aliyun.dingtalkcard_1_0.models.RegisterCallbackHeaders();
-        registerCallbackHeaders.setXAcsDingtalkAccessToken(token);
-
-        com.aliyun.dingtalkcard_1_0.models.RegisterCallbackRequest 
registerCallbackRequest =
-                new 
com.aliyun.dingtalkcard_1_0.models.RegisterCallbackRequest()
-                        .setCallbackRouteKey("hera-route-key")
-                        .setCallbackUrl(callbackUrl);
-        try {
-            RegisterCallbackResponse registerDingDingCallbackResponse = 
dingCardClient.
-                    registerCallbackWithOptions(registerCallbackRequest, 
registerCallbackHeaders, new RuntimeOptions());
-            log.info("registerDingDingCallbackResponse:{}", 
registerDingDingCallbackResponse);
-        } catch (Exception e) {
-            log.error("DingDingService registerDingDingCallBack err:{}", e);
-        }
-    }
-
-    public void sendDingDing(String content, String[] unionIds, String 
cardBizId) {
-        log.info("sendDingDing param content: {}, unionIds: {}, cardBizId: 
{}", content, unionIds, cardBizId);
-        String token = getAccessToken();
-        if (token == null) {
-            log.error("DingDingService sendDingDing token is null");
-            return;
-        }
-        log.info("DingDingService sendDingDing token:{}", token);
-       /* List<Union> unions = new ArrayList<Union>();
-        Arrays.stream(unionIds).forEach(unionId-> {
-            Union union = new Union(unionId);
-            unions.add(union);
-        });*/
-        for (String uid : unionIds) {
-            if (whiteListMap.containsKey(uid)) {
-                uid = whiteListMap.get(uid);
-            }
-            SendRobotInteractiveCardHeaders sendRobotInteractiveCardHeaders = 
new SendRobotInteractiveCardHeaders();
-            sendRobotInteractiveCardHeaders.setXAcsDingtalkAccessToken(token);
-            
SendRobotInteractiveCardRequest.SendRobotInteractiveCardRequestSendOptions 
sendOptions =
-                    new 
SendRobotInteractiveCardRequest.SendRobotInteractiveCardRequestSendOptions();
-            SendRobotInteractiveCardRequest sendRobotInteractiveCardRequest = 
new SendRobotInteractiveCardRequest()
-                    .setCardTemplateId("StandardCard")
-                    .setSingleChatReceiver("{\""+ dingdingUserType +"\":\"" + 
uid + "\"}")
-                    .setCardBizId(cardBizId)
-                    .setRobotCode(robotCode)
-                    .setCardData(content)
-                    .setSendOptions(sendOptions)
-                    .setPullStrategy(false)
-                    .setCallbackUrl(callbackUrl);
-            try {
-                
dingClient.sendRobotInteractiveCardWithOptions(sendRobotInteractiveCardRequest,
-                        sendRobotInteractiveCardHeaders, new RuntimeOptions());
-            } catch (Exception e) {
-                log.error("DingDingService sendDingDing err:{}", e);
-            }
-        }
-    }
-
-    public void updateDingDingCard(String content, String cardBizId) {
-        String token = getAccessToken();
-        if (token == null) {
-            log.error("DingDingService updateDingDingCard token is null");
-            return;
-        }
-        log.info("DingDingService updateDingDingCard token:{}", token);
-
-        UpdateRobotInteractiveCardHeaders updateRobotInteractiveCardHeaders = 
new UpdateRobotInteractiveCardHeaders();
-        updateRobotInteractiveCardHeaders.setXAcsDingtalkAccessToken(token);
-        
UpdateRobotInteractiveCardRequest.UpdateRobotInteractiveCardRequestUpdateOptions
 updateOptions =
-                new 
UpdateRobotInteractiveCardRequest.UpdateRobotInteractiveCardRequestUpdateOptions()
-                        .setUpdateCardDataByKey(false)
-                        .setUpdatePrivateDataByKey(false);
-        UpdateRobotInteractiveCardRequest updateRobotInteractiveCardRequest = 
new UpdateRobotInteractiveCardRequest()
-                .setCardBizId(cardBizId)
-                .setCardData(content)
-                
//.setUserIdPrivateDataMap("{\"userId0001\":{\"xxxx\":\"xxxx\"}}")
-                // 
.setUnionIdPrivateDataMap("{\"unionId0001\":{\"xxxx\":\"xxxx\"}}")
-                .setUpdateOptions(updateOptions);
-        try {
-            
dingClient.updateRobotInteractiveCardWithOptions(updateRobotInteractiveCardRequest,
-                    updateRobotInteractiveCardHeaders, new RuntimeOptions());
-        } catch (TeaException err) {
-            if (!com.aliyun.teautil.Common.empty(err.code) && 
!com.aliyun.teautil.Common.empty(err.message)) {
-                log.error("DingDingService updateDingDingCard 
TeaException:{}", err);
-            }
-
-        } catch (Exception _err) {
-            TeaException err = new TeaException(_err.getMessage(), _err);
-            if (!com.aliyun.teautil.Common.empty(err.code) && 
!com.aliyun.teautil.Common.empty(err.message)) {
-                log.error("DingDingService updateDingDingCard err:{}", err);
-            }
-        }
-
-    }
-
-    public String getNameByUserId(String userId) {
-        return "unKnown";
-        /*String token = getAccessToken();
-        if (token == null) {
-            log.error("DingDingService getNameByUserId token is null");
-            return null;
-        }
-        try {
-            DingTalkClient client = new 
DefaultDingTalkClient(DINGDING_USER_INFO_URL);
-            OapiV2UserGetRequest req = new OapiV2UserGetRequest();
-            req.setUserid(userId);
-            req.setLanguage("zh_CN");
-            OapiV2UserGetResponse rsp = client.execute(req, token);
-            System.out.println(rsp.getBody());
-            return rsp.getResult().getName();
-        } catch (ApiException e) {
-            log.error("DingDingService getNameByUserId err:{}", e);
-            return null;
-        }*/
-    }
+public interface DingDingService {
+    
+    void init() throws Exception;
+    
+    void sendDingDing(String content, String[] unionIds, String cardBizId);
+    
+    void updateDingDingCard(String content, String cardBizId);
+    
+    String getNameByUserId(String userId);
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/FeishuService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/FeishuService.java
index 6aff1538..9886e7d4 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/FeishuService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/FeishuService.java
@@ -13,75 +13,14 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service;
-
-import com.alibaba.nacos.api.config.annotation.NacosValue;
-import com.google.gson.Gson;
-import com.xiaomi.youpin.feishu.FeiShu;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.PostConstruct;
-
-@Service
-@Slf4j
-public class FeishuService {
-
-    private FeiShu feiShu;
-
-    private final Gson gson = new Gson();
 
-    @NacosValue(value = "${feishu.appid}", autoRefreshed = true)
-    private String appId;
-
-    @NacosValue(value = "${feishu.appSecret}", autoRefreshed = true)
-    private String appSecret;
-
-    @PostConstruct
-    private void init() {
-        feiShu = new FeiShu(appId, appSecret);
-    }
-
-    public void sendFeishu(String content, String[] receivers, String[] 
feishuGroups) {
-        sendFeishu(content, receivers, feishuGroups, false);
-    }
-
-    public void sendFeishu(String content, String[] receivers, String[] 
feishuGroups, boolean sendCard) {
-        if (StringUtils.isEmpty(content)) {
-            return;
-        }
-        log.info("sendFeishu content:{},receivers:{}",content, receivers);
-        try {
-            if (receivers != null) {
-                for (String receiver : receivers) {
-//                    if (receiver.contains("@xiaomi.com") == false) {
-//                        receiver = receiver + "@xiaomi.com";
-//                    }
-                    if (sendCard) {
-                        feiShu.sendCardByEmail(receiver, content);
-                    } else {
-                        feiShu.sendMsgByEmail(receiver, content);
-                    }
-                }
-            }
-            if (feishuGroups != null) {
-                //content += feishuGroupsAtTags(receivers);
-                for (String feishuGroup : feishuGroups) {
-                    if (sendCard) {
-                        feiShu.sendCardByChatId(feishuGroup, content);
-                    } else {
-                        feiShu.sendMsgByChatId(feishuGroup, content);
-                    }
-                }
-            }
-
-        } catch (Exception e) {
-            log.error(e.toString());
-        }
-    }
+package com.xiaomi.youpin.prometheus.agent.service;
 
-    public String getUserIdByEmail(String email) {
-        return feiShu.getUserIdByEmail(email);
-    }
+public interface FeishuService {
+    
+    void sendFeishu(String content, String[] receivers, String[] feishuGroups);
+    
+    void sendFeishu(String content, String[] receivers, String[] feishuGroups, 
boolean sendCard);
+    
+    String getUserIdByEmail(String email);
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/InitService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/InitService.java
index 63bc45aa..8164770d 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/InitService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/InitService.java
@@ -13,50 +13,11 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service;
-
-import lombok.extern.slf4j.Slf4j;
-import org.apache.dubbo.common.utils.NetUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
-import com.xiaomi.data.push.nacos.NacosNaming;
-
-import javax.annotation.PostConstruct;
-
-@Service
-@Slf4j
-public class InitService {
-
 
-    @Autowired
-    private NacosNaming nacosNaming;
-
-    @Value("${server.port}")
-    private String httpPort;
-
-    @Value("${dubbo.group}")
-    private String group;
-
-    @Value("${app.name}")
-    private String appName;
-
-    @PostConstruct
-    public void init() {
-        String host = System.getenv("host.ip") == null ? 
NetUtils.getLocalHost() : System.getenv("host.ip");
-        final String port = httpPort;
-        try {
-            nacosNaming.registerInstance(appName, host, Integer.valueOf(port), 
group);
+package com.xiaomi.youpin.prometheus.agent.service;
 
-            Runtime.getRuntime().addShutdownHook(new Thread(()->{
-                try {
-                    nacosNaming.deregisterInstance(appName, host, 
Integer.valueOf(port), group);
-                } catch (Exception e) {
-                    log.error("nacos init service : ",e);
-                }
-            }));
-        } catch (Exception e) {
-            log.error("nacos init service : ",e);
-        }
-    }
+public interface InitService {
+    
+    
+    void init();
 }
\ No newline at end of file
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/MioneMachineService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/MioneMachineService.java
index b7b559ff..d4ca493e 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/MioneMachineService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/MioneMachineService.java
@@ -23,54 +23,9 @@ import org.springframework.stereotype.Service;
 
 import java.util.List;
 
-@Slf4j
-@Service
-public class MioneMachineService {
 
-    @Autowired
-    private MioneMachineServiceExtension mioneMachineServiceExtension;
+public interface MioneMachineService {
 
-//    @NacosValue(value = "${mione.machine.port}", autoRefreshed = true)
-//    private String machinePort;
-//
-//    @NacosValue(value = "${mione.container.port}", autoRefreshed = true)
-//    private String containerPort;
 
-    /*@Reference(interfaceClass = QuotaService.class, group = 
"${ref.quota.service.group}", check = false)
-    private QuotaService quotaService;
-
-    @Reference(interfaceClass = ResourceService.class, group = 
"${ref.quota.service.group}", check = false)
-    private ResourceService resourceService;*/
-
-    public List<Ips> queryMachineList(String type) {
-       /* List<String> result = new ArrayList<>();
-        List<String> ips = new ArrayList<>();
-        try {
-            Result<List<ResourceBo>> resourceResult = resourceService.list();
-            List<ResourceBo> data = resourceResult.getData();
-            data.forEach((resource) -> {
-                if (resource.getLables() != null && 
Objects.equals(resource.getLables().get("type"), "docker")) {
-                    ips.add(resource.getIp());
-                }
-            });
-            if (ips.size() > 0) {
-                for (String ip : ips) {
-                    if ("1".equals(type)) {
-                        result.add(ip + ":" + machinePort);
-                    } else {
-                        result.add(ip + ":" + containerPort);
-                    }
-                }
-            }
-        } catch (Exception e) {
-            log.error("quotaService.resourceService接口失败:", e);
-        }
-        List<Ips> defaultResult = new ArrayList<>();
-        Ips ips2 = new Ips();
-        ips2.setTargets(result);
-        defaultResult.add(ips2);
-        return defaultResult;
-*/
-        return mioneMachineServiceExtension.queryMachineList(type);
-    }
+     List<Ips> queryMachineList(String type) ;
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusIpService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusIpService.java
index b70fe2e7..385b0bb7 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusIpService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusIpService.java
@@ -13,78 +13,25 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package com.xiaomi.youpin.prometheus.agent.service;
 
-import com.alibaba.nacos.api.config.annotation.NacosValue;
-import com.google.gson.Gson;
-import com.xiaomi.data.push.client.HttpClientV2;
 import com.xiaomi.youpin.prometheus.agent.domain.Ips;
-import 
com.xiaomi.youpin.prometheus.agent.service.api.PrometheusIpServiceExtension;
-import com.xiaomi.youpin.prometheus.agent.service.dto.heraApp.GetAllPodIpRes;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
-import java.util.*;
-
-@Slf4j
-@Service
-public class PrometheusIpService {
-
-    @Autowired
-    private PrometheusIpServiceExtension prometheusIpServiceExtension;
-
-    @NacosValue(value = "${hera.app.addr}", autoRefreshed = true)
-    private String heraAppAddr;
-
-    @NacosValue(value = "${golang.runtime.default.port}", autoRefreshed = true)
-    private String goRuntimePort;
-
-    private static final Gson gson = new Gson();
-
-    public List<Ips> getByType(String type) {
-        return prometheusIpServiceExtension.getByType(type);
-    }
-
-    public Set<String> getIpsByAppName(String name) {
-        return prometheusIpServiceExtension.getIpsByAppName(name);
-    }
-
-    public Set<String> getEtcdHosts() {
-        return prometheusIpServiceExtension.getEtcdHosts();
-    }
-
-
-    public List<Ips> getK8sNodeIp(String type) {
-        return prometheusIpServiceExtension.getK8sNodeIp(type);
-    }
-
-    public List<Ips> getHeraAppPodIp() {
-        log.info("getHeraAppPodIp begin heraAppAddr:{},goRuntimePort: {}", 
heraAppAddr, goRuntimePort);
-        List<Ips> res = new ArrayList<>();
-        String url = heraAppAddr + "/hera/app/env/non/probe/ips";
-        log.info("getHeraAppPodIp url:{}", url);
-        Map<String, String> headers = new HashMap(1);
-        headers.put("Content-Type", "application/json; charset=utf-8");
-        try {
-            String heraAppRes = HttpClientV2.get(url, headers, 10000);
-            GetAllPodIpRes getAllPodIpRes = gson.fromJson(heraAppRes, 
GetAllPodIpRes.class);
-            log.info("getHeraAppPodIp heraAppRes : {} ", heraAppRes);
-            if (getAllPodIpRes == null || getAllPodIpRes.getCode() != 0) {
-                return res;
-            }
-            Ips ips = new Ips();
-            List<String> ipStr = new ArrayList<>();
-            getAllPodIpRes.getData().forEach(it -> {
-                ipStr.add(it + ":" + goRuntimePort);
-            });
-            ips.setTargets(ipStr);
-            res.add(ips);
-            return res;
-        } catch (Exception e) {
-            log.error("getHeraAppPodIp error:{}", e);
-            return res;
-        }
-    }
 
+import java.util.List;
+import java.util.Set;
+
+public interface PrometheusIpService {
+    
+    
+    List<Ips> getByType(String type);
+    
+    Set<String> getIpsByAppName(String name);
+    
+    Set<String> getEtcdHosts();
+    
+    List<Ips> getK8sNodeIp(String type);
+    
+    List<Ips> getHeraAppPodIp();
+    
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusVmService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusVmService.java
index 20638fcf..8beb0704 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusVmService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusVmService.java
@@ -13,84 +13,20 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package com.xiaomi.youpin.prometheus.agent.service;
 
-import com.alibaba.nacos.api.config.annotation.NacosValue;
 import com.xiaomi.youpin.prometheus.agent.domain.Ips;
-import io.fabric8.kubernetes.api.model.PodList;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
-import io.fabric8.kubernetes.client.KubernetesClient;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 /**
  * @author zhangxiaowei6
  * @Date 2024/2/23 16:31
  */
-@Slf4j
-@Service
-public class PrometheusVmService {
-
-    @NacosValue(value = "${vm.agent.port}", autoRefreshed = true)
-    private String vmAgentPort;
-
-    @NacosValue(value = "${vm.Alert.Port}", autoRefreshed = true)
-    private String vmAlertPort;
-
-    @NacosValue(value = "${vm.Insert.Port}", autoRefreshed = true)
-    private String vmInsertPort;
-
-    @NacosValue(value = "${vm.Select.Port}", autoRefreshed = true)
-    private String vmSelectPort;
-
-    @NacosValue(value = "${vm.Storage.Port}", autoRefreshed = true)
-    private String vmStoragePort;
-
-    public List<Ips> getVMClusterIp(String name) {
-        String port = "";
-        switch (name) {
-            case "ozhera-vmagent":
-                port = vmAgentPort;
-                break;
-            case "ozhera-vmalert":
-                port = vmAlertPort;
-                break;
-            case "ozhera-vminsert":
-                port = vmInsertPort;
-                break;
-            case "ozhera-vmselect":
-                port = vmSelectPort;
-                break;
-            case "ozhera-vmstorage":
-                port = vmStoragePort;
-                break;
-            default:
-                log.error("getClusterIp invalid name:{}", name);
-                return null;
-        }
-        // fetch vm cluster ip list
-        Set<String> podNameSet = new HashSet<>();
-        try (KubernetesClient client = new DefaultKubernetesClient()) {
-            String labelName = "app";
 
-            // get Pod name
-            PodList podList = client.pods().withLabel(labelName, name).list();
-            String finalPort = port;
-            podList.getItems().forEach(pod -> 
podNameSet.add(pod.getStatus().getPodIP() + ":" + finalPort));
-            List<String> result = new ArrayList<>(podNameSet);
-            List<Ips> defaultResult = new ArrayList<>();
-            Ips ips = new Ips();
-            ips.setTargets(result);
-            defaultResult.add(ips);
-            return defaultResult;
-        } catch (Exception e) {
-            log.error("PrometheusVMClient getVMAgentPodName error: {}", e);
-            return null;
-        }
-    }
+public interface PrometheusVmService {
+    
+    
+    List<Ips> getVMClusterIp(String name);
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/MioneMachineServiceExtension.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/MioneMachineServiceExtension.java
index d87919e7..c20e938a 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/MioneMachineServiceExtension.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/MioneMachineServiceExtension.java
@@ -13,6 +13,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package com.xiaomi.youpin.prometheus.agent.service.api;
 
 import com.xiaomi.youpin.prometheus.agent.domain.Ips;
@@ -24,5 +25,6 @@ import java.util.List;
  */
 
 public interface MioneMachineServiceExtension {
+    
     List<Ips> queryMachineList(String type);
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/MioneMachineServiceImpl.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/impl/MioneMachineServiceExtensionImpl.java
similarity index 88%
copy from 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/MioneMachineServiceImpl.java
copy to 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/impl/MioneMachineServiceExtensionImpl.java
index 80cf4529..3b8527e7 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/MioneMachineServiceImpl.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/impl/MioneMachineServiceExtensionImpl.java
@@ -13,7 +13,7 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service.impl;
+package com.xiaomi.youpin.prometheus.agent.service.api.impl;
 
 import com.xiaomi.youpin.prometheus.agent.domain.Ips;
 import 
com.xiaomi.youpin.prometheus.agent.service.api.MioneMachineServiceExtension;
@@ -28,7 +28,7 @@ import java.util.List;
 @Slf4j
 @Service
 @ConditionalOnProperty(name = "service.selector.property", havingValue = 
"outer")
-public class MioneMachineServiceImpl implements MioneMachineServiceExtension {
+public class MioneMachineServiceExtensionImpl implements 
MioneMachineServiceExtension {
     @Override
     public List<Ips> queryMachineList(String type) {
         return null;
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusIpServiceImpl.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/impl/PrometheusIpServiceExtensionImpl.java
similarity index 80%
copy from 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusIpServiceImpl.java
copy to 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/impl/PrometheusIpServiceExtensionImpl.java
index 43a7e042..4c579250 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusIpServiceImpl.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/api/impl/PrometheusIpServiceExtensionImpl.java
@@ -13,7 +13,8 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service.impl;
+
+package com.xiaomi.youpin.prometheus.agent.service.api.impl;
 
 import com.alibaba.nacos.api.config.annotation.NacosValue;
 import com.alibaba.nacos.api.exception.NacosException;
@@ -37,67 +38,83 @@ import 
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.stream.Collectors;
+
 @Slf4j
 @Service
 @ConditionalOnProperty(name = "service.selector.property", havingValue = 
"outer")
-public class PrometheusIpServiceImpl  implements PrometheusIpServiceExtension {
+public class PrometheusIpServiceExtensionImpl implements 
PrometheusIpServiceExtension {
+    
     @Autowired
     private NacosNaming nacosNaming;
-
+    
     private static ConcurrentHashMap<String, Set<String>> appIpsCache = new 
ConcurrentHashMap<>();
-
+    
     public static final int PAGINATION_SIZE = 200;
-
+    
     public static final String PROMETHEUS_PORT = "prometheus_port";
-
+    
     public static final String JAVAAGENT_PROMETHEUS_PORT = 
"javaagent_prometheus_port";
-
+    
     public static final String JAEGERQUERY_PROMETHEUS_PORT = 
"jaegerQuery_port";
-
+    
     public static final String MONESTARTER_PROMETHEUS_PORT = 
"monestarter_prometheus_port";
-
+    
     public static final String APPLICATION = "application";
-
-    public static final String[] TESLA_FLAG = new String[]{""};
-
+    
+    public static final String[] TESLA_FLAG = new String[] {""};
+    
     public static final String ST_K8S_NODE = "http://localhost";;
-
+    
     public static final String ONLINE_K8S_NODE = "http://localhost";;
-
+    
     public static final String CUSTOM_JOB_PREFIX = "prometheus_custom_server_";
-
+    
     public static final String CUSTOM_JOB_PORT_KEY = "ozhera_prometheus_port";
-
+    
     private final Gson gson = new Gson();
-
+    
     private List<Ips> starterIpsList = new ArrayList<>();
+    
     private List<Ips> javaagentIpsList = new ArrayList<>();
+    
     private List<Ips> jaegerqueryIpsList = new ArrayList<>();
+    
     private List<Ips> monequeryIpsList = new ArrayList<>();
-
+    
     @Value("${server.type}")
     private String serverType;
-
+    
     @NacosValue(value = "${mione.k8s.node.port}", autoRefreshed = true)
     private String machinePort;
-
+    
     @NacosValue(value = "${mione.k8s.container.port}", autoRefreshed = true)
     private String containerPort;
-
+    
     @NacosValue(value = "${jaeger_query_token}")
     private String jaegerQueryToken;
-
+    
     private ReentrantLock lock = new ReentrantLock();
-
+    
     @PostConstruct
     public void init() {
         new ScheduledThreadPoolExecutor(1).scheduleWithFixedDelay(() -> {
@@ -128,7 +145,7 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
                         List<Instance> instances = null;
                         try {
                             instances = nacosNaming.getAllInstances(it);
-//                            log.info("service:{} num:{}", it, 
instances.size());
+                            //                            log.info("service:{} 
num:{}", it, instances.size());
                         } catch (NacosException e) {
                             log.error("Nacos.getAllInstance error,", e);
                         }
@@ -140,31 +157,40 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
                                 cache.putIfAbsent(it, tmpIps);
                             }
                         });
-                        List<String> starterAddrs = 
instances.stream().filter(it1 -> it1.getMetadata() != null && 
StringUtils.startsWith(it,CUSTOM_JOB_PREFIX)).map(it2 -> {
-                            String ip = it2.getIp();
-                            String port = 
it2.getMetadata().get(CUSTOM_JOB_PORT_KEY);
-                            return ip + ":" + port;
-                        }).collect(Collectors.toList());
-
-                        List<String> javaagentAddrs = 
instances.stream().filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(it1.getMetadata().get(JAVAAGENT_PROMETHEUS_PORT))).map(it2
 -> {
-                            String ip = it2.getIp();
-                            String port = 
it2.getMetadata().get(JAVAAGENT_PROMETHEUS_PORT);
-                            return ip + ":" + port;
-                        }).collect(Collectors.toList());
-
-                        List<String> jaegerquery = 
instances.stream().filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(it1.getMetadata().get(JAEGERQUERY_PROMETHEUS_PORT))).map(it2
 -> {
-                            String ip = it2.getIp();
-                            String port = 
it2.getMetadata().get(JAEGERQUERY_PROMETHEUS_PORT);
-                            return ip + ":" + port;
-                        }).collect(Collectors.toList());
-
-                        List<String> moneStarterAddrs = 
instances.stream().filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(it1.getMetadata().get(MONESTARTER_PROMETHEUS_PORT))).map(it2
 -> {
-                            String ip = it2.getIp();
-                            String port = 
it2.getMetadata().get(MONESTARTER_PROMETHEUS_PORT);
-                            return ip + ":" + port;
-                        }).collect(Collectors.toList());
-
-                        instances.stream().filter(it3 -> it3.getMetadata() != 
null && StringUtils.isNotEmpty(it3.getMetadata().get(APPLICATION))).forEach(it4 
-> {
+                        List<String> starterAddrs = instances.stream()
+                                .filter(it1 -> it1.getMetadata() != null && 
StringUtils.startsWith(it,
+                                        CUSTOM_JOB_PREFIX)).map(it2 -> {
+                                    String ip = it2.getIp();
+                                    String port = 
it2.getMetadata().get(CUSTOM_JOB_PORT_KEY);
+                                    return ip + ":" + port;
+                                }).collect(Collectors.toList());
+                        
+                        List<String> javaagentAddrs = instances.stream()
+                                .filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(
+                                        
it1.getMetadata().get(JAVAAGENT_PROMETHEUS_PORT))).map(it2 -> {
+                                    String ip = it2.getIp();
+                                    String port = 
it2.getMetadata().get(JAVAAGENT_PROMETHEUS_PORT);
+                                    return ip + ":" + port;
+                                }).collect(Collectors.toList());
+                        
+                        List<String> jaegerquery = instances.stream()
+                                .filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(
+                                        
it1.getMetadata().get(JAEGERQUERY_PROMETHEUS_PORT))).map(it2 -> {
+                                    String ip = it2.getIp();
+                                    String port = 
it2.getMetadata().get(JAEGERQUERY_PROMETHEUS_PORT);
+                                    return ip + ":" + port;
+                                }).collect(Collectors.toList());
+                        
+                        List<String> moneStarterAddrs = instances.stream()
+                                .filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(
+                                        
it1.getMetadata().get(MONESTARTER_PROMETHEUS_PORT))).map(it2 -> {
+                                    String ip = it2.getIp();
+                                    String port = 
it2.getMetadata().get(MONESTARTER_PROMETHEUS_PORT);
+                                    return ip + ":" + port;
+                                }).collect(Collectors.toList());
+                        
+                        instances.stream().filter(it3 -> it3.getMetadata() != 
null && StringUtils.isNotEmpty(
+                                
it3.getMetadata().get(APPLICATION))).forEach(it4 -> {
                             String appName = 
it4.getMetadata().get(APPLICATION);
                             Set<String> tmpIps = cache.getOrDefault(appName, 
new HashSet<>());
                             if (appName.equals("tesla-gateway")) {
@@ -174,26 +200,26 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
                             }
                             cache.putIfAbsent(appName, tmpIps);
                         });
-
+                        
                         starterAddresssSet.addAll(starterAddrs);
                         javaagentAddresssSet.addAll(javaagentAddrs);
                         jaegerqueryAddresssSet.addAll(jaegerquery);
                         monestarterPrometheusPortSet.addAll(moneStarterAddrs);
                     });
                 }
-
+                
                 appIpsCache = cache;
-
+                
                 starterIps.setTargets(new ArrayList<>(starterAddresssSet));
                 javaagentIps.setTargets(new ArrayList<>(javaagentAddresssSet));
                 jaegerqueryIps.setTargets(new 
ArrayList<>(jaegerqueryAddresssSet));
                 moneStarterIps.setTargets(new 
ArrayList<>(monestarterPrometheusPortSet));
-
+                
                 starterIpsListTmp.add(starterIps);
                 javaagentIpsListTmp.add(javaagentIps);
                 jaegerqueryIpsListTmp.add(jaegerqueryIps);
                 monestarterIpsListTmp.add(moneStarterIps);
-
+                
                 starterIpsList = starterIpsListTmp;
                 javaagentIpsList = javaagentIpsListTmp;
                 jaegerqueryIpsList = jaegerqueryIpsListTmp;
@@ -204,11 +230,11 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
             }
         }, 0, 15, TimeUnit.SECONDS);
     }
-
+    
     private Set<String> getAllServiceNames() {
-
+        
         final Set<String> serviceNames = new LinkedHashSet<>();
-
+        
         int pageIndex = 1;
         ListView<String> listView = nacosNaming.getServicesOfServer(pageIndex, 
PAGINATION_SIZE);
         // First page data
@@ -229,10 +255,10 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
             listView = nacosNaming.getServicesOfServer(++pageIndex, 
PAGINATION_SIZE);
             serviceNames.addAll(listView.getData());
         }
-
+        
         return serviceNames;
     }
-
+    
     @Override
     public List<Ips> getByType(String type) {
         if (StringUtils.isEmpty(type)) {
@@ -261,25 +287,25 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
             return defaultResult;
         }
     }
-
+    
     @Override
     public Set<String> getIpsByAppName(String name) {
         return appIpsCache.getOrDefault(name, new HashSet<>());
     }
-
+    
     private String[] getEtcd() {
         return null;
     }
-
+    
     @Override
     public Set<String> getEtcdHosts() {
         return null;
     }
-
-
+    
+    
     @Override
     public List<Ips> getK8sNodeIp(String type) {
-
+        
         List<String> res = new ArrayList<>();
        /* V1NodeList nodes;
         try {
@@ -313,9 +339,9 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
                 }
             }
         } catch (Exception e) {
-          log.error("getK8sNodeIp error:{}",e.getMessage());
+            log.error("getK8sNodeIp error:{}", e.getMessage());
         }
-        log.info("getK8sNodeIp k8s node count:{}",res.size());
+        log.info("getK8sNodeIp k8s node count:{}", res.size());
         List<String> result = new ArrayList<>();
         String port = "";
         if (type.equals("node")) {
@@ -326,18 +352,17 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
             return null;
         }
         String finalPort = port;
-        res.forEach(
-                item -> {
-                    result.add(item + ":" + finalPort);
-                });
+        res.forEach(item -> {
+            result.add(item + ":" + finalPort);
+        });
         List<Ips> defaultResult = new ArrayList<>();
         Ips ips2 = new Ips();
         ips2.setTargets(result);
         defaultResult.add(ips2);
         return defaultResult;
     }
-
-
+    
+    
     private String innerRequest(String data, String url, String apiKey, String 
method) {
         try {
             URL requestUrl = new URL(url);
@@ -389,5 +414,5 @@ public class PrometheusIpServiceImpl  implements 
PrometheusIpServiceExtension {
             lock.unlock();
         }
     }*/
-
+    
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/DingDingService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/DingDingServiceImpl.java
similarity index 85%
copy from 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/DingDingService.java
copy to 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/DingDingServiceImpl.java
index 99ce2842..0eba8636 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/DingDingService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/DingDingServiceImpl.java
@@ -13,7 +13,8 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service;
+
+package com.xiaomi.youpin.prometheus.agent.service.impl;
 
 import com.alibaba.nacos.api.config.annotation.NacosValue;
 import com.aliyun.dingtalkcard_1_0.models.RegisterCallbackResponse;
@@ -28,6 +29,7 @@ import com.aliyun.tea.TeaException;
 import com.aliyun.teaopenapi.models.Config;
 import com.aliyun.teautil.models.RuntimeOptions;
 import com.google.common.cache.Cache;
+import com.xiaomi.youpin.prometheus.agent.service.DingDingService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -35,7 +37,10 @@ import 
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
-import java.util.*;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 
@@ -46,52 +51,55 @@ import java.util.concurrent.TimeUnit;
 @Service
 @Slf4j
 @ConditionalOnProperty(name = "service.selector.property", havingValue = 
"outer")
-public class DingDingService {
+public class DingDingServiceImpl implements DingDingService {
+    
     private Client dingClient;
+    
     private Config dingConfig;
-
+    
     @Autowired
     private Cache<String, Object> cache;
-
+    
     private com.aliyun.dingtalkoauth2_1_0.Client dingOauthClient;
-
+    
     private com.aliyun.dingtalkcard_1_0.Client dingCardClient;
-
+    
     @NacosValue(value = "${dingding.appKey}", autoRefreshed = true)
     private String appKey;
-
+    
     @NacosValue(value = "${dingding.appSecret}", autoRefreshed = true)
     private String appSecret;
-
+    
     @NacosValue(value = "${dingding.robotCode}", autoRefreshed = true)
     private String robotCode;
-
+    
     @NacosValue(value = "${dingding.callbackUrl}", autoRefreshed = true)
     private String callbackUrl;
-
+    
     @NacosValue(value = "${hera.alert.whiteList}", autoRefreshed = true)
     private String whiteListStr;
-
+    
     @NacosValue(value = "${dingding.user.type}", autoRefreshed = true)
     private String dingdingUserType;
-
+    
     private final String ACCESS_TOKEN = "dingding_access_token";
-
+    
     private final String DINGDING_USER_INFO_URL = 
"https://oapi.dingtalk.com/topapi/v2/user/get";;
-
+    
     private final Map<String, String> whiteListMap = new HashMap<>();
-
+    
     private Object getDingDingAccessToken() {
-
+        
         // Get data from the cache
         return cache.getIfPresent(ACCESS_TOKEN);
     }
-
+    
     private void setDingDingAccessToken(String accessToken) {
         // Get data from the cache
         cache.put(ACCESS_TOKEN, accessToken);
     }
-
+    
+    @Override
     @PostConstruct
     public void init() throws Exception {
         dingConfig = new Config();
@@ -103,13 +111,13 @@ public class DingDingService {
         //registerDingDingCallBack();
         //user type judge
         if (!dingdingUserType.equals("userId") && 
!dingdingUserType.equals("unionId")) {
-            log.error("DingDingService.userType not valid, userType: 
{}",dingdingUserType);
+            log.error("DingDingService.userType not valid, userType: {}", 
dingdingUserType);
             //set default value
             dingdingUserType = "userId";
         }
         periodicRefreshWhiteList();
     }
-
+    
     //2m auto refresh white list
     private void periodicRefreshWhiteList() {
         new ScheduledThreadPoolExecutor(1).scheduleWithFixedDelay(() -> {
@@ -128,7 +136,7 @@ public class DingDingService {
             }
         }, 0, 120, TimeUnit.SECONDS);
     }
-
+    
     private String getAccessToken() {
         String accessToken = (String) getDingDingAccessToken();
         if (accessToken != null) {
@@ -154,30 +162,27 @@ public class DingDingService {
             return null;
         }
     }
-
+    
     private void registerDingDingCallBack() {
         String token = getAccessToken();
         if (token == null) {
             log.error("DingDingService registerDingDingCallBack token is 
null");
             return;
         }
-        com.aliyun.dingtalkcard_1_0.models.RegisterCallbackHeaders 
registerCallbackHeaders =
-                new 
com.aliyun.dingtalkcard_1_0.models.RegisterCallbackHeaders();
+        com.aliyun.dingtalkcard_1_0.models.RegisterCallbackHeaders 
registerCallbackHeaders = new 
com.aliyun.dingtalkcard_1_0.models.RegisterCallbackHeaders();
         registerCallbackHeaders.setXAcsDingtalkAccessToken(token);
-
-        com.aliyun.dingtalkcard_1_0.models.RegisterCallbackRequest 
registerCallbackRequest =
-                new 
com.aliyun.dingtalkcard_1_0.models.RegisterCallbackRequest()
-                        .setCallbackRouteKey("hera-route-key")
-                        .setCallbackUrl(callbackUrl);
+        
+        com.aliyun.dingtalkcard_1_0.models.RegisterCallbackRequest 
registerCallbackRequest = new 
com.aliyun.dingtalkcard_1_0.models.RegisterCallbackRequest().setCallbackRouteKey(
+                "hera-route-key").setCallbackUrl(callbackUrl);
         try {
-            RegisterCallbackResponse registerDingDingCallbackResponse = 
dingCardClient.
-                    registerCallbackWithOptions(registerCallbackRequest, 
registerCallbackHeaders, new RuntimeOptions());
+            RegisterCallbackResponse registerDingDingCallbackResponse = 
dingCardClient.registerCallbackWithOptions(
+                    registerCallbackRequest, registerCallbackHeaders, new 
RuntimeOptions());
             log.info("registerDingDingCallbackResponse:{}", 
registerDingDingCallbackResponse);
         } catch (Exception e) {
             log.error("DingDingService registerDingDingCallBack err:{}", e);
         }
     }
-
+    @Override
     public void sendDingDing(String content, String[] unionIds, String 
cardBizId) {
         log.info("sendDingDing param content: {}, unionIds: {}, cardBizId: 
{}", content, unionIds, cardBizId);
         String token = getAccessToken();
@@ -197,17 +202,11 @@ public class DingDingService {
             }
             SendRobotInteractiveCardHeaders sendRobotInteractiveCardHeaders = 
new SendRobotInteractiveCardHeaders();
             sendRobotInteractiveCardHeaders.setXAcsDingtalkAccessToken(token);
-            
SendRobotInteractiveCardRequest.SendRobotInteractiveCardRequestSendOptions 
sendOptions =
-                    new 
SendRobotInteractiveCardRequest.SendRobotInteractiveCardRequestSendOptions();
-            SendRobotInteractiveCardRequest sendRobotInteractiveCardRequest = 
new SendRobotInteractiveCardRequest()
-                    .setCardTemplateId("StandardCard")
-                    .setSingleChatReceiver("{\""+ dingdingUserType +"\":\"" + 
uid + "\"}")
-                    .setCardBizId(cardBizId)
-                    .setRobotCode(robotCode)
-                    .setCardData(content)
-                    .setSendOptions(sendOptions)
-                    .setPullStrategy(false)
-                    .setCallbackUrl(callbackUrl);
+            
SendRobotInteractiveCardRequest.SendRobotInteractiveCardRequestSendOptions 
sendOptions = new 
SendRobotInteractiveCardRequest.SendRobotInteractiveCardRequestSendOptions();
+            SendRobotInteractiveCardRequest sendRobotInteractiveCardRequest = 
new SendRobotInteractiveCardRequest().setCardTemplateId(
+                            "StandardCard").setSingleChatReceiver("{\"" + 
dingdingUserType + "\":\"" + uid + "\"}")
+                    
.setCardBizId(cardBizId).setRobotCode(robotCode).setCardData(content).setSendOptions(sendOptions)
+                    .setPullStrategy(false).setCallbackUrl(callbackUrl);
             try {
                 
dingClient.sendRobotInteractiveCardWithOptions(sendRobotInteractiveCardRequest,
                         sendRobotInteractiveCardHeaders, new RuntimeOptions());
@@ -216,7 +215,7 @@ public class DingDingService {
             }
         }
     }
-
+    @Override
     public void updateDingDingCard(String content, String cardBizId) {
         String token = getAccessToken();
         if (token == null) {
@@ -224,16 +223,13 @@ public class DingDingService {
             return;
         }
         log.info("DingDingService updateDingDingCard token:{}", token);
-
+        
         UpdateRobotInteractiveCardHeaders updateRobotInteractiveCardHeaders = 
new UpdateRobotInteractiveCardHeaders();
         updateRobotInteractiveCardHeaders.setXAcsDingtalkAccessToken(token);
-        
UpdateRobotInteractiveCardRequest.UpdateRobotInteractiveCardRequestUpdateOptions
 updateOptions =
-                new 
UpdateRobotInteractiveCardRequest.UpdateRobotInteractiveCardRequestUpdateOptions()
-                        .setUpdateCardDataByKey(false)
-                        .setUpdatePrivateDataByKey(false);
-        UpdateRobotInteractiveCardRequest updateRobotInteractiveCardRequest = 
new UpdateRobotInteractiveCardRequest()
-                .setCardBizId(cardBizId)
-                .setCardData(content)
+        
UpdateRobotInteractiveCardRequest.UpdateRobotInteractiveCardRequestUpdateOptions
 updateOptions = new 
UpdateRobotInteractiveCardRequest.UpdateRobotInteractiveCardRequestUpdateOptions().setUpdateCardDataByKey(
+                false).setUpdatePrivateDataByKey(false);
+        UpdateRobotInteractiveCardRequest updateRobotInteractiveCardRequest = 
new UpdateRobotInteractiveCardRequest().setCardBizId(
+                        cardBizId).setCardData(content)
                 
//.setUserIdPrivateDataMap("{\"userId0001\":{\"xxxx\":\"xxxx\"}}")
                 // 
.setUnionIdPrivateDataMap("{\"unionId0001\":{\"xxxx\":\"xxxx\"}}")
                 .setUpdateOptions(updateOptions);
@@ -244,16 +240,16 @@ public class DingDingService {
             if (!com.aliyun.teautil.Common.empty(err.code) && 
!com.aliyun.teautil.Common.empty(err.message)) {
                 log.error("DingDingService updateDingDingCard 
TeaException:{}", err);
             }
-
+            
         } catch (Exception _err) {
             TeaException err = new TeaException(_err.getMessage(), _err);
             if (!com.aliyun.teautil.Common.empty(err.code) && 
!com.aliyun.teautil.Common.empty(err.message)) {
                 log.error("DingDingService updateDingDingCard err:{}", err);
             }
         }
-
+        
     }
-
+    @Override
     public String getNameByUserId(String userId) {
         return "unKnown";
         /*String token = getAccessToken();
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/FeishuService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/FeishuServiceImpl.java
similarity index 92%
copy from 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/FeishuService.java
copy to 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/FeishuServiceImpl.java
index 6aff1538..a99c0f33 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/FeishuService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/FeishuServiceImpl.java
@@ -13,11 +13,12 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service;
+package com.xiaomi.youpin.prometheus.agent.service.impl;
 
 import com.alibaba.nacos.api.config.annotation.NacosValue;
 import com.google.gson.Gson;
 import com.xiaomi.youpin.feishu.FeiShu;
+import com.xiaomi.youpin.prometheus.agent.service.FeishuService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Service;
@@ -26,7 +27,7 @@ import javax.annotation.PostConstruct;
 
 @Service
 @Slf4j
-public class FeishuService {
+public class FeishuServiceImpl implements FeishuService {
 
     private FeiShu feiShu;
 
@@ -43,10 +44,11 @@ public class FeishuService {
         feiShu = new FeiShu(appId, appSecret);
     }
 
+    @Override
     public void sendFeishu(String content, String[] receivers, String[] 
feishuGroups) {
         sendFeishu(content, receivers, feishuGroups, false);
     }
-
+    @Override
     public void sendFeishu(String content, String[] receivers, String[] 
feishuGroups, boolean sendCard) {
         if (StringUtils.isEmpty(content)) {
             return;
@@ -80,7 +82,7 @@ public class FeishuService {
             log.error(e.toString());
         }
     }
-
+    @Override
     public String getUserIdByEmail(String email) {
         return feiShu.getUserIdByEmail(email);
     }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/InitService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/InitServiceImpl.java
similarity index 80%
copy from 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/InitService.java
copy to 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/InitServiceImpl.java
index 63bc45aa..a7d50708 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/InitService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/InitServiceImpl.java
@@ -13,50 +13,53 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service;
 
+package com.xiaomi.youpin.prometheus.agent.service.impl;
+
+import com.xiaomi.data.push.nacos.NacosNaming;
+import com.xiaomi.youpin.prometheus.agent.service.InitService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.common.utils.NetUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
-import com.xiaomi.data.push.nacos.NacosNaming;
 
 import javax.annotation.PostConstruct;
 
 @Service
 @Slf4j
-public class InitService {
-
-
+public class InitServiceImpl implements InitService {
+    
+    
     @Autowired
     private NacosNaming nacosNaming;
-
+    
     @Value("${server.port}")
     private String httpPort;
-
+    
     @Value("${dubbo.group}")
     private String group;
-
+    
     @Value("${app.name}")
     private String appName;
-
+    
+    @Override
     @PostConstruct
     public void init() {
         String host = System.getenv("host.ip") == null ? 
NetUtils.getLocalHost() : System.getenv("host.ip");
         final String port = httpPort;
         try {
             nacosNaming.registerInstance(appName, host, Integer.valueOf(port), 
group);
-
-            Runtime.getRuntime().addShutdownHook(new Thread(()->{
+            
+            Runtime.getRuntime().addShutdownHook(new Thread(() -> {
                 try {
                     nacosNaming.deregisterInstance(appName, host, 
Integer.valueOf(port), group);
                 } catch (Exception e) {
-                    log.error("nacos init service : ",e);
+                    log.error("nacos init service : ", e);
                 }
             }));
         } catch (Exception e) {
-            log.error("nacos init service : ",e);
+            log.error("nacos init service : ", e);
         }
     }
 }
\ No newline at end of file
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/MioneMachineServiceImpl.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/MioneMachineServiceImpl.java
index 80cf4529..6ef1d68e 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/MioneMachineServiceImpl.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/MioneMachineServiceImpl.java
@@ -13,24 +13,27 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package com.xiaomi.youpin.prometheus.agent.service.impl;
 
 import com.xiaomi.youpin.prometheus.agent.domain.Ips;
+import com.xiaomi.youpin.prometheus.agent.service.MioneMachineService;
 import 
com.xiaomi.youpin.prometheus.agent.service.api.MioneMachineServiceExtension;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
-/**
- * @author zhangxiaowei6
- */
+
 @Slf4j
 @Service
-@ConditionalOnProperty(name = "service.selector.property", havingValue = 
"outer")
-public class MioneMachineServiceImpl implements MioneMachineServiceExtension {
-    @Override
+public class MioneMachineServiceImpl implements MioneMachineService {
+    
+    @Autowired
+    private MioneMachineServiceExtension mioneMachineServiceExtension;
+    
     public List<Ips> queryMachineList(String type) {
-        return null;
+        
+        return mioneMachineServiceExtension.queryMachineList(type);
     }
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusAlertImpl.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusAlertServiceImpl.java
similarity index 97%
rename from 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusAlertImpl.java
rename to 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusAlertServiceImpl.java
index 4a1e7c3b..5af37d32 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusAlertImpl.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusAlertServiceImpl.java
@@ -26,7 +26,7 @@ import org.apache.dubbo.config.annotation.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 
 @Service(timeout = 5000, group = "${dubbo.group}")
-public class PrometheusAlertImpl implements PrometheusAlertService {
+public class PrometheusAlertServiceImpl implements PrometheusAlertService {
     @Autowired
     RuleAlertService ruleAlertService;
 
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusIpServiceImpl.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusIpServiceImpl.java
index 43a7e042..2b981e74 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusIpServiceImpl.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusIpServiceImpl.java
@@ -13,381 +13,88 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+
 package com.xiaomi.youpin.prometheus.agent.service.impl;
 
 import com.alibaba.nacos.api.config.annotation.NacosValue;
-import com.alibaba.nacos.api.exception.NacosException;
-import com.alibaba.nacos.api.naming.pojo.Instance;
-import com.alibaba.nacos.api.naming.pojo.ListView;
-import com.google.common.base.Stopwatch;
 import com.google.gson.Gson;
-import com.xiaomi.data.push.nacos.NacosNaming;
+import com.xiaomi.data.push.client.HttpClientV2;
 import com.xiaomi.youpin.prometheus.agent.domain.Ips;
+import com.xiaomi.youpin.prometheus.agent.service.PrometheusIpService;
 import 
com.xiaomi.youpin.prometheus.agent.service.api.PrometheusIpServiceExtension;
-import io.fabric8.kubernetes.api.model.Node;
-import io.fabric8.kubernetes.api.model.NodeAddress;
-import io.fabric8.kubernetes.api.model.NodeList;
-import io.fabric8.kubernetes.client.DefaultKubernetesClient;
-import io.fabric8.kubernetes.client.KubernetesClient;
+import com.xiaomi.youpin.prometheus.agent.service.dto.heraApp.GetAllPodIpRes;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.stereotype.Service;
 
-import javax.annotation.PostConstruct;
-import java.io.*;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.locks.ReentrantLock;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
 @Slf4j
 @Service
-@ConditionalOnProperty(name = "service.selector.property", havingValue = 
"outer")
-public class PrometheusIpServiceImpl  implements PrometheusIpServiceExtension {
+public class PrometheusIpServiceImpl implements PrometheusIpService {
+    
     @Autowired
-    private NacosNaming nacosNaming;
-
-    private static ConcurrentHashMap<String, Set<String>> appIpsCache = new 
ConcurrentHashMap<>();
-
-    public static final int PAGINATION_SIZE = 200;
-
-    public static final String PROMETHEUS_PORT = "prometheus_port";
-
-    public static final String JAVAAGENT_PROMETHEUS_PORT = 
"javaagent_prometheus_port";
-
-    public static final String JAEGERQUERY_PROMETHEUS_PORT = 
"jaegerQuery_port";
-
-    public static final String MONESTARTER_PROMETHEUS_PORT = 
"monestarter_prometheus_port";
-
-    public static final String APPLICATION = "application";
-
-    public static final String[] TESLA_FLAG = new String[]{""};
-
-    public static final String ST_K8S_NODE = "http://localhost";;
-
-    public static final String ONLINE_K8S_NODE = "http://localhost";;
-
-    public static final String CUSTOM_JOB_PREFIX = "prometheus_custom_server_";
-
-    public static final String CUSTOM_JOB_PORT_KEY = "ozhera_prometheus_port";
-
-    private final Gson gson = new Gson();
-
-    private List<Ips> starterIpsList = new ArrayList<>();
-    private List<Ips> javaagentIpsList = new ArrayList<>();
-    private List<Ips> jaegerqueryIpsList = new ArrayList<>();
-    private List<Ips> monequeryIpsList = new ArrayList<>();
-
-    @Value("${server.type}")
-    private String serverType;
-
-    @NacosValue(value = "${mione.k8s.node.port}", autoRefreshed = true)
-    private String machinePort;
-
-    @NacosValue(value = "${mione.k8s.container.port}", autoRefreshed = true)
-    private String containerPort;
-
-    @NacosValue(value = "${jaeger_query_token}")
-    private String jaegerQueryToken;
-
-    private ReentrantLock lock = new ReentrantLock();
-
-    @PostConstruct
-    public void init() {
-        new ScheduledThreadPoolExecutor(1).scheduleWithFixedDelay(() -> {
-            Stopwatch sw = Stopwatch.createStarted();
-            log.info("enable async to obtain nacos information");
-            ConcurrentHashMap<String, Set<String>> cache = new 
ConcurrentHashMap<>();
-            Ips starterIps = new Ips();
-            Ips javaagentIps = new Ips();
-            Ips jaegerqueryIps = new Ips();
-            Ips moneStarterIps = new Ips();
-            Set<String> starterAddresssSet = new HashSet<>();
-            Set<String> javaagentAddresssSet = new HashSet<>();
-            Set<String> jaegerqueryAddresssSet = new HashSet<>();
-            Set<String> monestarterPrometheusPortSet = new HashSet<>();
-            List<Ips> starterIpsListTmp = new ArrayList<>();
-            List<Ips> javaagentIpsListTmp = new ArrayList<>();
-            List<Ips> jaegerqueryIpsListTmp = new ArrayList<>();
-            List<Ips> monestarterIpsListTmp = new ArrayList<>();
-            List<String> teslaFlag = Arrays.asList(TESLA_FLAG);
-            try {
-                Set<String> serviceNames = getAllServiceNames();
-                log.info("service num:{} {}", serviceNames.size(), 
sw.elapsed(TimeUnit.MILLISECONDS));
-                if (serviceNames != null && serviceNames.size() > 0) {
-                    serviceNames.stream().forEach(it -> {
-                        if (it == null || it.startsWith("consumers:")) {
-                            return;
-                        }
-                        List<Instance> instances = null;
-                        try {
-                            instances = nacosNaming.getAllInstances(it);
-//                            log.info("service:{} num:{}", it, 
instances.size());
-                        } catch (NacosException e) {
-                            log.error("Nacos.getAllInstance error,", e);
-                        }
-                        assert instances != null;
-                        instances.forEach(it5 -> {
-                            if (teslaFlag.contains(it)) {
-                                Set<String> tmpIps = cache.getOrDefault(it, 
new HashSet<>());
-                                tmpIps.add(it5.getIp() + ":" + it5.getPort());
-                                cache.putIfAbsent(it, tmpIps);
-                            }
-                        });
-                        List<String> starterAddrs = 
instances.stream().filter(it1 -> it1.getMetadata() != null && 
StringUtils.startsWith(it,CUSTOM_JOB_PREFIX)).map(it2 -> {
-                            String ip = it2.getIp();
-                            String port = 
it2.getMetadata().get(CUSTOM_JOB_PORT_KEY);
-                            return ip + ":" + port;
-                        }).collect(Collectors.toList());
-
-                        List<String> javaagentAddrs = 
instances.stream().filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(it1.getMetadata().get(JAVAAGENT_PROMETHEUS_PORT))).map(it2
 -> {
-                            String ip = it2.getIp();
-                            String port = 
it2.getMetadata().get(JAVAAGENT_PROMETHEUS_PORT);
-                            return ip + ":" + port;
-                        }).collect(Collectors.toList());
-
-                        List<String> jaegerquery = 
instances.stream().filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(it1.getMetadata().get(JAEGERQUERY_PROMETHEUS_PORT))).map(it2
 -> {
-                            String ip = it2.getIp();
-                            String port = 
it2.getMetadata().get(JAEGERQUERY_PROMETHEUS_PORT);
-                            return ip + ":" + port;
-                        }).collect(Collectors.toList());
-
-                        List<String> moneStarterAddrs = 
instances.stream().filter(it1 -> it1.getMetadata() != null && 
StringUtils.isNotEmpty(it1.getMetadata().get(MONESTARTER_PROMETHEUS_PORT))).map(it2
 -> {
-                            String ip = it2.getIp();
-                            String port = 
it2.getMetadata().get(MONESTARTER_PROMETHEUS_PORT);
-                            return ip + ":" + port;
-                        }).collect(Collectors.toList());
-
-                        instances.stream().filter(it3 -> it3.getMetadata() != 
null && StringUtils.isNotEmpty(it3.getMetadata().get(APPLICATION))).forEach(it4 
-> {
-                            String appName = 
it4.getMetadata().get(APPLICATION);
-                            Set<String> tmpIps = cache.getOrDefault(appName, 
new HashSet<>());
-                            if (appName.equals("tesla-gateway")) {
-                                tmpIps.add(it4.getIp() + ":8080");
-                            } else {
-                                tmpIps.add(it4.getIp());
-                            }
-                            cache.putIfAbsent(appName, tmpIps);
-                        });
-
-                        starterAddresssSet.addAll(starterAddrs);
-                        javaagentAddresssSet.addAll(javaagentAddrs);
-                        jaegerqueryAddresssSet.addAll(jaegerquery);
-                        monestarterPrometheusPortSet.addAll(moneStarterAddrs);
-                    });
-                }
-
-                appIpsCache = cache;
-
-                starterIps.setTargets(new ArrayList<>(starterAddresssSet));
-                javaagentIps.setTargets(new ArrayList<>(javaagentAddresssSet));
-                jaegerqueryIps.setTargets(new 
ArrayList<>(jaegerqueryAddresssSet));
-                moneStarterIps.setTargets(new 
ArrayList<>(monestarterPrometheusPortSet));
-
-                starterIpsListTmp.add(starterIps);
-                javaagentIpsListTmp.add(javaagentIps);
-                jaegerqueryIpsListTmp.add(jaegerqueryIps);
-                monestarterIpsListTmp.add(moneStarterIps);
-
-                starterIpsList = starterIpsListTmp;
-                javaagentIpsList = javaagentIpsListTmp;
-                jaegerqueryIpsList = jaegerqueryIpsListTmp;
-                monequeryIpsList = monestarterIpsListTmp;
-                log.info("异步获取nacos信息完成 use time:{}", 
sw.elapsed(TimeUnit.MILLISECONDS));
-            } catch (Exception ex) {
-                log.error("PrometheusService.init, get nacos value error", ex);
-            }
-        }, 0, 15, TimeUnit.SECONDS);
-    }
-
-    private Set<String> getAllServiceNames() {
-
-        final Set<String> serviceNames = new LinkedHashSet<>();
-
-        int pageIndex = 1;
-        ListView<String> listView = nacosNaming.getServicesOfServer(pageIndex, 
PAGINATION_SIZE);
-        // First page data
-        List<String> firstPageData = listView.getData();
-        // Append first page into list
-        serviceNames.addAll(firstPageData);
-        // the total count
-        int count = listView.getCount();
-        // the number of pages
-        int pageNumbers = count / PAGINATION_SIZE;
-        int remainder = count % PAGINATION_SIZE;
-        // remain
-        if (remainder > 0) {
-            pageNumbers += 1;
-        }
-        // If more than 1 page
-        while (pageIndex < pageNumbers) {
-            listView = nacosNaming.getServicesOfServer(++pageIndex, 
PAGINATION_SIZE);
-            serviceNames.addAll(listView.getData());
-        }
-
-        return serviceNames;
-    }
-
+    private PrometheusIpServiceExtension prometheusIpServiceExtension;
+    
+    @NacosValue(value = "${hera.app.addr}", autoRefreshed = true)
+    private String heraAppAddr;
+    
+    @NacosValue(value = "${golang.runtime.default.port}", autoRefreshed = true)
+    private String goRuntimePort;
+    
+    private static final Gson gson = new Gson();
+    
     @Override
     public List<Ips> getByType(String type) {
-        if (StringUtils.isEmpty(type)) {
-            log.info("获取ip列表时, type : " + type + " 为空");
-            List<Ips> defaultResult = new ArrayList<>();
-            Ips ips = new Ips();
-            ips.setTargets(new ArrayList<>());
-            defaultResult.add(ips);
-            return defaultResult;
-        }
-        // type 1:customized metrics  2:javaagent jvm metrics   3:jaegerquery
-        if ("1".equals(type)) {
-            return starterIpsList;
-        } else if ("2".equals(type)) {
-            return javaagentIpsList;
-        } else if ("3".equals(type)) {
-            return jaegerqueryIpsList;
-        } else if ("4".equals(type)) {
-            return monequeryIpsList;
-        } else {
-            log.info("Obtain the ip address list, type : " + type + " 
illegality");
-            List<Ips> defaultResult = new ArrayList<>();
-            Ips ips = new Ips();
-            ips.setTargets(new ArrayList<>());
-            defaultResult.add(ips);
-            return defaultResult;
-        }
+        return prometheusIpServiceExtension.getByType(type);
     }
-
+    
     @Override
     public Set<String> getIpsByAppName(String name) {
-        return appIpsCache.getOrDefault(name, new HashSet<>());
-    }
-
-    private String[] getEtcd() {
-        return null;
+        return prometheusIpServiceExtension.getIpsByAppName(name);
     }
-
+    
     @Override
     public Set<String> getEtcdHosts() {
-        return null;
+        return prometheusIpServiceExtension.getEtcdHosts();
     }
-
-
+    
     @Override
     public List<Ips> getK8sNodeIp(String type) {
-
-        List<String> res = new ArrayList<>();
-       /* V1NodeList nodes;
-        try {
-            ApiClient client = getClient();
-            if (client == null) {
-                return null;
-            }
-            nodes = new CoreV1Api(client).listNode(null, null, null, null, 
null, null, null, null, null);
-        } catch (ApiException e) {
-            log.error(e.getResponseBody());
-            return null;
-        }
-        nodes.getItems().forEach(it -> {
-            String info = it.getMetadata().getName();
-            for (V1NodeAddress n : it.getStatus().getAddresses()) {
-                if ("ExternalIP".equals(n.getType())) {
-                    info = n.getAddress();
-                } else if ("InternalIP".equals(n.getType())) {
-                    info = n.getAddress();
-                }
-            }
-            res.add(info);
-        });*/
-        try (KubernetesClient client = new DefaultKubernetesClient()) {
-            // get Node list
-            NodeList nodeList = client.nodes().list();
-            for (Node node : nodeList.getItems()) {
-                // fetch Node adress list
-                for (NodeAddress address : node.getStatus().getAddresses()) {
-                    res.add(address.getAddress());
-                }
-            }
-        } catch (Exception e) {
-          log.error("getK8sNodeIp error:{}",e.getMessage());
-        }
-        log.info("getK8sNodeIp k8s node count:{}",res.size());
-        List<String> result = new ArrayList<>();
-        String port = "";
-        if (type.equals("node")) {
-            port = machinePort;
-        } else if (type.equals("container")) {
-            port = containerPort;
-        } else {
-            return null;
-        }
-        String finalPort = port;
-        res.forEach(
-                item -> {
-                    result.add(item + ":" + finalPort);
-                });
-        List<Ips> defaultResult = new ArrayList<>();
-        Ips ips2 = new Ips();
-        ips2.setTargets(result);
-        defaultResult.add(ips2);
-        return defaultResult;
+        return prometheusIpServiceExtension.getK8sNodeIp(type);
     }
-
-
-    private String innerRequest(String data, String url, String apiKey, String 
method) {
+    
+    @Override
+    public List<Ips> getHeraAppPodIp() {
+        log.info("getHeraAppPodIp begin heraAppAddr:{},goRuntimePort: {}", 
heraAppAddr, goRuntimePort);
+        List<Ips> res = new ArrayList<>();
+        String url = heraAppAddr + "/hera/app/env/non/probe/ips";
+        log.info("getHeraAppPodIp url:{}", url);
+        Map<String, String> headers = new HashMap(1);
+        headers.put("Content-Type", "application/json; charset=utf-8");
         try {
-            URL requestUrl = new URL(url);
-            HttpURLConnection conn = (HttpURLConnection) 
requestUrl.openConnection();
-            PrintWriter out = null;
-            // set the parameters of the URLConnection and the normal request 
properties
-            conn.setRequestProperty("Expect", "");
-            conn.setRequestProperty("Accept", "application/json");
-            conn.setRequestProperty("Content-Type", "application/json; 
charset=utf-8");
-            if (StringUtils.isNotBlank(apiKey)) {
-                conn.setRequestProperty("Authorization", "Bearer " + apiKey);
+            String heraAppRes = HttpClientV2.get(url, headers, 10000);
+            GetAllPodIpRes getAllPodIpRes = gson.fromJson(heraAppRes, 
GetAllPodIpRes.class);
+            log.info("getHeraAppPodIp heraAppRes : {} ", heraAppRes);
+            if (getAllPodIpRes == null || getAllPodIpRes.getCode() != 0) {
+                return res;
             }
-            conn.setDoOutput(true);
-            conn.setDoInput(true);
-            conn.setRequestMethod(method);
-            conn.connect();
-            if ("POST".equals(method)) {
-                // POST request
-                BufferedWriter out1 = new BufferedWriter(new 
OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
-                out1.write(data);
-                out1.flush();
-                out1.close();
-            }
-            InputStream is = conn.getInputStream();
-            BufferedReader br = new BufferedReader(new InputStreamReader(is));
-            String finalStr = "";
-            String str = "";
-            while ((str = br.readLine()) != null) {
-                finalStr = new String(str.getBytes(), "UTF-8");
-            }
-            is.close();
-            conn.disconnect();
-            log.info("innerRequest param url:{},apiKey:{},method:{}", url, 
apiKey, method);
-            return finalStr;
-        } catch (IOException e) {
-            e.printStackTrace();
-            return e.getMessage();
+            Ips ips = new Ips();
+            List<String> ipStr = new ArrayList<>();
+            getAllPodIpRes.getData().forEach(it -> {
+                ipStr.add(it + ":" + goRuntimePort);
+            });
+            ips.setTargets(ipStr);
+            res.add(ips);
+            return res;
+        } catch (Exception e) {
+            log.error("getHeraAppPodIp error:{}", e);
+            return res;
         }
     }
-
-/*    private ApiClient getClient() {
-        lock.lock();
-        try {
-            return Config.defaultClient();
-        } catch (IOException e) {
-            log.error("getClient error : {}",e.getMessage());
-            return null;
-        } finally {
-            lock.unlock();
-        }
-    }*/
-
+    
 }
diff --git 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusVmService.java
 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusVmServiceImpl.java
similarity index 92%
copy from 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusVmService.java
copy to 
ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusVmServiceImpl.java
index 20638fcf..c50d1e64 100644
--- 
a/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/PrometheusVmService.java
+++ 
b/ozhera-prometheus-agent/ozhera-prometheus-agent-service/src/main/java/com/xiaomi/youpin/prometheus/agent/service/impl/PrometheusVmServiceImpl.java
@@ -13,10 +13,12 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package com.xiaomi.youpin.prometheus.agent.service;
+
+package com.xiaomi.youpin.prometheus.agent.service.impl;
 
 import com.alibaba.nacos.api.config.annotation.NacosValue;
 import com.xiaomi.youpin.prometheus.agent.domain.Ips;
+import com.xiaomi.youpin.prometheus.agent.service.PrometheusVmService;
 import io.fabric8.kubernetes.api.model.PodList;
 import io.fabric8.kubernetes.client.DefaultKubernetesClient;
 import io.fabric8.kubernetes.client.KubernetesClient;
@@ -34,23 +36,24 @@ import java.util.Set;
  */
 @Slf4j
 @Service
-public class PrometheusVmService {
-
+public class PrometheusVmServiceImpl implements PrometheusVmService {
+    
     @NacosValue(value = "${vm.agent.port}", autoRefreshed = true)
     private String vmAgentPort;
-
+    
     @NacosValue(value = "${vm.Alert.Port}", autoRefreshed = true)
     private String vmAlertPort;
-
+    
     @NacosValue(value = "${vm.Insert.Port}", autoRefreshed = true)
     private String vmInsertPort;
-
+    
     @NacosValue(value = "${vm.Select.Port}", autoRefreshed = true)
     private String vmSelectPort;
-
+    
     @NacosValue(value = "${vm.Storage.Port}", autoRefreshed = true)
     private String vmStoragePort;
-
+    
+    @Override
     public List<Ips> getVMClusterIp(String name) {
         String port = "";
         switch (name) {
@@ -77,7 +80,7 @@ public class PrometheusVmService {
         Set<String> podNameSet = new HashSet<>();
         try (KubernetesClient client = new DefaultKubernetesClient()) {
             String labelName = "app";
-
+            
             // get Pod name
             PodList podList = client.pods().withLabel(labelName, name).list();
             String finalPort = port;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


Reply via email to