Authored by jimi

add 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);
... ...
... ... @@ -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;
}
}
... ...
... ... @@ -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
... ...