diff --git a/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/ctrl/JavaRestartCtrl.java b/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/ctrl/JavaRestartCtrl.java index 1893794..08aa5d5 100644 --- a/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/ctrl/JavaRestartCtrl.java +++ b/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/ctrl/JavaRestartCtrl.java @@ -66,28 +66,28 @@ public class JavaRestartCtrl { response.setPageSize(req.getPageSize()); response.setTotal(total); - if(subProjects!=null&&subProjects.size()>0){ - int size=subProjects.size(); - int begin=1; - //节省时间,启动线程先加载着 - for(int i=begin;i<size;i++){ - String name=subProjects.get(i).getName(); - new Thread(new Runnable(){ - public void run(){ - restartService.resetStatusInfos(name); - } - }).start(); - } - - //先把前面的一两个加载出来 - for(int i=0;i<begin;i++){ - if(i<size){ - String name=subProjects.get(i).getName(); - restartService.resetStatusInfos(name); - } - } - - } +// if(subProjects!=null&&subProjects.size()>0){ +// int size=subProjects.size(); +// int begin=1; +// //节省时间,启动线程先加载着 +// for(int i=begin;i<size;i++){ +// String name=subProjects.get(i).getName(); +// new Thread(new Runnable(){ +// public void run(){ +// restartService.resetStatusInfos(name); +// } +// }).start(); +// } +// +// //先把前面的一两个加载出来 +// for(int i=0;i<begin;i++){ +// if(i<size){ +// String name=subProjects.get(i).getName(); +// restartService.resetStatusInfos(name); +// } +// } +// +// } } catch (Exception e) { log.error("getProjectInfos~", e); diff --git a/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/service/impl/JavaProjectStatusLoaderTask.java b/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/service/impl/JavaProjectStatusLoaderTask.java index d63050e..f797ec0 100644 --- a/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/service/impl/JavaProjectStatusLoaderTask.java +++ b/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/service/impl/JavaProjectStatusLoaderTask.java @@ -2,16 +2,24 @@ package com.monitor.switchs.projectRestart.service.impl; import com.monitor.cloudtools.util.CommodUtil; import com.monitor.common.ProjectConstant; +import com.monitor.common.service.HttpRestClientService; import com.monitor.model.domain.JavaProjectStatus; +import com.monitor.model.response.BaseResponse; import com.monitor.switchs.SwitchCmdUtil; import com.monitor.switchs.projectRestart.common.IpStatus; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.stereotype.Component; +import javax.management.*; +import javax.management.remote.JMXConnector; +import javax.management.remote.JMXConnectorFactory; +import javax.management.remote.JMXServiceURL; +import java.io.IOException; +import java.net.MalformedURLException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.concurrent.ConcurrentHashMap; /** @@ -20,9 +28,10 @@ import java.util.concurrent.ConcurrentHashMap; @Component @EnableScheduling public class JavaProjectStatusLoaderTask { - - private static final ConcurrentHashMap<String,List<JavaProjectStatus>> map = new ConcurrentHashMap(); - private SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + @Autowired + private HttpRestClientService httpRestClient; + private static final ConcurrentHashMap<String, List<JavaProjectStatus>> map = new ConcurrentHashMap(); + private SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); /*@Scheduled(cron = "0/30 * * * * ?") private void fetchJavaProjectStauts() { @@ -39,35 +48,35 @@ public class JavaProjectStatusLoaderTask { } }*/ - public List<JavaProjectStatus> getStatusInfosFromCache(String projectName){ - Date now=new java.util.Date(); - if(map.contains(projectName)){ - List<JavaProjectStatus> cachedStatus=map.get(projectName); + public List<JavaProjectStatus> getStatusInfosFromCache(String projectName) { + Date now = new java.util.Date(); + if (map.contains(projectName)) { + List<JavaProjectStatus> cachedStatus = map.get(projectName); //10秒以内的数据 - if(cachedStatus!=null&&cachedStatus.size()>0&&(now.getTime()-cachedStatus.get(0).getRefreshTs())<=10*1000){ + if (cachedStatus != null && cachedStatus.size() > 0 && (now.getTime() - cachedStatus.get(0).getRefreshTs()) <= 10 * 1000) { return cachedStatus; } } return resetStatusInfosToCache(projectName); } - public List<JavaProjectStatus> resetStatusInfosToCache(String projectName){ - List<JavaProjectStatus> statuses=getStatusInfos(projectName); - if(statuses!=null&&statuses.size()>0){ - Date now=new java.util.Date(); - String dateStr = sDateFormat.format(now); - for(JavaProjectStatus javaProjectStatus:statuses){ + public List<JavaProjectStatus> resetStatusInfosToCache(String projectName) { + List<JavaProjectStatus> statuses = getStatusInfos(projectName); + if (statuses != null && statuses.size() > 0) { + Date now = new java.util.Date(); + String dateStr = sDateFormat.format(now); + for (JavaProjectStatus javaProjectStatus : statuses) { javaProjectStatus.setRefreshDateTime(dateStr); javaProjectStatus.setRefreshTs(now.getTime()); } } - map.put(projectName,statuses); + map.put(projectName, statuses); return statuses; } private List<JavaProjectStatus> getStatusInfos(String projectName) { List<JavaProjectStatus> javaProjectStatusList = new ArrayList<>(); - String commond = "ssh master@"+ ProjectConstant.DEPLOY_IP+" sh /home/master/.java_pm/java_restart.sh checkstatus mix " + projectName; + String commond = "ssh master@" + ProjectConstant.DEPLOY_IP + " sh /home/master/.java_pm/java_restart.sh checkstatus mix " + projectName; List<String> list = CommodUtil.exeReturnList(commond); for (String string : list) { String[] array = string.split("@@"); @@ -79,7 +88,7 @@ public class JavaProjectStatusLoaderTask { javaProjectStatus.setCloud(array[0]); javaProjectStatus.setIp(array[1].split("@")[1]); javaProjectStatus.setStatus(array[2]); - if (IpStatus.contain(projectName, array[1].split("@")[1])){ + if (IpStatus.contain(projectName, array[1].split("@")[1])) { javaProjectStatus.setStatus("2");//正在重启 } javaProjectStatus.setLastStart(array[3]); @@ -88,4 +97,143 @@ public class JavaProjectStatusLoaderTask { return javaProjectStatusList; } + + public List<JavaProjectStatus> getStatusInfosByHttp(String projectName) { + List<JavaProjectStatus> javaProjectStatusList = new ArrayList<>(); + List<String> projectIps = getProjectIps("qcloud", projectName); + for (String stringIp : projectIps) { + JavaProjectStatus javaProjectStatus = new JavaProjectStatus(); + javaProjectStatus.setName(projectName); + javaProjectStatus.setCloud("qcloud"); + javaProjectStatus.setIp(stringIp); + javaProjectStatus.setStatus(checkService(stringIp, projectName)); + javaProjectStatus.setLastStart(getStartTime(projectName, stringIp)); + javaProjectStatusList.add(javaProjectStatus); + } + return javaProjectStatusList; + } + + public String checkService(String ip, String projectName) { + String servicePort = getServicePort(projectName, "service"); + if (StringUtils.isBlank(servicePort) || StringUtils.isBlank(ip)) { + return "2"; + } + String url = "http://" + ip + ":" + servicePort + "/" + projectName + "/common/ok.jsp"; + String myResponse = httpRestClient.get(url, null, String.class); + if (Objects.nonNull(myResponse) || myResponse.contains("Resources ok")) + return "1"; + else + return "2"; + } + + public String getServicePort(String serviceName, String type) { + Map<String, String> context_port_map = new HashMap<>(); + context_port_map.put("yoho-users", "8081,9001"); + context_port_map.put("yoho-sns", "8082,9602"); + context_port_map.put("yohobuy-product", "8083,9603"); + context_port_map.put("yohobuy-order", "8084,9604"); + context_port_map.put("yohobuy-promotion", "8085,9605"); + context_port_map.put("yoho-message", "8086,9606"); + context_port_map.put("yohobuy-resources", "8087,9607"); + context_port_map.put("yohobuy-platform", "8088,9608"); + context_port_map.put("yohobuy-union", "8088,0000"); + context_port_map.put("yohobuy-activity", "8090,0000"); + context_port_map.put("yohobuy-bigdata", "8091,0000"); + context_port_map.put("yohobuy-brower", "8092,9612"); + context_port_map.put("yohobuy-crm", "8093,9623"); + context_port_map.put("yohobuy-wechat", "8094,9614"); + context_port_map.put("yoho-social", "8095,9615"); + context_port_map.put("uic", "8096,9616"); + context_port_map.put("yohobuy-risk", "8097,0000"); + + context_port_map.put("pfpromotion", "8098,0000"); + context_port_map.put("platform-cms", "8099,9609"); + context_port_map.put("pfproduct", "8100,0000"); + context_port_map.put("pfmaketing", "8101,0000"); + context_port_map.put("pfseller", "8102,0000"); + + context_port_map.put("ufoPlatform", "8088,9608"); + context_port_map.put("ufo-gateway", "8080,9600"); + + context_port_map.put("yoho-push", "8089,9629"); + context_port_map.put("yoho-inbox", "8062,9622"); + context_port_map.put("yoho-msgcenter-wechat", "8061,8161"); + + context_port_map.put("yoho-reviewed", "8063,9623"); + context_port_map.put("yoho-erp-gateway", "8080,9609"); + context_port_map.put("yoho-gateway", "8080,9600"); + context_port_map.put("cms_push", "8089,0000"); + context_port_map.put("yohobuy-task", "8084,9604"); + context_port_map.put("yoho-message-controller", "8086,9627"); + context_port_map.put("yoho-message-sender", "8086,9625"); + context_port_map.put("yoho-search-consumer", "8088,9608"); + context_port_map.put("yoho-search-producer", "8089,9609"); + context_port_map.put("yoho-search-adaptor", "8085,0000"); + context_port_map.put("yohomars-search-service", "8080,9900"); + + String port = ""; + if (context_port_map.containsKey(serviceName)) { + String ports = context_port_map.get(serviceName); + if ("service".equals(type) && ports.split(",").length > 1) { + port = ports.split(",")[0]; + } + if ("jmx".equals(type) && ports.split(",").length > 1) { + if (!"0000".equals(ports.split(",")[1])) + port = ports.split(",")[1]; + } + } + return port; + } + + private List<String> getProjectIps(String cloud, String projectName) { + List<String> javaProjectIpList = new ArrayList<>(); + String commond = "ssh master@" + ProjectConstant.DEPLOY_IP + " sh /home/master/.java_pm/java_restart.sh getIPs " + cloud + " " + projectName; + List<String> list = CommodUtil.exeReturnList(commond); + + for (String string : list) { + if (string.contains("@@") && (string.contains("master"))) { + String[] array = string.split("@@"); + for (int i = 1; i < array.length; i++) { + if (Objects.nonNull(array[i]) && array[i].split("@").length > 1) + javaProjectIpList.add(array[i].split("@")[1]); + } + } + } + return javaProjectIpList; + } + + public String getStartTime(String serviceName, String ip) { + String beginTime = "0000-00-00 00:00:00"; + String jmxPort = getServicePort(serviceName, "jmx"); + if (StringUtils.isNotBlank(jmxPort)) { + try { + String jmxURL = "service:jmx:rmi:///jndi/rmi://" + ip + ":" + jmxPort + "/jmxrmi";//tomcat jmx url + JMXServiceURL serviceURL = new JMXServiceURL(jmxURL); + Map map = new HashMap(); + JMXConnector connector = JMXConnectorFactory.connect(serviceURL, map); + MBeanServerConnection mbsc = connector.getMBeanServerConnection(); + ObjectName runtimeObjName = new ObjectName("java.lang:type=Runtime"); + Date starttime = new Date((Long) mbsc.getAttribute(runtimeObjName, "StartTime")); + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + beginTime = df.format(starttime); + } catch (MalformedURLException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } catch (ReflectionException e) { + e.printStackTrace(); + } catch (InstanceNotFoundException e) { + e.printStackTrace(); + } catch (AttributeNotFoundException e) { + e.printStackTrace(); + } catch (MBeanException e) { + e.printStackTrace(); + } catch (MalformedObjectNameException e) { + e.printStackTrace(); + } + } + + + return beginTime; + } } diff --git a/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/service/impl/RestartServiceImpl.java b/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/service/impl/RestartServiceImpl.java index 6722cdd..09d7152 100644 --- a/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/service/impl/RestartServiceImpl.java +++ b/monitor-service-switch/src/main/java/com/monitor/switchs/projectRestart/service/impl/RestartServiceImpl.java @@ -35,7 +35,8 @@ public class RestartServiceImpl implements RestartService { @Override public List<JavaProjectStatus> getStatusInfos(String project) { - return javaProjectStatusLoaderTask.getStatusInfosFromCache(project); +// return javaProjectStatusLoaderTask.getStatusInfosFromCache(project); + return javaProjectStatusLoaderTask.getStatusInfosByHttp(project); } @Override