Authored by 王凤

合并分支 'swy' 到 'master'

删除文件



查看合并请求 !6
1 -package com.sitech.ismp.check.downtime;  
2 -  
3 -import java.io.Serializable;  
4 -import java.util.Date;  
5 -  
6 -/**  
7 - * @author frank zmm@honggroup.com.cn  
8 - * @Description: 宕机表对应的bean。  
9 - * @Package com.sitech.ismp.check.downtime  
10 - * @ClassName: com.sitech.ismp.check.downtime.DowntimeBean  
11 - * @date 2017年04月16日 13:30  
12 - */  
13 -public class DowntimeBean implements Serializable{  
14 -  
15 - // 设备ID  
16 - private String DEVICE_ID;  
17 - // 设备IP地址  
18 - private String DEVICE_IP;  
19 - // 设备别名  
20 - private String DEVICE_ALIAS;  
21 - // kbp_class 设备的分类  
22 - private String KBP_CLASS;  
23 - // 连接协议(ssh/telnet)  
24 - private String PROTOCOL;  
25 - // 协议端口  
26 - private int PROTOCOL_PORT;  
27 - // 用户名  
28 - private String USER_NAME;  
29 - // 密码  
30 - private String PASSWORD;  
31 - // 创建日期  
32 - private Date CREATE_DATE;  
33 - // ping IP 后的结果  
34 - private boolean pingState;  
35 - // ping后进行ssh连接后的状态。  
36 - private boolean sshState;  
37 - // 告警级别 1 严重告警;2 重要告警  
38 - private int warningLevel;  
39 - // ping后进行ssh连接后的结果,即重要告警还是严重告警。  
40 - private String warningResult;  
41 -  
42 - private String unitId;  
43 -  
44 - public String getDEVICE_ID() {  
45 - return DEVICE_ID;  
46 - }  
47 -  
48 - public void setDEVICE_ID(String DEVICE_ID) {  
49 - this.DEVICE_ID = DEVICE_ID;  
50 - }  
51 -  
52 - public String getDEVICE_IP() {  
53 - return DEVICE_IP;  
54 - }  
55 -  
56 - public void setDEVICE_IP(String DEVICE_IP) {  
57 - this.DEVICE_IP = DEVICE_IP;  
58 - }  
59 -  
60 - public String getDEVICE_ALIAS() {  
61 - return DEVICE_ALIAS;  
62 - }  
63 -  
64 - public void setDEVICE_ALIAS(String DEVICE_ALIAS) {  
65 - this.DEVICE_ALIAS = DEVICE_ALIAS;  
66 - }  
67 -  
68 - public String getKBP_CLASS() {  
69 - return KBP_CLASS;  
70 - }  
71 -  
72 - public void setKBP_CLASS(String KBP_CLASS) {  
73 - this.KBP_CLASS = KBP_CLASS;  
74 - }  
75 -  
76 - public String getPROTOCOL() {  
77 - return PROTOCOL;  
78 - }  
79 -  
80 - public void setPROTOCOL(String PROTOCOL) {  
81 - this.PROTOCOL = PROTOCOL;  
82 - }  
83 -  
84 - public int getPROTOCOL_PORT() {  
85 - return PROTOCOL_PORT;  
86 - }  
87 -  
88 - public void setPROTOCOL_PORT(int PROTOCOL_PORT) {  
89 - this.PROTOCOL_PORT = PROTOCOL_PORT;  
90 - }  
91 -  
92 - public String getUSER_NAME() {  
93 - return USER_NAME;  
94 - }  
95 -  
96 - public void setUSER_NAME(String USER_NAME) {  
97 - this.USER_NAME = USER_NAME;  
98 - }  
99 -  
100 - public String getPASSWORD() {  
101 - return PASSWORD;  
102 - }  
103 -  
104 - public void setPASSWORD(String PASSWORD) {  
105 - this.PASSWORD = PASSWORD;  
106 - }  
107 -  
108 - public Date getCREATE_DATE() {  
109 - return CREATE_DATE;  
110 - }  
111 -  
112 - public void setCREATE_DATE(Date CREATE_DATE) {  
113 - this.CREATE_DATE = CREATE_DATE;  
114 - }  
115 -  
116 - public boolean isPingState() {  
117 - return pingState;  
118 - }  
119 -  
120 - public void setPingState(boolean pingState) {  
121 - this.pingState = pingState;  
122 - }  
123 -  
124 - public boolean isSshState() {  
125 - return sshState;  
126 - }  
127 -  
128 - public void setSshState(boolean sshState) {  
129 - this.sshState = sshState;  
130 - }  
131 -  
132 - public String getWarningResult() {  
133 - return warningResult;  
134 - }  
135 -  
136 - public void setWarningResult(String warningResult) {  
137 - this.warningResult = warningResult;  
138 - }  
139 -  
140 - public int getWarningLevel() {  
141 - return warningLevel;  
142 - }  
143 -  
144 - public void setWarningLevel(int warningLevel) {  
145 - this.warningLevel = warningLevel;  
146 - }  
147 -  
148 - public String getUnitId() {  
149 - return unitId;  
150 - }  
151 -  
152 - public void setUnitId(String unitId) {  
153 - this.unitId = unitId;  
154 - }  
155 -  
156 - @Override  
157 - public String toString() {  
158 - return "DowntimeBean{" +  
159 - " DEVICE_IP='" + DEVICE_IP + '\'' +  
160 - ", pingState=" + pingState +  
161 - ", sshState=" + sshState +  
162 - ", warningResult='" + warningResult + '\'' +  
163 - ", DEVICE_ALIAS='" + DEVICE_ALIAS + '\'' +  
164 - ", USER_NAME='" + USER_NAME + '\'' +  
165 - ", warningLevel=" + warningLevel +  
166 - '}';  
167 - }  
168 -  
169 -}  
1 -package com.sitech.ismp.check.downtime;  
2 -  
3 -import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;  
4 -import org.apache.log4j.Logger;  
5 -  
6 -import java.text.SimpleDateFormat;  
7 -import java.util.*;  
8 -  
9 -/**  
10 - * @author frank zmm@honggroup.com.cn  
11 - * @Description: 宕机检测MBean实现类  
12 - * @Package com.sitech.ismp.check.downtime  
13 - * @ClassName: com.sitech.ismp.check.downtime.Downtime  
14 - * @date 2017年04月15日 13:43  
15 - */  
16 -public class Downtime implements DowntimeMBean {  
17 -  
18 - private static Logger log= Logger.getLogger(Downtime.class);  
19 -  
20 -  
21 - DowntimeDao dao=new DowntimeDao();  
22 - DowntimeHistoryDao historyDao=new DowntimeHistoryDao();  
23 - SimpleDateFormat formaF=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  
24 -  
25 - /**  
26 - * 检查主机的连接状态。如果连接异常,需要每隔30秒连续连接3次,如果3次连接都异常,则视为主机宕机,发送严重告警。  
27 - * 1 将需要监控的设备添加到内存数据库中。  
28 - * 2 对表中的主机进行ping操作。  
29 - * 3 对表中的主机进行SSH登录认证  
30 - * 4 发送告警信息  
31 - * @param params  
32 - * @return  
33 - */  
34 - @Override  
35 - public Vector<TblATO_KPIDETAIL> checkConnectState(HashMap<String,String> params){  
36 - dao.addDowntimeHost(params);  
37 - String ipAddr=params.get("DEVICE_IP");  
38 - boolean flag=isNeedExecuteCheckMethod(ipAddr);  
39 - if(flag){  
40 - log.info("*************"+ formaF.format(new Date()) +" execute method checkConnectState .................");  
41 - // 将需要监控的设备添加到内存数据库中。  
42 - DowntimeBean bean=dao.map2DowntimeBean(params);  
43 - DowntimeServer server=new DowntimeServer(bean);  
44 - // 包括 2-4 需要执行的内容。 如果监控的设备很多的时候,使用单线程可能一个监控周期都不能ping完所有的主机。  
45 - server.run();  
46 - log.info("@@@@@@@@@@@@@@@@@@@@@@***** finish run method *****@@@@@@@@@@@@@@@@@@@@@@@@@@@");  
47 - log.info(bean.toString());  
48 - }  
49 - Vector<TblATO_KPIDETAIL> bean = new Vector<TblATO_KPIDETAIL>();  
50 - return bean;  
51 - }  
52 -  
53 -  
54 -  
55 - /**  
56 - * 是否执行checkConnectState 方法。  
57 - * 判断当前IP是否发送过告警信息。每天一个主机只发送1条告警信息。  
58 - * @return  
59 - */  
60 - private boolean isNeedExecuteCheckMethod(String ipAddr){  
61 - boolean flag=true; // 是否该ipAddr已经发送过消息。  
62 - SimpleDateFormat formaF=new SimpleDateFormat("yyyy-MM-dd");  
63 - String currentDay=formaF.format(new Date());  
64 - List<DowntimeHistoryBean> list=historyDao.getDowntimeHistoryByIp(ipAddr,currentDay);  
65 - if(null !=list && list.size()>0){  
66 - flag=false;  
67 - }  
68 - return flag;  
69 - }  
70 -  
71 -  
72 -}  
1 -package com.sitech.ismp.check.downtime;  
2 -  
3 -import com.sitech.database.dao.BaseDao;  
4 -import org.apache.log4j.Logger;  
5 -  
6 -import java.sql.SQLException;  
7 -import java.util.*;  
8 -  
9 -/**  
10 - * @author frank zmm@honggroup.com.cn  
11 - * @Description: 宕机检测MBean对应dao类  
12 - * @Package com.sitech.ismp.check.downtime  
13 - * @ClassName: com.sitech.ismp.check.downtime.DowntimeDao  
14 - * @date 2017年04月16日 14:15  
15 - */  
16 -public class DowntimeDao extends BaseDao {  
17 -  
18 - private static Logger log=Logger.getLogger(DowntimeDao.class);  
19 -  
20 - /**  
21 - * 添加需要监控宕机情况的设备,如果该设备已经存在,则修改。  
22 - */  
23 - public void addDowntimeHost(HashMap<String,String> params){  
24 - DowntimeBean downtimeBean=map2DowntimeBean(params);  
25 - addDowntimeHost(downtimeBean);  
26 - }  
27 -  
28 - public void addDowntimeHost(DowntimeBean downtimeBean){  
29 - try {  
30 - int updateSum = sqlmapClient.update("updateDowntimeHostByIp",downtimeBean);  
31 - if(updateSum == 0){  
32 - sqlmapClient.insert("addDowntimeHost", downtimeBean);  
33 - }  
34 - } catch (Exception e) {  
35 - error.error("Exception while addDowntimeHost.", e);  
36 - }  
37 - }  
38 -  
39 -  
40 - /**  
41 - * 根据IP删除对应的记录。  
42 - * @param ip  
43 - * @return  
44 - */  
45 - public int deleteDowntimeHostByIp(String ip){  
46 - try {  
47 - return sqlmapClient.delete("deleteDowntimeHostByIp", ip);  
48 - } catch (Exception e) {  
49 - error.error("Exception while deleteDowntimeHostByIp.", e);  
50 - }  
51 - return -1;  
52 - }  
53 -  
54 - /**  
55 - * 根据IP查询对应的记录。  
56 - * @param deviceIp  
57 - * @return  
58 - */  
59 - public List<DowntimeBean> getDowntimeByIp(String deviceIp){  
60 - HashMap<String,String> param=new HashMap<String, String>();  
61 - param.put("DEVICE_IP",deviceIp);  
62 - List<DowntimeBean> beanList=new ArrayList<DowntimeBean>();  
63 - try {  
64 - beanList=sqlmapClient.queryForList("getDowntimeByIp", param);  
65 - } catch (SQLException e) {  
66 - e.printStackTrace();  
67 - }  
68 - return beanList;  
69 - }  
70 -  
71 - public DowntimeBean map2DowntimeBean(HashMap<String,String> params){  
72 - DowntimeBean bean=new DowntimeBean();  
73 - try {  
74 - bean.setDEVICE_ID(UUID.randomUUID().toString());  
75 - bean.setDEVICE_IP(params.get("DEVICE_IP"));  
76 - bean.setDEVICE_ALIAS(params.get("DEVICE_ALIAS"));  
77 - bean.setKBP_CLASS(params.get("KBP_CLASS") + "-99");  
78 - bean.setPROTOCOL(params.get("PROTOCOL"));  
79 - bean.setPROTOCOL_PORT(Integer.parseInt(params.get("PROTOCOL_PORT")));  
80 - bean.setUSER_NAME(params.get("USER_NAME"));  
81 - bean.setPASSWORD(params.get("PASSWORD"));  
82 - bean.setCREATE_DATE(new Date());  
83 - }catch (Exception e){  
84 - log.error("addDowntimeHost, write values to DowntimeBean has error!",e);  
85 - }  
86 - return bean;  
87 - }  
88 -  
89 -}  
1 -package com.sitech.ismp.check.downtime;  
2 -  
3 -/**  
4 - * @author frank zmm@honggroup.com.cn  
5 - * @Description: 发送告警的历史记录bean。  
6 - * @Package com.sitech.ismp.check.downtime  
7 - * @ClassName: com.sitech.ismp.check.downtime.DowntimeHistoryBean  
8 - * @date 2017年04月19日 14:04  
9 - */  
10 -public class DowntimeHistoryBean {  
11 - // 设备ID  
12 - private String DEVICE_ID;  
13 - // 设备IP地址  
14 - private String DEVICE_IP;  
15 - // 创建日期  
16 - private String CREATE_DATE;  
17 -  
18 - public String getDEVICE_ID() {  
19 - return DEVICE_ID;  
20 - }  
21 -  
22 - public void setDEVICE_ID(String DEVICE_ID) {  
23 - this.DEVICE_ID = DEVICE_ID;  
24 - }  
25 -  
26 - public String getDEVICE_IP() {  
27 - return DEVICE_IP;  
28 - }  
29 -  
30 - public void setDEVICE_IP(String DEVICE_IP) {  
31 - this.DEVICE_IP = DEVICE_IP;  
32 - }  
33 -  
34 - public String getCREATE_DATE() {  
35 - return CREATE_DATE;  
36 - }  
37 -  
38 - public void setCREATE_DATE(String CREATE_DATE) {  
39 - this.CREATE_DATE = CREATE_DATE;  
40 - }  
41 -  
42 - @Override  
43 - public String toString() {  
44 - return "DowntimeHistoryBean{" +  
45 - "DEVICE_ID='" + DEVICE_ID + '\'' +  
46 - ", DEVICE_IP='" + DEVICE_IP + '\'' +  
47 - ", CREATE_DATE='" + CREATE_DATE + '\'' +  
48 - '}';  
49 - }  
50 -}  
1 -package com.sitech.ismp.check.downtime;  
2 -  
3 -import com.sitech.database.dao.BaseDao;  
4 -import org.apache.log4j.Logger;  
5 -  
6 -import java.sql.SQLException;  
7 -import java.util.ArrayList;  
8 -import java.util.HashMap;  
9 -import java.util.List;  
10 -  
11 -/**  
12 - * @author frank zmm@honggroup.com.cn  
13 - * @Description: 告警历史dao  
14 - * @Package com.sitech.ismp.check.downtime  
15 - * @ClassName: com.sitech.ismp.check.downtime.DowntimeHistoryDao  
16 - * @date 2017年04月19日 14:06  
17 - */  
18 -public class DowntimeHistoryDao extends BaseDao {  
19 - private static Logger log=Logger.getLogger(DowntimeHistoryDao.class);  
20 -  
21 - /**  
22 - * 添加告警信息  
23 - * @param bean  
24 - */  
25 - public void addDowntimeHistory(DowntimeHistoryBean bean){  
26 - try {  
27 - sqlmapClient.insert("addDowntimeHistory", bean);  
28 - } catch (SQLException e) {  
29 - log.error("Exception while addDowntimeHistory.",e);  
30 - }  
31 - }  
32 -  
33 - /**  
34 - *  
35 - * @param deviceIp  
36 - * @param createDate  
37 - * @return  
38 - */  
39 - public List<DowntimeHistoryBean> getDowntimeHistoryByIp(String deviceIp,String createDate){  
40 - HashMap<String,String> param=new HashMap<String, String>();  
41 - param.put("DEVICE_IP",deviceIp);  
42 - param.put("CREATE_DATE",createDate);  
43 - List<DowntimeHistoryBean> beanList=new ArrayList<DowntimeHistoryBean>();  
44 - try {  
45 - beanList=sqlmapClient.queryForList("getDowntimeHistoryByIp", param);  
46 - } catch (SQLException e) {  
47 - e.printStackTrace();  
48 - }  
49 - return beanList;  
50 - }  
51 -  
52 - /**  
53 - * 删除表中的所有数据。  
54 - * @return  
55 - */  
56 - public int deleteDowntimeHistory(){  
57 - try {  
58 - return sqlmapClient.delete("deleteDowntimeHistory", null);  
59 - } catch (Exception e) {  
60 - error.error("Exception while deleteDowntimeHistory.", e);  
61 - }  
62 - return -1;  
63 - }  
64 -  
65 -}  
1 -package com.sitech.ismp.check.downtime;  
2 -  
3 -import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;  
4 -  
5 -import java.util.HashMap;  
6 -import java.util.Vector;  
7 -  
8 -/**  
9 - * @author frank zmm@honggroup.com.cn  
10 - * @Description: 宕机检测MBean接口  
11 - * @Package com.sitech.ismp.check.downtime  
12 - * @ClassName: com.sitech.ismp.check.downtime.DowntimeMBean  
13 - * @date 2017年04月15日 13:42  
14 - */  
15 -public interface DowntimeMBean {  
16 - /**  
17 - * 检查主机的连接状态。如果连接异常,需要每隔30秒连续连接3次,如果3次连接都异常,则视为主机宕机,发送严重告警。  
18 - * @param params  
19 - * @return  
20 - */  
21 - public Vector<TblATO_KPIDETAIL> checkConnectState(HashMap<String,String> params);  
22 -  
23 -  
24 -}  
1 -package com.sitech.ismp.check.downtime;  
2 -  
3 -import com.sitech.ismp.app.event.KPI2Event;  
4 -import com.sitech.ismp.coll.basic.TblATO_EVENT;  
5 -import com.sitech.util.Base62Util;  
6 -import com.sitech.util.RandomGUID;  
7 -import com.sitech.util.upload.RomoteController;  
8 -import com.sitech.util.upload.SSHThread;  
9 -import com.sitech.util.upload.TelnetThread;  
10 -import org.apache.commons.lang.StringUtils;  
11 -import org.apache.log4j.Logger;  
12 -  
13 -import java.io.BufferedReader;  
14 -import java.io.IOException;  
15 -import java.io.InputStreamReader;  
16 -import java.text.ParseException;  
17 -import java.text.SimpleDateFormat;  
18 -import java.util.Date;  
19 -import java.util.Random;  
20 -  
21 -/**  
22 - * @author frank zmm@honggroup.com.cn  
23 - * @Description: 宕机检测MBean对应Server类。  
24 - * ping的布尔结果 true:能ping通, false:ping不通  
25 - * ssh连接的布尔结果 true:能ssh连接, false:ssh连接异常  
26 - * @Package com.sitech.ismp.check.downtime  
27 - * @ClassName: com.sitech.ismp.check.downtime.DowntimeServer  
28 - * @date 2017年04月12日 16:22  
29 - */  
30 -public class DowntimeServer implements Runnable{  
31 -  
32 - private static Logger log=Logger.getLogger(DowntimeServer.class);  
33 - private DowntimeBean bean;  
34 - DowntimeHistoryDao historyDao=new DowntimeHistoryDao();  
35 -  
36 - public DowntimeServer(DowntimeBean bean){  
37 - this.bean=bean;  
38 - }  
39 -  
40 - /**  
41 - * 1 对表中的主机进行ping操作。  
42 - * 2 对表中的主机进行SSH登录认证。  
43 - * 3 发送告警信息。  
44 - */  
45 - @Override  
46 - public void run(){  
47 - getPingResult(bean);  
48 - getSshResult(bean);  
49 - sendEvent2Workstation(bean);  
50 - }  
51 -  
52 - /**  
53 - * 将每个IP ping后的结果设置到pingState属性上。  
54 - * @param bean  
55 - * @return  
56 - */  
57 - public void getPingResult(DowntimeBean bean){  
58 - String ipAddr=null;  
59 - log.info("============================== ping all parames ======================");  
60 - log.info(bean.toString());  
61 - ipAddr=bean.getDEVICE_IP();  
62 - boolean temp=pingIpAddress(ipAddr);  
63 - bean.setPingState(temp);  
64 -  
65 - }  
66 -  
67 - /**  
68 - * 进行SSH连接,并设置对应告警的内容。  
69 - * @param bean  
70 - * @return  
71 - */  
72 - public void getSshResult(DowntimeBean bean){  
73 - boolean pingState=bean.isPingState(); // true:能ping通, false:ping不通  
74 - log.info("========== pingState=== "+pingState+"==========");  
75 - boolean sshState=contentWithSsh(bean);  
76 - log.info("========== sshState=== "+sshState+"==========");  
77 - if(!pingState){ // ping 不通 false  
78 - if(!sshState){ // ssh 不能连接 严重告警  
79 - bean.setWarningLevel(1);  
80 - bean.setWarningResult(bean.getDEVICE_IP()+" 的主机连接异常,请检查网络是否正常或主机宕机!");  
81 - log.info("========== bean.setWarningResult sshState ="+sshState+",=ip is ["+bean.getDEVICE_IP()+"] host connect error");  
82 - }  
83 - }else{ //能ping 通  
84 - if(!sshState){ // ssh 不能连接 重要告警  
85 - bean.setWarningLevel(2);  
86 - bean.setWarningResult(bean.getDEVICE_IP()+" 的主机不能进行登录,请检查用户名或密码!!");  
87 - log.info("========== bean.setWarningResult sshState ="+sshState+",=ip is["+bean.getDEVICE_IP()+"] host login error");  
88 - }  
89 - }  
90 - }  
91 -  
92 - /**  
93 - * 将告警信息发送到Workstation。  
94 - * 当ping的结果为false的时候才发送。  
95 - * @param bean  
96 - */  
97 - private void sendEvent2Workstation(DowntimeBean bean){  
98 - log.info("******************************************************");  
99 - log.info("*************** sendEvent2Workstation ****************");  
100 - log.info("******************************************************");  
101 - log.info(bean.toString());  
102 - if(!bean.isSshState()){  
103 - KPI2Event event=new KPI2Event();  
104 - TblATO_EVENT tblato_event = new TblATO_EVENT();  
105 - String eventId= RandomGUID.getRandomGUID();  
106 - try {  
107 - tblato_event.setEVENT_ID(eventId); // 随即生成一个GUID作为唯一键  
108 - tblato_event.setUNIT_ID(bean.getUnitId()); // UNIT_ID在页面显示的为平台类型。  
109 - tblato_event.setKPI_ID("FM-00-01-001-999");  
110 - tblato_event.setKPI_VALUE(bean.getWarningResult());  
111 - tblato_event.setEVENT_TITLE(bean.getWarningResult());  
112 - tblato_event.setEVENT_CLASS(bean.getWarningLevel()); // 告警级别  
113 - tblato_event.setCLL_TIME(new java.util.Date());  
114 - tblato_event.setGENERANT_TIME(new java.util.Date());  
115 - tblato_event.setCFG_GUID(RandomGUID.getRandomGUID());  
116 - log.info("hava finish set values to TblATO_EVENT!");  
117 - } catch (ParseException e) {  
118 - log.error("set values to TblATO_EVENT hava error!",e);  
119 - }  
120 - try {  
121 - event.sendEvent2Workstation(tblato_event);  
122 - addDowntimeHistory(bean);  
123 - log.info("have write object(TblATO_EVENT) to Workstation!");  
124 - } catch (Exception e) {  
125 - log.error("have write object(TblATO_EVENT) to Workstation have error!",e);  
126 - }  
127 - }  
128 - }  
129 -  
130 -  
131 - private void addDowntimeHistory(DowntimeBean bean){  
132 - DowntimeHistoryBean historyBean=new DowntimeHistoryBean();  
133 - historyBean.setDEVICE_ID(bean.getDEVICE_ID());  
134 - historyBean.setDEVICE_IP(bean.getDEVICE_IP());  
135 - SimpleDateFormat formaF=new SimpleDateFormat("yyyy-MM-dd");  
136 - String date=formaF.format(new Date())+"";  
137 - date=date.substring(0,10);  
138 - historyBean.setCREATE_DATE(date);  
139 - historyDao.addDowntimeHistory(historyBean);  
140 - }  
141 -  
142 -  
143 - /**  
144 - * 获取ping 后的结果,是否可以平通指定的IP。  
145 - * @param ipAddr  
146 - * @return  
147 - */  
148 - private boolean pingIpAddress(String ipAddr){  
149 - int pingErrorCount=0; // ping 不通的次数,ping3次。  
150 - int interval=8; // 时间间隔8秒。  
151 - boolean flag=false;  
152 - boolean temp=false;  
153 - for(int i=0;i<3;i++){  
154 - temp=executeCommand(ipAddr); // ping不通返回false。  
155 - log.info("["+ipAddr+"]ping result is ["+temp+"],(true:can connect;false:can't connect)");  
156 - if(!temp){  
157 - pingErrorCount++;  
158 - }  
159 - try {  
160 - Thread.sleep(interval*1000);  
161 - log.info("ping ["+ipAddr+"] trread sleep "+interval+" secound........");  
162 - } catch (InterruptedException e) {  
163 - e.printStackTrace();  
164 - }  
165 - }  
166 - if(pingErrorCount == 3){  
167 - log.info("["+ipAddr+"] can't connect 3 times.");  
168 - }else{  
169 - flag=true;  
170 - log.info("["+ipAddr+"] can connect.");  
171 - }  
172 - return flag;  
173 - }  
174 -  
175 -  
176 - /**  
177 - * 进行ssh连接,判断是否可以连接成功。  
178 - * windows操作系统使用 TelnetThread类连接。 Windows的客户端需要配置并开启Telnet相关的服务。  
179 - * @return  
180 - */  
181 - private boolean contentWithSsh(DowntimeBean bean){  
182 - String protocol=bean.getPROTOCOL();  
183 - String ipAddr=bean.getDEVICE_IP();  
184 - String deviceAlias=bean.getDEVICE_ALIAS();  
185 - int protocolPort=bean.getPROTOCOL_PORT();  
186 - String userName=bean.getUSER_NAME();  
187 - String password=bean.getPASSWORD();  
188 - bean.setUnitId(getUnitId(deviceAlias));  
189 - log.info("execute contentWithSsh method ......");  
190 - boolean temp=false;  
191 - RomoteController tt = null;  
192 - log.info("host params is: ipAddr="+ipAddr+",protocol="+protocol+",protocolPort="+protocolPort+",userName="+userName);  
193 - if(loginParamterIsOk(protocol,ipAddr,protocolPort,userName,password,deviceAlias)){  
194 - try {  
195 - if (protocol != null && protocol.equalsIgnoreCase("telnet")) {  
196 - tt = new TelnetThread(ipAddr, protocolPort, userName, password);  
197 - } else if (protocol != null && protocol.equalsIgnoreCase("ssh")) {  
198 - tt = new SSHThread(ipAddr, protocolPort, userName, password);  
199 - }else{  
200 - log.error("===================== unknown protocol =====================");  
201 - }  
202 - }catch (Exception e){  
203 - log.error(protocol+"connect have exception!");  
204 - }  
205 - tt.initial();  
206 - boolean flag=tt.isAuthorized();  
207 - log.info("******************* tt.isAuthorized() result is "+flag);  
208 - if (flag){ // 认证通过  
209 - log.info(ipAddr+" SSH connect,Authorized result is true authorized success!");  
210 - temp=true;  
211 - bean.setSshState(true);  
212 - }else{  
213 - log.info(ipAddr+" SSH connect,Authorized result is false authorized fail!!");  
214 - bean.setSshState(false);  
215 - }  
216 - }  
217 - return temp;  
218 - }  
219 -  
220 -  
221 - /**  
222 - * 判断所有的参数是否为空。  
223 - * @param protocol 协议类型  
224 - * @param ipAddr IP地址  
225 - * @param protocolPort 协议端口  
226 - * @param userName 用户名  
227 - * @param password 密码  
228 - * @param deviceAlias 主机别名  
229 - * @return  
230 - */  
231 - private boolean loginParamterIsOk(String protocol,String ipAddr,int protocolPort,String userName,  
232 - String password,String deviceAlias){  
233 - boolean flag=true;  
234 - if(StringUtils.isEmpty(protocol)){  
235 - flag=false;  
236 - }  
237 - if(StringUtils.isEmpty(ipAddr)){  
238 - flag=false;  
239 - }  
240 - if(StringUtils.isEmpty(protocolPort+"")){  
241 - flag=false;  
242 - }  
243 - if(StringUtils.isEmpty(userName)){  
244 - flag=false;  
245 - }  
246 - if(StringUtils.isEmpty(password)){  
247 - flag=false;  
248 - }  
249 - if(StringUtils.isEmpty(deviceAlias)){  
250 - flag=false;  
251 - }  
252 - return flag;  
253 - }  
254 -  
255 -  
256 - private String getUnitId(String deviceAlias){  
257 - StringBuffer bf=new StringBuffer("10-10-99-98:");  
258 - bf.append(deviceAlias).append("_").append(getEncryptStr());  
259 - return bf.toString();  
260 - }  
261 -  
262 - /**  
263 - * 返回加密后的一个唯一字符串。  
264 - * @return  
265 - */  
266 - private String getEncryptStr(){  
267 - SimpleDateFormat forma=new SimpleDateFormat("yyMMddHHmmss");  
268 - Random rr= new Random();  
269 - String str=rr.nextInt(999)+forma.format(new Date())+rr.nextInt(999);  
270 - return Base62Util.encode(Long.parseLong(str));  
271 - }  
272 -  
273 -  
274 - /**  
275 - * 返回ping后的结果。  
276 - * @param ipAddr ip 地址。  
277 - * @return  
278 - */  
279 - private boolean executeCommand(String ipAddr){  
280 - String command = "/bin/ping -c 3 -w 3 " + ipAddr;;  
281 - // 执行command 命令。  
282 - boolean flag=false;  
283 - String line = null;  
284 - StringBuilder sb = new StringBuilder();  
285 - Runtime runtime = Runtime.getRuntime();  
286 - Process process = null;  
287 - long startTime = new Date().getTime();  
288 - try {  
289 - process = runtime.exec(command);  
290 - } catch (IOException e) {  
291 - log.error("execute command ["+command+"] has some error!");  
292 - }  
293 - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));  
294 - try {  
295 - while ((line = bufferedReader.readLine()) != null) {  
296 - sb.append(line + "\n");  
297 - }  
298 - } catch (IOException e) {  
299 - log.error("======== bufferedReader.readLine() has some error!");  
300 - }  
301 -  
302 - String pingResult=sb.toString();  
303 - /**  
304 - * 当执行结果出现下面字符说明已经执行完成。  
305 - * ping 通的时候 结果包含【min/avg/max/mdev】  
306 - * ping 不通的时候 结果包含【100% packet loss】  
307 - */  
308 - if(pingResult.contains("100% packet loss") || (pingResult.contains("min/avg/max/mdev"))){  
309 - process.destroy();  
310 - log.info("execute command ["+command+"] finish!");  
311 - }  
312 -  
313 -  
314 - String os = System.getProperty("os.name").toLowerCase();  
315 - log.info("------------ operator system is :" + os);  
316 -  
317 - // 解析command命令结果,包含【100% packet loss】 意味着ping不通,返回 false。  
318 - if(os.indexOf("linux") >= 0){  
319 - if (!StringUtils.isEmpty(pingResult)) {  
320 - if(!pingResult.contains("100% packet loss")){  
321 - flag = true;  
322 - }  
323 - }  
324 - }  
325 - return flag;  
326 - }  
327 -  
328 -  
329 - /**  
330 - * 添加已经发送的告警信息。  
331 - * @param bean,取出对象中的ID与IP,外加时间(年月日)  
332 - */  
333 - public void addSendedEvent(DowntimeBean bean){  
334 -  
335 - }  
336 -  
337 -}