diff --git a/config/sqlmap.xml b/config/sqlmap.xml
index 083e984..73af129 100644
--- a/config/sqlmap.xml
+++ b/config/sqlmap.xml
@@ -59,5 +59,8 @@
 	<sqlMap resource="com/sitech/topo/db/maps/TbTopoHostProcessListenMap.xml" />
 	<sqlMap resource="com/sitech/topo/db/maps/TbTopoHostProcessMap.xml" />
 	<sqlMap resource="com/sitech/topo/db/maps/TbTopoHostProcessLinkMap.xml" />
-	
+	<sqlMap resource="com/sitech/database/maps/TbTopoPhysicalDeviceMap.xml" />
+	<sqlMap resource="com/sitech/database/maps/DowntimeMap.xml" />
+	<sqlMap resource="com/sitech/database/maps/DowntimeMapHistory.xml" />
+
 </sqlMapConfig>
diff --git a/db/mydb.script b/db/mydb.script
index 6dcd27f..b664e79 100644
--- a/db/mydb.script
+++ b/db/mydb.script
@@ -31,6 +31,9 @@ CREATE MEMORY TABLE TB_TMP_INTERFACE(IP_ADDR VARCHAR(64),IF_INDEX VARCHAR(32),IF
 CREATE MEMORY TABLE TB_CFG_SNMP_PRI_KPI_CONVERT(KPI_ID VARCHAR(20) NOT NULL,SYS_OBJECT_ID VARCHAR(512) NOT NULL,EXPRESSION VARCHAR(128) NOT NULL)
 CREATE MEMORY TABLE TB_CFG_SNMP_PRI_OID(SYS_OBJECT_ID VARCHAR(512),NAME VARCHAR(32),OID VARCHAR(512))
 CREATE MEMORY TABLE TB_CFG_OID_MIB(GUID VARCHAR(37) NOT NULL PRIMARY KEY,KPI_ID VARCHAR(20) NOT NULL,UNIT_ID VARCHAR(255),OID VARCHAR(100))
+CREATE MEMORY TABLE TB_TOPO_PHYSICAL_DEVICE(DEVICE_ID VARCHAR(50),DEVICE_IP VARCHAR(30),DEVICE_ALIAS VARCHAR(100),DEVICE_CATALOG VARCHAR(100),DEVICE_CNAME VARCHAR(100),KBP_CLASS VARCHAR(100),DEVICE_DESC VARCHAR(500),DEVICE_ROOM VARCHAR(100),DEVICE_RACK VARCHAR(100),CREATE_DATE TIMESTAMP)
+CREATE MEMORY TABLE TB_DOWNTIME_HOST(DEVICE_ID VARCHAR(50),DEVICE_IP VARCHAR(30),DEVICE_ALIAS VARCHAR(100),KBP_CLASS VARCHAR(100),PROTOCOL VARCHAR(10),PROTOCOL_PORT VARCHAR(10),USER_NAME VARCHAR(50),PASSWORD VARCHAR(100),CREATE_DATE TIMESTAMP)
+CREATE MEMORY TABLE TB_DOWNTIME_HOST_HISTORY(DEVICE_ID VARCHAR(50),DEVICE_IP VARCHAR(30),CREATE_DATE VARCHAR(10))
 CREATE USER SA PASSWORD ""
 GRANT DBA TO SA
 SET WRITE_DELAY 20
@@ -67,6 +70,50 @@ INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.20
 INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.77','(Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL)*100')
 INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.23.98','Double.parseDouble(CPU_USAGE)')
 INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.23.98','(Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL)*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.923','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.923','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.340','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.340','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.864','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.864','(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_USED2))/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_FREE2))')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.516','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.516','(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_USED2))/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_FREE2))')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.876','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.876','Double.parseDouble(MEM_USED1)/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1))')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.45','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.45','Double.parseDouble(MEM_USED1)/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1))')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.914','(Double.parseDouble(CPU_USAGE1)+Double.parseDouble(CPU_USAGE2)+Double.parseDouble(CPU_USAGE3)+Double.parseDouble(CPU_USAGE4)+Double.parseDouble(CPU_USAGE5)+Double.parseDouble(CPU_USAGE6))/6')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.914','(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_USED3)+Double.parseDouble(MEM_USED4))/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_FREE2)+Double.parseDouble(MEM_USED3)+Double.parseDouble(MEM_FREE3)+Double.parseDouble(MEM_USED4)+Double.parseDouble(MEM_FREE4))')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.1198','(Double.parseDouble(CPU_USAGE1)+Double.parseDouble(CPU_USAGE2)+Double.parseDouble(CPU_USAGE3)+Double.parseDouble(CPU_USAGE4)+Double.parseDouble(CPU_USAGE5)+Double.parseDouble(CPU_USAGE6))/6')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.1198','(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_USED3)+Double.parseDouble(MEM_USED4))/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_FREE2)+Double.parseDouble(MEM_USED3)+Double.parseDouble(MEM_FREE3)+Double.parseDouble(MEM_USED4)+Double.parseDouble(MEM_FREE4))')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.3224.1.16','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.3224.1.16','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.3224.1.9','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.3224.1.9','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.3375.2.1.3.4.6','(Double.parseDouble(CPU_SYSTEM)+Double.parseDouble(CPU_USER))/2')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.3375.2.1.3.4.6','((Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL))*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.170.3','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.170.3','(Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL)*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.170.1','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.170.1','(Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL)*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.170.2','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.170.2','(Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL)*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.310','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.310','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.400','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.400','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.283','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.283','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.501','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.501','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.925','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.925','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.25506.1.391','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.25506.1.391','Double.parseDouble(MEM_USED)/Double.parseDouble(MEM_TOTAL)*100')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.23.39','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.23.39','Double.parseDouble(MEM_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.968','Double.parseDouble(CPU_USAGE)')
+INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.968','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.110','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.110','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.110','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
@@ -118,134 +165,90 @@ INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.77','MEM_TOTAL','WALK
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.923','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.923','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.923','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.923','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.923','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.340','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.340','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.340','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.340','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.340','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.864','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')      
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.864','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.864','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.864','MEM_USED2','1.3.6.1.4.1.9.9.48.1.1.1.5.2')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.864','MEM_FREE2','1.3.6.1.4.1.9.9.48.1.1.1.6.2')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.516','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.516','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.516','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.516','MEM_USED2','1.3.6.1.4.1.9.9.48.1.1.1.5.2')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.516','MEM_FREE2','1.3.6.1.4.1.9.9.48.1.1.1.6.2')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.876','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.876','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.876','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.45','MEM_FREE1','1.3.6.1.4.1.2011.2.2.5.2.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.45','MEM_USED1','1.3.6.1.4.1.2011.2.2.5.1.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.45','CPU_USAGE','1.3.6.1.4.1.2011.2.2.4.12.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3224.1.16','MEM_FREE','.1.3.6.1.4.1.3224.16.2.2.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3224.1.16','MEM_USED','1.3.6.1.4.1.3224.16.2.1.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3224.1.16','CPU_USAGE','1.3.6.1.4.1.3224.16.1.1.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3224.1.9','MEM_FREE','.1.3.6.1.4.1.3224.16.2.2.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3224.1.9','MEM_USED','1.3.6.1.4.1.3224.16.2.1.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3224.1.9','CPU_USAGE','1.3.6.1.4.1.3224.16.1.1.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','MEM_USED2','1.3.6.1.4.1.9.9.48.1.1.1.5.6')                                     
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','MEM_USED3','1.3.6.1.4.1.9.9.48.1.1.1.5.7')                                     
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','MEM_USED4','1.3.6.1.4.1.9.9.48.1.1.1.5.8')                                     
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','MEM_FREE2','1.3.6.1.4.1.9.9.48.1.1.1.6.6')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','MEM_FREE3','1.3.6.1.4.1.9.9.48.1.1.1.6.7')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','MEM_FREE4','1.3.6.1.4.1.9.9.48.1.1.1.6.8')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','CPU_USAGE1','1.3.6.1.4.1.9.9.109.1.1.1.1.4.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','CPU_USAGE2','1.3.6.1.4.1.9.9.109.1.1.1.1.4.2')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','CPU_USAGE3','1.3.6.1.4.1.9.9.109.1.1.1.1.4.3')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','CPU_USAGE4','1.3.6.1.4.1.9.9.109.1.1.1.1.4.4')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','CPU_USAGE5','1.3.6.1.4.1.9.9.109.1.1.1.1.4.5')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.914','CPU_USAGE6','1.3.6.1.4.1.9.9.109.1.1.1.1.4.6')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','MEM_USED2','1.3.6.1.4.1.9.9.48.1.1.1.5.6')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','MEM_USED3','1.3.6.1.4.1.9.9.48.1.1.1.5.7')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','MEM_FREE2','1.3.6.1.4.1.9.9.48.1.1.1.6.6')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','MEM_FREE3','1.3.6.1.4.1.9.9.48.1.1.1.6.7')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','CPU_USAGE1','1.3.6.1.4.1.9.9.109.1.1.1.1.4.1')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','CPU_USAGE5','1.3.6.1.4.1.9.9.109.1.1.1.1.4.5')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.9.1.1198','CPU_USAGE6','1.3.6.1.4.1.9.9.109.1.1.1.1.4.6')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3375.2.1.3.4.6','MEM_TOTAL','.1.3.6.1.4.1.2021.4.5.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3375.2.1.3.4.6','MEM_FREE','.1.3.6.1.4.1.2021.4.6.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3375.2.1.3.4.6','CPU_SYSTEM','.1.3.6.1.4.1.2021.11.10.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.3375.2.1.3.4.6','CPU_USER','.1.3.6.1.4.1.2021.11.9.0')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.9.1.864','Double.parseDouble(CPU_USAGE)')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.9.1.864','(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_USED2))/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_FREE2))')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.9.1.516','Double.parseDouble(CPU_USAGE)')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.9.1.516','(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_USED2))/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_FREE2))')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.9.1.876','Double.parseDouble(CPU_USAGE)')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.9.1.876','Double.parseDouble(MEM_USED1)/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1))')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.2011.2.45','Double.parseDouble(CPU_USAGE)')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.2011.2.45','Double.parseDouble(MEM_USED1)/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1))')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.9.1.914','(Double.parseDouble(CPU_USAGE1)+Double.parseDouble(CPU_USAGE2)+Double.parseDouble(CPU_USAGE3)+Double.parseDouble(CPU_USAGE4)+Double.parseDouble(CPU_USAGE5)+Double.parseDouble(CPU_USAGE6))/6')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.9.1.914','(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_USED3)+Double.parseDouble(MEM_USED4))/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_FREE2)+Double.parseDouble(MEM_USED3)+Double.parseDouble(MEM_FREE3)+Double.parseDouble(MEM_USED4)+Double.parseDouble(MEM_FREE4))')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.9.1.1198','(Double.parseDouble(CPU_USAGE1)+Double.parseDouble(CPU_USAGE2)+Double.parseDouble(CPU_USAGE3)+Double.parseDouble(CPU_USAGE4)+Double.parseDouble(CPU_USAGE5)+Double.parseDouble(CPU_USAGE6))/6')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.9.1.1198','(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_USED3)+Double.parseDouble(MEM_USED4))/(Double.parseDouble(MEM_USED1)+Double.parseDouble(MEM_FREE1)+Double.parseDouble(MEM_USED2)+Double.parseDouble(MEM_FREE2)+Double.parseDouble(MEM_USED3)+Double.parseDouble(MEM_FREE3)+Double.parseDouble(MEM_USED4)+Double.parseDouble(MEM_FREE4))')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.3224.1.16','Double.parseDouble(CPU_USAGE)')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.3224.1.16','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.3224.1.9','Double.parseDouble(CPU_USAGE)')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.3224.1.9','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-06','1.3.6.1.4.1.3375.2.1.3.4.6','(Double.parseDouble(CPU_SYSTEM)+Double.parseDouble(CPU_USER))/2')
-insert into TB_CFG_SNMP_PRI_KPI_CONVERT values('PM-00-02-001-07','1.3.6.1.4.1.3375.2.1.3.4.6','((Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL))*100')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.3','MEM_FREE','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.3.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.3','MEM_TOTAL','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.2.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.3','CPU_USAGE','WALK:1.3.6.1.4.1.2011.6.3.4.1.2.0')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.170.3','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.170.3','(Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL)*100')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.1','MEM_FREE','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.3.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.1','MEM_TOTAL','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.2.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.1','CPU_USAGE','WALK:1.3.6.1.4.1.2011.6.3.4.1.2.0')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.170.1','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.170.1','(Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL)*100')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.2','MEM_FREE','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.3.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.2','MEM_TOTAL','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.2.0')
-insert into TB_CFG_SNMP_PRI_OID values('1.3.6.1.4.1.2011.2.170.2','CPU_USAGE','WALK:1.3.6.1.4.1.2011.6.3.4.1.2.0')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.170.2','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.170.2','(Double.parseDouble(MEM_TOTAL)-Double.parseDouble(MEM_FREE))/Double.parseDouble(MEM_TOTAL)*100')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.864','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.864','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.864','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.864','MEM_USED2','1.3.6.1.4.1.9.9.48.1.1.1.5.2')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.864','MEM_FREE2','1.3.6.1.4.1.9.9.48.1.1.1.6.2')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.516','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.516','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.516','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.516','MEM_USED2','1.3.6.1.4.1.9.9.48.1.1.1.5.2')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.516','MEM_FREE2','1.3.6.1.4.1.9.9.48.1.1.1.6.2')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.876','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.876','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.876','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.45','MEM_FREE1','1.3.6.1.4.1.2011.2.2.5.2.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.45','MEM_USED1','1.3.6.1.4.1.2011.2.2.5.1.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.45','CPU_USAGE','1.3.6.1.4.1.2011.2.2.4.12.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3224.1.16','MEM_FREE','.1.3.6.1.4.1.3224.16.2.2.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3224.1.16','MEM_USED','1.3.6.1.4.1.3224.16.2.1.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3224.1.16','CPU_USAGE','1.3.6.1.4.1.3224.16.1.1.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3224.1.9','MEM_FREE','.1.3.6.1.4.1.3224.16.2.2.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3224.1.9','MEM_USED','1.3.6.1.4.1.3224.16.2.1.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3224.1.9','CPU_USAGE','1.3.6.1.4.1.3224.16.1.1.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','MEM_USED2','1.3.6.1.4.1.9.9.48.1.1.1.5.6')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','MEM_USED3','1.3.6.1.4.1.9.9.48.1.1.1.5.7')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','MEM_USED4','1.3.6.1.4.1.9.9.48.1.1.1.5.8')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','MEM_FREE2','1.3.6.1.4.1.9.9.48.1.1.1.6.6')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','MEM_FREE3','1.3.6.1.4.1.9.9.48.1.1.1.6.7')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','MEM_FREE4','1.3.6.1.4.1.9.9.48.1.1.1.6.8')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','CPU_USAGE1','1.3.6.1.4.1.9.9.109.1.1.1.1.4.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','CPU_USAGE2','1.3.6.1.4.1.9.9.109.1.1.1.1.4.2')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','CPU_USAGE3','1.3.6.1.4.1.9.9.109.1.1.1.1.4.3')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','CPU_USAGE4','1.3.6.1.4.1.9.9.109.1.1.1.1.4.4')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','CPU_USAGE5','1.3.6.1.4.1.9.9.109.1.1.1.1.4.5')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.914','CPU_USAGE6','1.3.6.1.4.1.9.9.109.1.1.1.1.4.6')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','MEM_USED1','1.3.6.1.4.1.9.9.48.1.1.1.5.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','MEM_USED2','1.3.6.1.4.1.9.9.48.1.1.1.5.6')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','MEM_USED3','1.3.6.1.4.1.9.9.48.1.1.1.5.7')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','MEM_FREE1','1.3.6.1.4.1.9.9.48.1.1.1.6.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','MEM_FREE2','1.3.6.1.4.1.9.9.48.1.1.1.6.6')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','MEM_FREE3','1.3.6.1.4.1.9.9.48.1.1.1.6.7')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','CPU_USAGE1','1.3.6.1.4.1.9.9.109.1.1.1.1.4.1')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','CPU_USAGE5','1.3.6.1.4.1.9.9.109.1.1.1.1.4.5')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.1198','CPU_USAGE6','1.3.6.1.4.1.9.9.109.1.1.1.1.4.6')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3375.2.1.3.4.6','MEM_TOTAL','.1.3.6.1.4.1.2021.4.5.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3375.2.1.3.4.6','MEM_FREE','.1.3.6.1.4.1.2021.4.6.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3375.2.1.3.4.6','CPU_SYSTEM','.1.3.6.1.4.1.2021.11.10.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.3375.2.1.3.4.6','CPU_USER','.1.3.6.1.4.1.2021.11.9.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.3','MEM_FREE','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.3.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.3','MEM_TOTAL','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.2.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.3','CPU_USAGE','WALK:1.3.6.1.4.1.2011.6.3.4.1.2.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.1','MEM_FREE','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.3.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.1','MEM_TOTAL','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.2.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.1','CPU_USAGE','WALK:1.3.6.1.4.1.2011.6.3.4.1.2.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.2','MEM_FREE','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.3.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.2','MEM_TOTAL','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.2.0')
+INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.170.2','CPU_USAGE','WALK:1.3.6.1.4.1.2011.6.3.4.1.2.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.310','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.310','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.310','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.310','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.310','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.400','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.400','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.400','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.400','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.400','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.283','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.283','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.283','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.283','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.283','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.501','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.501','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.501','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.23.98','CPU_USAGE','WALK:1.3.6.1.4.1.2011.6.3.4.1.2')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.23.98','MEM_FREE','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.3')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.23.98','MEM_TOTAL','WALK:1.3.6.1.4.1.2011.6.3.5.1.1.2')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.501','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.501','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.925','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.925','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.925','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.925','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.925','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.25506.1.391','CPU_USAGE','WALK:1.3.6.1.4.1.25506.2.6.1.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.25506.1.391','MEM_USED','WALK:1.3.6.1.4.1.25506.2.6.1.1.1.1.8')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.25506.1.391','MEM_TOTAL','WALK:1.3.6.1.4.1.25506.2.6.1.1.1.1.10')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.25506.1.391','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.25506.1.391','Double.parseDouble(MEM_USED)/Double.parseDouble(MEM_TOTAL)*100')INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.25506.1.391','MEM_USED','WALK:1.3.6.1.4.1.25506.2.6.1.1.1.1.8')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.23.39','CPU_USAGE','WALK:1.3.6.1.4.1.2011.6.7.1.2')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.2011.2.23.39','MEM_USAGE','WALK:1.3.6.1.4.1.2011.6.1.1.1.2')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.2011.2.23.39','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.2011.2.23.39','Double.parseDouble(MEM_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-06','1.3.6.1.4.1.9.1.968','Double.parseDouble(CPU_USAGE)')
-INSERT INTO TB_CFG_SNMP_PRI_KPI_CONVERT VALUES('PM-00-02-001-07','1.3.6.1.4.1.9.1.968','Double.parseDouble(MEM_USED)/(Double.parseDouble(MEM_USED)+Double.parseDouble(MEM_FREE))*100')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.968','CPU_USAGE','1.3.6.1.4.1.9.2.1.57.0')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.968','MEM_FREE','WALK:1.3.6.1.4.1.9.9.48.1.1.1.6')
 INSERT INTO TB_CFG_SNMP_PRI_OID VALUES('1.3.6.1.4.1.9.1.968','MEM_USED','WALK:1.3.6.1.4.1.9.9.48.1.1.1.5')
diff --git a/libs/messageObject.jar b/libs/messageObject.jar
index 07b55a1..4e33d73 100644
Binary files a/libs/messageObject.jar and b/libs/messageObject.jar differ
diff --git a/src/com/sitech/database/maps/DowntimeMap.xml b/src/com/sitech/database/maps/DowntimeMap.xml
new file mode 100644
index 0000000..9485535
--- /dev/null
+++ b/src/com/sitech/database/maps/DowntimeMap.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
+    "http://www.ibatis.com/dtd/sql-map-2.dtd">
+
+<sqlMap namespace="TB_DOWNTIME_HOST">
+	<typeAlias alias="downtimeBean" type="com.sitech.ismp.check.downtime.DowntimeBean" />
+
+	<select id="getDowntimeByIp" resultClass="downtimeBean" parameterClass="java.util.HashMap">
+		SELECT
+			DEVICE_ID,
+			DEVICE_IP,
+			DEVICE_ALIAS,
+			KBP_CLASS,
+			PROTOCOL,
+			PROTOCOL_PORT,
+			USER_NAME,
+			PASSWORD,
+			CREATE_DATE
+		FROM TB_DOWNTIME_HOST
+		<isNotEmpty property="DEVICE_IP">
+			WHERE DEVICE_IP IN #DEVICE_IP#
+		</isNotEmpty>
+
+	</select>
+
+	<insert id="addDowntimeHost" parameterClass="downtimeBean">
+		INSERT INTO TB_DOWNTIME_HOST (
+			DEVICE_ID,
+			DEVICE_IP,
+			DEVICE_ALIAS,
+			KBP_CLASS,
+			PROTOCOL,
+			PROTOCOL_PORT,
+			USER_NAME,
+			PASSWORD,
+			CREATE_DATE)
+		VALUES (
+		    #DEVICE_ID#,
+			#DEVICE_IP#,
+			#DEVICE_ALIAS#,
+		    #KBP_CLASS#,
+			#PROTOCOL#,
+			#PROTOCOL_PORT#,
+			#USER_NAME#,
+			#PASSWORD#,
+			#CREATE_DATE#);
+	</insert>
+
+
+	<delete id="deleteDowntimeHostByIp" parameterClass="java.lang.String">
+		DELETE FROM TB_DOWNTIME_HOST WHERE DEVICE_IP=#ip#
+	</delete>
+
+	<update id="updateDowntimeHostByIp" parameterClass="downtimeBean">
+		UPDATE TB_DOWNTIME_HOST SET
+			<isNotEmpty property="PROTOCOL_PORT">
+				PROTOCOL_PORT = #PROTOCOL_PORT#,
+			</isNotEmpty>
+			<isNotEmpty property="USER_NAME">
+				USER_NAME = #USER_NAME#,
+			</isNotEmpty>
+			<isNotEmpty property="PASSWORD">
+				PASSWORD = #PASSWORD#,
+			</isNotEmpty>
+			DEVICE_ALIAS = #DEVICE_ALIAS#
+		WHERE DEVICE_IP = #DEVICE_IP#
+	</update>
+
+</sqlMap>
diff --git a/src/com/sitech/database/maps/DowntimeMapHistory.xml b/src/com/sitech/database/maps/DowntimeMapHistory.xml
new file mode 100644
index 0000000..c9e6b93
--- /dev/null
+++ b/src/com/sitech/database/maps/DowntimeMapHistory.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
+    "http://www.ibatis.com/dtd/sql-map-2.dtd">
+
+<sqlMap namespace="TB_DOWNTIME_HOST_HISTORY">
+	<typeAlias alias="downtimeHistoryBean" type="com.sitech.ismp.check.downtime.DowntimeHistoryBean" />
+
+	<select id="getDowntimeHistoryByIp" resultClass="downtimeHistoryBean" parameterClass="java.util.HashMap">
+		SELECT
+			DEVICE_ID,DEVICE_IP,CREATE_DATE	FROM
+		TB_DOWNTIME_HOST_HISTORY
+			WHERE DEVICE_IP = #DEVICE_IP# AND CREATE_DATE= #CREATE_DATE#
+
+	</select>
+
+	<insert id="addDowntimeHistory" parameterClass="downtimeHistoryBean">
+		INSERT INTO TB_DOWNTIME_HOST_HISTORY (
+			DEVICE_ID, DEVICE_IP, CREATE_DATE)
+		VALUES (#DEVICE_ID#, #DEVICE_IP#, #CREATE_DATE#);
+	</insert>
+
+
+	<delete id="deleteDowntimeHistory" parameterClass="java.lang.String">
+		DELETE FROM TB_DOWNTIME_HOST_HISTORY
+	</delete>
+
+</sqlMap>
diff --git a/src/com/sitech/database/maps/TbTopoPhysicalDeviceMap.xml b/src/com/sitech/database/maps/TbTopoPhysicalDeviceMap.xml
new file mode 100644
index 0000000..3d35ada
--- /dev/null
+++ b/src/com/sitech/database/maps/TbTopoPhysicalDeviceMap.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE sqlMap
+    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
+    "http://www.ibatis.com/dtd/sql-map-2.dtd">
+
+<sqlMap namespace="TB_TOPO_PHYSICAL_DEVICE">
+	<typeAlias alias="tbTopoPhysicalDevice" type="com.sitech.snmptrap.TbTopoPhysicalDeviceBean" />
+
+	<select id="queryTbTopoPhysicalDevice" resultClass="tbTopoPhysicalDevice" parameterClass="java.util.HashMap">
+		SELECT
+			DEVICE_ID,
+			DEVICE_IP,
+			DEVICE_ALIAS,
+			DEVICE_CATALOG,
+			DEVICE_CNAME,
+		    KBP_CLASS,
+			DEVICE_DESC,
+			DEVICE_ROOM,
+			DEVICE_RACK,
+			CREATE_DATE
+		FROM TB_TOPO_PHYSICAL_DEVICE
+		<isNotEmpty property="DEVICE_IP">
+			WHERE DEVICE_IP IN #DEVICE_IP#
+		</isNotEmpty>
+
+	</select>
+
+	<insert id="addTbTopoPhysicalDevice" parameterClass="tbTopoPhysicalDevice">
+		INSERT INTO TB_TOPO_PHYSICAL_DEVICE (
+			DEVICE_ID,
+			DEVICE_IP,
+			DEVICE_ALIAS,
+			DEVICE_CATALOG,
+			DEVICE_CNAME,
+		    KBP_CLASS,
+			DEVICE_DESC,
+			DEVICE_ROOM,
+			DEVICE_RACK,
+			CREATE_DATE)
+		VALUES (
+		    #DEVICE_ID#,
+			#DEVICE_IP#,
+			#DEVICE_ALIAS#,
+			#DEVICE_CATALOG#,
+			#DEVICE_CNAME#,
+		    #KBP_CLASS#,
+			#DEVICE_DESC#,
+			#DEVICE_ROOM#,
+			#DEVICE_RACK#,
+			#CREATE_DATE#);
+
+	</insert>
+
+
+	<delete id="deleteTbTopoPhysicalDevice" parameterClass="java.lang.String">
+		delete from TB_TOPO_PHYSICAL_DEVICE WHERE DEVICE_ID=#deviceId#
+	</delete>
+	<delete id="deletePhysicalDeviceByIp" parameterClass="java.lang.String">
+		delete from TB_TOPO_PHYSICAL_DEVICE where DEVICE_IP=#ip#
+	</delete>
+
+	<update id="updateTbTopoPhysicalDevice" parameterClass="tbTopoPhysicalDevice">
+		UPDATE TB_TOPO_PHYSICAL_DEVICE SET
+		    <isNotEmpty property="DEVICE_DESC">
+				DEVICE_DESC = #DEVICE_DESC#,
+			</isNotEmpty>
+			<isNotEmpty property="DEVICE_ROOM">
+				DEVICE_ROOM = #DEVICE_ROOM#,
+			</isNotEmpty>
+			<isNotEmpty property="DEVICE_RACK">
+				DEVICE_RACK = #DEVICE_RACK#,
+			</isNotEmpty>
+			DEVICE_ALIAS = #DEVICE_ALIAS#,
+			DEVICE_CNAME = #DEVICE_CNAME#
+		WHERE DEVICE_IP = #DEVICE_IP#
+	</update>
+
+</sqlMap>
diff --git a/src/com/sitech/ismp/check/downtime/DownTimeBean.java b/src/com/sitech/ismp/check/downtime/DownTimeBean.java
new file mode 100644
index 0000000..8cc7411
--- /dev/null
+++ b/src/com/sitech/ismp/check/downtime/DownTimeBean.java
@@ -0,0 +1,169 @@
+package com.sitech.ismp.check.downtime;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description:  宕机表对应的bean。
+ * @Package com.sitech.ismp.check.downtime
+ * @ClassName: com.sitech.ismp.check.downtime.DowntimeBean
+ * @date 2017年04月16日 13:30
+ */
+public class DowntimeBean implements Serializable{
+
+    //    设备ID
+    private String DEVICE_ID;
+    //    设备IP地址
+    private String DEVICE_IP;
+    //    设备别名
+    private String DEVICE_ALIAS;
+    //    kbp_class 设备的分类
+    private String KBP_CLASS;
+    //  连接协议(ssh/telnet)
+    private String PROTOCOL;
+    //  协议端口
+    private int PROTOCOL_PORT;
+    //  用户名
+    private String USER_NAME;
+    //  密码
+    private String PASSWORD;
+    //  创建日期
+    private Date CREATE_DATE;
+    //  ping IP 后的结果
+    private boolean pingState;
+    //  ping后进行ssh连接后的状态。
+    private boolean sshState;
+    //  告警级别 1 严重告警;2 重要告警
+    private int warningLevel;
+    //  ping后进行ssh连接后的结果,即重要告警还是严重告警。
+    private String warningResult;
+
+    private String unitId;
+
+    public String getDEVICE_ID() {
+        return DEVICE_ID;
+    }
+
+    public void setDEVICE_ID(String DEVICE_ID) {
+        this.DEVICE_ID = DEVICE_ID;
+    }
+
+    public String getDEVICE_IP() {
+        return DEVICE_IP;
+    }
+
+    public void setDEVICE_IP(String DEVICE_IP) {
+        this.DEVICE_IP = DEVICE_IP;
+    }
+
+    public String getDEVICE_ALIAS() {
+        return DEVICE_ALIAS;
+    }
+
+    public void setDEVICE_ALIAS(String DEVICE_ALIAS) {
+        this.DEVICE_ALIAS = DEVICE_ALIAS;
+    }
+
+    public String getKBP_CLASS() {
+        return KBP_CLASS;
+    }
+
+    public void setKBP_CLASS(String KBP_CLASS) {
+        this.KBP_CLASS = KBP_CLASS;
+    }
+
+    public String getPROTOCOL() {
+        return PROTOCOL;
+    }
+
+    public void setPROTOCOL(String PROTOCOL) {
+        this.PROTOCOL = PROTOCOL;
+    }
+
+    public int getPROTOCOL_PORT() {
+        return PROTOCOL_PORT;
+    }
+
+    public void setPROTOCOL_PORT(int PROTOCOL_PORT) {
+        this.PROTOCOL_PORT = PROTOCOL_PORT;
+    }
+
+    public String getUSER_NAME() {
+        return USER_NAME;
+    }
+
+    public void setUSER_NAME(String USER_NAME) {
+        this.USER_NAME = USER_NAME;
+    }
+
+    public String getPASSWORD() {
+        return PASSWORD;
+    }
+
+    public void setPASSWORD(String PASSWORD) {
+        this.PASSWORD = PASSWORD;
+    }
+
+    public Date getCREATE_DATE() {
+        return CREATE_DATE;
+    }
+
+    public void setCREATE_DATE(Date CREATE_DATE) {
+        this.CREATE_DATE = CREATE_DATE;
+    }
+
+    public boolean isPingState() {
+        return pingState;
+    }
+
+    public void setPingState(boolean pingState) {
+        this.pingState = pingState;
+    }
+
+    public boolean isSshState() {
+        return sshState;
+    }
+
+    public void setSshState(boolean sshState) {
+        this.sshState = sshState;
+    }
+
+    public String getWarningResult() {
+        return warningResult;
+    }
+
+    public void setWarningResult(String warningResult) {
+        this.warningResult = warningResult;
+    }
+
+    public int getWarningLevel() {
+        return warningLevel;
+    }
+
+    public void setWarningLevel(int warningLevel) {
+        this.warningLevel = warningLevel;
+    }
+
+    public String getUnitId() {
+        return unitId;
+    }
+
+    public void setUnitId(String unitId) {
+        this.unitId = unitId;
+    }
+
+    @Override
+    public String toString() {
+        return "DowntimeBean{" +
+                "  DEVICE_IP='" + DEVICE_IP + '\'' +
+                ", pingState=" + pingState +
+                ", sshState=" + sshState +
+                ", warningResult='" + warningResult + '\'' +
+                ", DEVICE_ALIAS='" + DEVICE_ALIAS + '\'' +
+                ", USER_NAME='" + USER_NAME + '\'' +
+                ", warningLevel=" + warningLevel +
+                '}';
+    }
+
+}
diff --git a/src/com/sitech/ismp/check/downtime/Downtime.java b/src/com/sitech/ismp/check/downtime/Downtime.java
new file mode 100644
index 0000000..2c7d7db
--- /dev/null
+++ b/src/com/sitech/ismp/check/downtime/Downtime.java
@@ -0,0 +1,72 @@
+package com.sitech.ismp.check.downtime;
+
+import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;
+import org.apache.log4j.Logger;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description:  宕机检测MBean实现类
+ * @Package com.sitech.ismp.check.downtime
+ * @ClassName: com.sitech.ismp.check.downtime.Downtime
+ * @date 2017年04月15日 13:43
+ */
+public class Downtime implements DowntimeMBean {
+
+    private static Logger log= Logger.getLogger(Downtime.class);
+
+
+    DowntimeDao dao=new DowntimeDao();
+    DowntimeHistoryDao historyDao=new DowntimeHistoryDao();
+    SimpleDateFormat formaF=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    /**
+     * 检查主机的连接状态。如果连接异常,需要每隔30秒连续连接3次,如果3次连接都异常,则视为主机宕机,发送严重告警。
+     * 1 将需要监控的设备添加到内存数据库中。
+     * 2 对表中的主机进行ping操作。
+     * 3 对表中的主机进行SSH登录认证
+     * 4 发送告警信息
+     * @param params
+     * @return
+     */
+    @Override
+    public Vector<TblATO_KPIDETAIL> checkConnectState(HashMap<String,String> params){
+        dao.addDowntimeHost(params);
+        String ipAddr=params.get("DEVICE_IP");
+        boolean flag=isNeedExecuteCheckMethod(ipAddr);
+        if(flag){
+            log.info("*************"+ formaF.format(new Date()) +" execute method checkConnectState .................");
+            // 将需要监控的设备添加到内存数据库中。
+            DowntimeBean bean=dao.map2DowntimeBean(params);
+            DowntimeServer server=new DowntimeServer(bean);
+            // 包括 2-4 需要执行的内容。 如果监控的设备很多的时候,使用单线程可能一个监控周期都不能ping完所有的主机。
+            server.run();
+            log.info("@@@@@@@@@@@@@@@@@@@@@@***** finish run method *****@@@@@@@@@@@@@@@@@@@@@@@@@@@");
+            log.info(bean.toString());
+        }
+        Vector<TblATO_KPIDETAIL> bean = new Vector<TblATO_KPIDETAIL>();
+        return bean;
+    }
+
+
+
+    /**
+     * 是否执行checkConnectState 方法。
+     * 判断当前IP是否发送过告警信息。每天一个主机只发送1条告警信息。
+     * @return
+     */
+    private boolean isNeedExecuteCheckMethod(String ipAddr){
+        boolean flag=true; // 是否该ipAddr已经发送过消息。
+        SimpleDateFormat formaF=new SimpleDateFormat("yyyy-MM-dd");
+        String currentDay=formaF.format(new Date());
+        List<DowntimeHistoryBean> list=historyDao.getDowntimeHistoryByIp(ipAddr,currentDay);
+        if(null !=list && list.size()>0){
+            flag=false;
+        }
+        return flag;
+    }
+
+
+}
diff --git a/src/com/sitech/ismp/check/downtime/DowntimeDao.java b/src/com/sitech/ismp/check/downtime/DowntimeDao.java
new file mode 100644
index 0000000..6acf601
--- /dev/null
+++ b/src/com/sitech/ismp/check/downtime/DowntimeDao.java
@@ -0,0 +1,89 @@
+package com.sitech.ismp.check.downtime;
+
+import com.sitech.database.dao.BaseDao;
+import org.apache.log4j.Logger;
+
+import java.sql.SQLException;
+import java.util.*;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description:  宕机检测MBean对应dao类
+ * @Package com.sitech.ismp.check.downtime
+ * @ClassName: com.sitech.ismp.check.downtime.DowntimeDao
+ * @date 2017年04月16日 14:15
+ */
+public class DowntimeDao extends BaseDao {
+
+    private static Logger log=Logger.getLogger(DowntimeDao.class);
+
+    /**
+     * 添加需要监控宕机情况的设备,如果该设备已经存在,则修改。
+     */
+    public void addDowntimeHost(HashMap<String,String> params){
+        DowntimeBean downtimeBean=map2DowntimeBean(params);
+        addDowntimeHost(downtimeBean);
+    }
+
+    public void addDowntimeHost(DowntimeBean downtimeBean){
+        try {
+            int updateSum = sqlmapClient.update("updateDowntimeHostByIp",downtimeBean);
+            if(updateSum == 0){
+                sqlmapClient.insert("addDowntimeHost", downtimeBean);
+            }
+        } catch (Exception e) {
+            error.error("Exception while addDowntimeHost.", e);
+        }
+    }
+
+
+    /**
+     * 根据IP删除对应的记录。
+     * @param ip
+     * @return
+     */
+    public int deleteDowntimeHostByIp(String ip){
+        try {
+            return sqlmapClient.delete("deleteDowntimeHostByIp", ip);
+        } catch (Exception e) {
+            error.error("Exception while deleteDowntimeHostByIp.", e);
+        }
+        return -1;
+    }
+
+    /**
+     * 根据IP查询对应的记录。
+     * @param deviceIp
+     * @return
+     */
+    public List<DowntimeBean> getDowntimeByIp(String deviceIp){
+        HashMap<String,String> param=new HashMap<String, String>();
+        param.put("DEVICE_IP",deviceIp);
+        List<DowntimeBean> beanList=new ArrayList<DowntimeBean>();
+        try {
+            beanList=sqlmapClient.queryForList("getDowntimeByIp", param);
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return beanList;
+    }
+
+    public DowntimeBean map2DowntimeBean(HashMap<String,String> params){
+        DowntimeBean bean=new DowntimeBean();
+        try {
+            bean.setDEVICE_ID(UUID.randomUUID().toString());
+            bean.setDEVICE_IP(params.get("DEVICE_IP"));
+            bean.setDEVICE_ALIAS(params.get("DEVICE_ALIAS"));
+            bean.setKBP_CLASS(params.get("KBP_CLASS") + "-99");
+            bean.setPROTOCOL(params.get("PROTOCOL"));
+            bean.setPROTOCOL_PORT(Integer.parseInt(params.get("PROTOCOL_PORT")));
+            bean.setUSER_NAME(params.get("USER_NAME"));
+            bean.setPASSWORD(params.get("PASSWORD"));
+            bean.setCREATE_DATE(new Date());
+        }catch (Exception e){
+            log.error("addDowntimeHost, write values to DowntimeBean has error!",e);
+        }
+        return bean;
+    }
+
+}
diff --git a/src/com/sitech/ismp/check/downtime/DowntimeHistoryBean.java b/src/com/sitech/ismp/check/downtime/DowntimeHistoryBean.java
new file mode 100644
index 0000000..dae48fc
--- /dev/null
+++ b/src/com/sitech/ismp/check/downtime/DowntimeHistoryBean.java
@@ -0,0 +1,50 @@
+package com.sitech.ismp.check.downtime;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description:  发送告警的历史记录bean。
+ * @Package com.sitech.ismp.check.downtime
+ * @ClassName: com.sitech.ismp.check.downtime.DowntimeHistoryBean
+ * @date 2017年04月19日 14:04
+ */
+public class DowntimeHistoryBean {
+    //    设备ID
+    private String DEVICE_ID;
+    //    设备IP地址
+    private String DEVICE_IP;
+    //    创建日期
+    private String CREATE_DATE;
+
+    public String getDEVICE_ID() {
+        return DEVICE_ID;
+    }
+
+    public void setDEVICE_ID(String DEVICE_ID) {
+        this.DEVICE_ID = DEVICE_ID;
+    }
+
+    public String getDEVICE_IP() {
+        return DEVICE_IP;
+    }
+
+    public void setDEVICE_IP(String DEVICE_IP) {
+        this.DEVICE_IP = DEVICE_IP;
+    }
+
+    public String getCREATE_DATE() {
+        return CREATE_DATE;
+    }
+
+    public void setCREATE_DATE(String CREATE_DATE) {
+        this.CREATE_DATE = CREATE_DATE;
+    }
+
+    @Override
+    public String toString() {
+        return "DowntimeHistoryBean{" +
+                "DEVICE_ID='" + DEVICE_ID + '\'' +
+                ", DEVICE_IP='" + DEVICE_IP + '\'' +
+                ", CREATE_DATE='" + CREATE_DATE + '\'' +
+                '}';
+    }
+}
diff --git a/src/com/sitech/ismp/check/downtime/DowntimeHistoryDao.java b/src/com/sitech/ismp/check/downtime/DowntimeHistoryDao.java
new file mode 100644
index 0000000..bdccb1a
--- /dev/null
+++ b/src/com/sitech/ismp/check/downtime/DowntimeHistoryDao.java
@@ -0,0 +1,65 @@
+package com.sitech.ismp.check.downtime;
+
+import com.sitech.database.dao.BaseDao;
+import org.apache.log4j.Logger;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description:  告警历史dao
+ * @Package com.sitech.ismp.check.downtime
+ * @ClassName: com.sitech.ismp.check.downtime.DowntimeHistoryDao
+ * @date 2017年04月19日 14:06
+ */
+public class DowntimeHistoryDao extends BaseDao {
+    private static Logger log=Logger.getLogger(DowntimeHistoryDao.class);
+
+    /**
+     * 添加告警信息
+     * @param bean
+     */
+    public void addDowntimeHistory(DowntimeHistoryBean bean){
+        try {
+            sqlmapClient.insert("addDowntimeHistory", bean);
+        } catch (SQLException e) {
+            log.error("Exception while addDowntimeHistory.",e);
+        }
+    }
+
+    /**
+     *
+     * @param deviceIp
+     * @param createDate
+     * @return
+     */
+    public List<DowntimeHistoryBean> getDowntimeHistoryByIp(String deviceIp,String createDate){
+        HashMap<String,String> param=new HashMap<String, String>();
+        param.put("DEVICE_IP",deviceIp);
+        param.put("CREATE_DATE",createDate);
+        List<DowntimeHistoryBean> beanList=new ArrayList<DowntimeHistoryBean>();
+        try {
+            beanList=sqlmapClient.queryForList("getDowntimeHistoryByIp", param);
+        } catch (SQLException e) {
+            e.printStackTrace();
+        }
+        return beanList;
+    }
+
+    /**
+     * 删除表中的所有数据。
+     * @return
+     */
+    public int deleteDowntimeHistory(){
+        try {
+            return sqlmapClient.delete("deleteDowntimeHistory", null);
+        } catch (Exception e) {
+            error.error("Exception while deleteDowntimeHistory.", e);
+        }
+        return -1;
+    }
+
+}
diff --git a/src/com/sitech/ismp/check/downtime/DowntimeMBean.java b/src/com/sitech/ismp/check/downtime/DowntimeMBean.java
new file mode 100644
index 0000000..e60735e
--- /dev/null
+++ b/src/com/sitech/ismp/check/downtime/DowntimeMBean.java
@@ -0,0 +1,24 @@
+package com.sitech.ismp.check.downtime;
+
+import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;
+
+import java.util.HashMap;
+import java.util.Vector;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description:  宕机检测MBean接口
+ * @Package com.sitech.ismp.check.downtime
+ * @ClassName: com.sitech.ismp.check.downtime.DowntimeMBean
+ * @date 2017年04月15日 13:42
+ */
+public interface DowntimeMBean {
+    /**
+     * 检查主机的连接状态。如果连接异常,需要每隔30秒连续连接3次,如果3次连接都异常,则视为主机宕机,发送严重告警。
+     * @param params
+     * @return
+     */
+    public Vector<TblATO_KPIDETAIL> checkConnectState(HashMap<String,String> params);
+
+
+}
diff --git a/src/com/sitech/ismp/check/downtime/DowntimeServer.java b/src/com/sitech/ismp/check/downtime/DowntimeServer.java
new file mode 100644
index 0000000..639f8e5
--- /dev/null
+++ b/src/com/sitech/ismp/check/downtime/DowntimeServer.java
@@ -0,0 +1,337 @@
+package com.sitech.ismp.check.downtime;
+
+import com.sitech.ismp.app.event.KPI2Event;
+import com.sitech.ismp.coll.basic.TblATO_EVENT;
+import com.sitech.util.Base62Util;
+import com.sitech.util.RandomGUID;
+import com.sitech.util.upload.RomoteController;
+import com.sitech.util.upload.SSHThread;
+import com.sitech.util.upload.TelnetThread;
+import org.apache.commons.lang.StringUtils;
+import org.apache.log4j.Logger;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Random;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description:  宕机检测MBean对应Server类。
+ *                ping的布尔结果 true:能ping通, false:ping不通
+ *                ssh连接的布尔结果 true:能ssh连接, false:ssh连接异常
+ * @Package com.sitech.ismp.check.downtime
+ * @ClassName: com.sitech.ismp.check.downtime.DowntimeServer
+ * @date 2017年04月12日 16:22
+ */
+public class DowntimeServer implements Runnable{
+
+    private static Logger log=Logger.getLogger(DowntimeServer.class);
+    private DowntimeBean bean;
+    DowntimeHistoryDao historyDao=new DowntimeHistoryDao();
+
+    public DowntimeServer(DowntimeBean bean){
+        this.bean=bean;
+    }
+
+    /**
+     * 1 对表中的主机进行ping操作。
+     * 2 对表中的主机进行SSH登录认证。
+     * 3 发送告警信息。
+     */
+    @Override
+    public void run(){
+        getPingResult(bean);
+        getSshResult(bean);
+        sendEvent2Workstation(bean);
+    }
+
+    /**
+     * 将每个IP ping后的结果设置到pingState属性上。
+     * @param bean
+     * @return
+     */
+    public void getPingResult(DowntimeBean bean){
+        String ipAddr=null;
+        log.info("============================== ping all parames ======================");
+        log.info(bean.toString());
+        ipAddr=bean.getDEVICE_IP();
+        boolean temp=pingIpAddress(ipAddr);
+        bean.setPingState(temp);
+
+    }
+
+    /**
+     * 进行SSH连接,并设置对应告警的内容。
+     * @param bean
+     * @return
+     */
+    public void getSshResult(DowntimeBean bean){
+        boolean pingState=bean.isPingState(); // true:能ping通, false:ping不通
+        log.info("========== pingState=== "+pingState+"==========");
+        boolean sshState=contentWithSsh(bean);
+        log.info("========== sshState=== "+sshState+"==========");
+        if(!pingState){ // ping 不通 false
+            if(!sshState){ // ssh 不能连接 严重告警
+                bean.setWarningLevel(1);
+                bean.setWarningResult(bean.getDEVICE_IP()+" 的主机连接异常,请检查网络是否正常或主机宕机!");
+                log.info("========== bean.setWarningResult sshState ="+sshState+",=ip is ["+bean.getDEVICE_IP()+"] host connect error");
+            }
+        }else{ //能ping 通
+            if(!sshState){ // ssh 不能连接 重要告警
+                bean.setWarningLevel(2);
+                bean.setWarningResult(bean.getDEVICE_IP()+" 的主机不能进行登录,请检查用户名或密码!!");
+                log.info("========== bean.setWarningResult sshState ="+sshState+",=ip is["+bean.getDEVICE_IP()+"] host login error");
+            }
+        }
+    }
+
+    /**
+     * 将告警信息发送到Workstation。
+     * 当ping的结果为false的时候才发送。
+     * @param bean
+     */
+    private void sendEvent2Workstation(DowntimeBean bean){
+        log.info("******************************************************");
+        log.info("*************** sendEvent2Workstation ****************");
+        log.info("******************************************************");
+        log.info(bean.toString());
+        if(!bean.isSshState()){
+            KPI2Event event=new KPI2Event();
+            TblATO_EVENT tblato_event = new TblATO_EVENT();
+            String eventId= RandomGUID.getRandomGUID();
+            try {
+                tblato_event.setEVENT_ID(eventId); // 随即生成一个GUID作为唯一键
+                tblato_event.setUNIT_ID(bean.getUnitId());  // UNIT_ID在页面显示的为平台类型。
+                tblato_event.setKPI_ID("FM-00-01-001-999");
+                tblato_event.setKPI_VALUE(bean.getWarningResult());
+                tblato_event.setEVENT_TITLE(bean.getWarningResult());
+                tblato_event.setEVENT_CLASS(bean.getWarningLevel()); // 告警级别
+                tblato_event.setCLL_TIME(new java.util.Date());
+                tblato_event.setGENERANT_TIME(new java.util.Date());
+                tblato_event.setCFG_GUID(RandomGUID.getRandomGUID());
+                log.info("hava finish set values to TblATO_EVENT!");
+            } catch (ParseException e) {
+                log.error("set values to TblATO_EVENT hava error!",e);
+            }
+            try {
+                event.sendEvent2Workstation(tblato_event);
+                addDowntimeHistory(bean);
+                log.info("have write object(TblATO_EVENT) to Workstation!");
+            } catch (Exception e) {
+                log.error("have write object(TblATO_EVENT) to Workstation have error!",e);
+            }
+        }
+    }
+
+
+    private void addDowntimeHistory(DowntimeBean bean){
+        DowntimeHistoryBean historyBean=new DowntimeHistoryBean();
+        historyBean.setDEVICE_ID(bean.getDEVICE_ID());
+        historyBean.setDEVICE_IP(bean.getDEVICE_IP());
+        SimpleDateFormat formaF=new SimpleDateFormat("yyyy-MM-dd");
+        String date=formaF.format(new Date())+"";
+        date=date.substring(0,10);
+        historyBean.setCREATE_DATE(date);
+        historyDao.addDowntimeHistory(historyBean);
+    }
+
+
+    /**
+     * 获取ping 后的结果,是否可以平通指定的IP。
+     * @param ipAddr
+     * @return
+     */
+    private boolean pingIpAddress(String ipAddr){
+        int pingErrorCount=0; // ping 不通的次数,ping3次。
+        int interval=8; // 时间间隔8秒。
+        boolean flag=false;
+        boolean temp=false;
+        for(int i=0;i<3;i++){
+            temp=executeCommand(ipAddr); // ping不通返回false。
+            log.info("["+ipAddr+"]ping result is ["+temp+"],(true:can connect;false:can't connect)");
+            if(!temp){
+                pingErrorCount++;
+            }
+            try {
+                Thread.sleep(interval*1000);
+                log.info("ping ["+ipAddr+"] trread sleep "+interval+" secound........");
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+        }
+        if(pingErrorCount == 3){
+            log.info("["+ipAddr+"] can't connect 3 times.");
+        }else{
+            flag=true;
+            log.info("["+ipAddr+"] can connect.");
+        }
+        return flag;
+    }
+
+
+    /**
+     * 进行ssh连接,判断是否可以连接成功。
+     * windows操作系统使用 TelnetThread类连接。 Windows的客户端需要配置并开启Telnet相关的服务。
+     * @return
+     */
+    private boolean contentWithSsh(DowntimeBean bean){
+        String protocol=bean.getPROTOCOL();
+        String ipAddr=bean.getDEVICE_IP();
+        String deviceAlias=bean.getDEVICE_ALIAS();
+        int protocolPort=bean.getPROTOCOL_PORT();
+        String userName=bean.getUSER_NAME();
+        String password=bean.getPASSWORD();
+        bean.setUnitId(getUnitId(deviceAlias));
+        log.info("execute contentWithSsh method ......");
+        boolean temp=false;
+        RomoteController tt = null;
+        log.info("host params is: ipAddr="+ipAddr+",protocol="+protocol+",protocolPort="+protocolPort+",userName="+userName);
+        if(loginParamterIsOk(protocol,ipAddr,protocolPort,userName,password,deviceAlias)){
+            try {
+                if (protocol != null && protocol.equalsIgnoreCase("telnet")) {
+                    tt = new TelnetThread(ipAddr, protocolPort, userName, password);
+                } else if (protocol != null && protocol.equalsIgnoreCase("ssh")) {
+                    tt = new SSHThread(ipAddr, protocolPort, userName, password);
+                }else{
+                    log.error("===================== unknown protocol =====================");
+                }
+            }catch (Exception e){
+                log.error(protocol+"connect have exception!");
+            }
+            tt.initial();
+            boolean flag=tt.isAuthorized();
+            log.info("******************* tt.isAuthorized() result is "+flag);
+            if (flag){ // 认证通过
+                log.info(ipAddr+" SSH connect,Authorized result is true authorized success!");
+                temp=true;
+                bean.setSshState(true);
+            }else{
+                log.info(ipAddr+" SSH connect,Authorized result is false authorized fail!!");
+                bean.setSshState(false);
+            }
+        }
+        return temp;
+    }
+
+
+    /**
+     * 判断所有的参数是否为空。
+     * @param protocol 协议类型
+     * @param ipAddr IP地址
+     * @param protocolPort 协议端口
+     * @param userName 用户名
+     * @param password 密码
+     * @param deviceAlias 主机别名
+     * @return
+     */
+    private boolean loginParamterIsOk(String protocol,String ipAddr,int protocolPort,String userName,
+                                      String password,String deviceAlias){
+        boolean flag=true;
+        if(StringUtils.isEmpty(protocol)){
+            flag=false;
+        }
+        if(StringUtils.isEmpty(ipAddr)){
+            flag=false;
+        }
+        if(StringUtils.isEmpty(protocolPort+"")){
+            flag=false;
+        }
+        if(StringUtils.isEmpty(userName)){
+            flag=false;
+        }
+        if(StringUtils.isEmpty(password)){
+            flag=false;
+        }
+        if(StringUtils.isEmpty(deviceAlias)){
+            flag=false;
+        }
+        return flag;
+    }
+
+
+    private String getUnitId(String deviceAlias){
+        StringBuffer bf=new StringBuffer("10-10-99-98:");
+        bf.append(deviceAlias).append("_").append(getEncryptStr());
+        return bf.toString();
+    }
+
+    /**
+     * 返回加密后的一个唯一字符串。
+     * @return
+     */
+    private String getEncryptStr(){
+        SimpleDateFormat forma=new SimpleDateFormat("yyMMddHHmmss");
+        Random rr= new Random();
+        String str=rr.nextInt(999)+forma.format(new Date())+rr.nextInt(999);
+        return Base62Util.encode(Long.parseLong(str));
+    }
+
+
+    /**
+     * 返回ping后的结果。
+     * @param ipAddr ip 地址。
+     * @return
+     */
+    private boolean executeCommand(String ipAddr){
+        String command = "/bin/ping -c 3 -w 3 " + ipAddr;;
+        // 执行command 命令。
+        boolean flag=false;
+        String line = null;
+        StringBuilder sb = new StringBuilder();
+        Runtime runtime = Runtime.getRuntime();
+        Process process = null;
+        long startTime = new Date().getTime();
+        try {
+            process = runtime.exec(command);
+        } catch (IOException e) {
+            log.error("execute command ["+command+"] has some error!");
+        }
+        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+        try {
+            while ((line = bufferedReader.readLine()) != null) {
+                sb.append(line + "\n");
+            }
+        } catch (IOException e) {
+            log.error("======== bufferedReader.readLine() has some error!");
+        }
+
+        String pingResult=sb.toString();
+        /**
+         *  当执行结果出现下面字符说明已经执行完成。
+         *  ping 通的时候 结果包含【min/avg/max/mdev】
+         *  ping 不通的时候 结果包含【100% packet loss】
+         */
+        if(pingResult.contains("100% packet loss") || (pingResult.contains("min/avg/max/mdev"))){
+            process.destroy();
+            log.info("execute command ["+command+"] finish!");
+        }
+
+
+        String os = System.getProperty("os.name").toLowerCase();
+        log.info("------------ operator system is :" + os);
+
+        // 解析command命令结果,包含【100% packet loss】 意味着ping不通,返回 false。
+        if(os.indexOf("linux") >= 0){
+            if (!StringUtils.isEmpty(pingResult)) {
+                if(!pingResult.contains("100% packet loss")){
+                    flag = true;
+                }
+            }
+        }
+        return flag;
+    }
+
+
+    /**
+     * 添加已经发送的告警信息。
+     * @param bean,取出对象中的ID与IP,外加时间(年月日)
+     */
+    public void addSendedEvent(DowntimeBean bean){
+
+    }
+
+}
diff --git a/src/com/sitech/jmx/mbean/ConfigSync.java b/src/com/sitech/jmx/mbean/ConfigSync.java
index 1cdf6bb..3dc89a3 100644
--- a/src/com/sitech/jmx/mbean/ConfigSync.java
+++ b/src/com/sitech/jmx/mbean/ConfigSync.java
@@ -1,31 +1,28 @@
 package com.sitech.jmx.mbean;
 
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.log4j.Logger;
-
 import com.sitech.base.AgentProperties;
+import com.sitech.database.dao.TbAtoDynamicThresholdDao;
 import com.sitech.database.dao.TbCfgEventDao;
 import com.sitech.database.dao.TbCfgOidMibDao;
 import com.sitech.database.domain.TbCfgEvent;
 import com.sitech.database.domain.TbCfgOidMib;
+import com.sitech.ismp.check.downtime.DowntimeDao;
 import com.sitech.ismp.coll.cron.CronConstants;
-import com.sitech.ismp.messageObject.AgentSyncObject;
-import com.sitech.ismp.messageObject.AlarmEventConfig;
-import com.sitech.ismp.messageObject.AlarmEventConfigSyncObject;
-import com.sitech.ismp.messageObject.MibConfig;
-import com.sitech.ismp.messageObject.MibConfigSyncObject;
-import com.sitech.ismp.messageObject.ScheduleLog;
+import com.sitech.ismp.messageObject.*;
 import com.sitech.jmx.manage.CollScheduleManager;
 import com.sitech.jmx.manage.MBeanManager;
 import com.sitech.schedule.ScheduleCache;
 import com.sitech.schedule.Scheduler;
+import com.sitech.snmptrap.TbTopoPhysicalDeviceDao;
 import com.sitech.util.Formater;
 import com.sitech.util.mq.MQConstants;
 import com.sitech.util.mq.TunnelFactory;
+import org.apache.log4j.Logger;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 采集/告警配置同步
@@ -71,6 +68,9 @@ public class ConfigSync implements ConfigSyncMBean {
                     String scheduleOperate = obj.getParams().get("SCHEDULE_OPERATE");
                     extInfo.put("SCHEDULE_OPERATE",scheduleOperate);
                     removeCollSchedule(obj);
+//                    removeMemDbCfgData(obj);
+					removeDowntimeMBean(obj);
+                    // 删除内存数据库中相关的配置数据
                     scheStatus = "0";
                     if("1".equals(scheduleOperate)){
                         logInfo = "agent删除调度任务成功";
@@ -114,7 +114,7 @@ public class ConfigSync implements ConfigSyncMBean {
         }
 
 	}
-	
+
 	public void syncEventCfg(AlarmEventConfigSyncObject obj) throws Exception {
 		int type = obj.getSyncType();
 		List<AlarmEventConfig> configList = obj.getConfigList();
@@ -154,6 +154,54 @@ public class ConfigSync implements ConfigSyncMBean {
 		logger.info("End refresh table[TB_CFG_EVENT], delete ["+configList.size()+"] config");		
 	}
 
+	/**
+	 * 删除添加主机的MBean。
+	 * @param obj
+     */
+	private void removeMemDbCfgData(AgentSyncObject obj){
+		if(obj.getClassName().equals("com.sitech.snmptrap.TbTopoPhysicalDevice")){
+			TbTopoPhysicalDeviceDao physicalDeviceDao = new TbTopoPhysicalDeviceDao();
+			physicalDeviceDao.deletePhysicalDeviceByIp(obj.getParams().get("DEVICE_IP"));
+		}
+	}
+
+	/**
+	 * 删除需要监控宕机的主机。
+	 * @param obj
+     */
+	private void removeDowntimeMBean(AgentSyncObject obj){
+		if(obj.getClassName().equals("com.sitech.ismp.check.downtime.Downtime")){
+			DowntimeDao dao = new DowntimeDao();
+			dao.deleteDowntimeHostByIp(obj.getParams().get("DEVICE_IP"));
+		}
+	}
+
+
+	/**
+	 * 添加监控宕机的MBean。
+	 * 监控主机连接状态,有异常的时候,产生告警。
+	 * frank 2017-04-11
+	 */
+	/*private void regeditDowntimeMBean(AgentSyncObject obj,String scheduleId){
+		boolean isExist=CollScheduleManager.getInstance().scheduleExist(scheduleId);
+		if(!isExist){
+			DowntimeServer server=new DowntimeServer();
+			if(obj.getClassName().equals("com.sitech.snmptrap.TbTopoPhysicalDevice")){
+				AgentSyncObject downtimeAgentSyncObject= server.getAgentSyncObject(obj,scheduleId);
+				log.info("get DowntimeMBean,className ====== "+downtimeAgentSyncObject.getClassName());
+				try {
+					addCollSchedule(downtimeAgentSyncObject);
+					log.info("******************************************************************");
+					log.info("*************  注册DowntimeMBean完成,开始监听宕机情况  **************");
+					log.info("******************************************************************");
+				} catch (Exception e) {
+					log.error("regedit DowntimeMBean has wrong",e);
+					e.printStackTrace();
+				}
+			}
+		}
+	}*/
+
 	private void updateEventCfg(List<AlarmEventConfig> configList) {
 		String[] guid = new String[configList.size()];
 		for (int i = 0; i < configList.size(); i++) {
@@ -361,4 +409,91 @@ public class ConfigSync implements ConfigSyncMBean {
         TunnelFactory.getTunnel(MQConstants.Q_ROPORT_FROM_AGENT).writeData(log);
     }
 
+    public void syncDynamicCfg(AlarmDynamicConfigSyncObject obj) throws Exception {
+        int type = obj.getSyncType();
+        List<TbAtoDynamicThreshold> configList = obj.getConfigList();
+
+        logger.info("Begin refresh table[TB_ATO_DYNAMIC_THRESHOLD]...");
+
+        if (configList == null || configList.size() == 0) {
+            logger.info("End refresh table[TB_ATO_DYNAMIC_THRESHOLD], update [0] config");
+            return;
+        }
+
+        switch (type) {
+            case TYPE_SYNC_ALL:
+                refreshAllDynamicCfg(configList);
+                break;
+            case TYPE_CREATE:
+                addDynamicCfg(configList);
+                break;
+            case TYPE_UPDATE:
+                updateDynamicCfg(configList);
+                break;
+            case TYPE_DELETE:
+                deleteDynamicCfg(configList);
+                break;
+        }
+    }
+
+    /**
+     * 刷新所有动态阀值配置
+     * @param configList
+     */
+    private void refreshAllDynamicCfg(List<TbAtoDynamicThreshold> configList) {
+        TbAtoDynamicThresholdDao dao = new TbAtoDynamicThresholdDao();
+        int result = dao.deleteTbAtoDynamicThresholdAll();
+        if (result != -1) {
+            for (TbAtoDynamicThreshold config : configList) {
+                //TbCfgEvent tbCfgEvent = new TbCfgEvent(config);
+                dao.insertTbAtoDynamicThreshold(config);
+            }
+        }
+        logger.info("End refresh table[TB_ATO_DYNAMIC_THRESHOLD], update ["+configList.size()+"] config");
+    }
+
+    /**
+     * 新增动态阀值配置
+     * @param configList
+     */
+    private void addDynamicCfg(List<TbAtoDynamicThreshold> configList) {
+        TbAtoDynamicThresholdDao dao = new TbAtoDynamicThresholdDao();
+        for (TbAtoDynamicThreshold config : configList) {
+            //TbCfgEvent tbCfgEvent = new TbCfgEvent(config);
+            dao.insertTbAtoDynamicThreshold(config);
+        }
+        logger.info("End refresh table[TB_ATO_DYNAMIC_THRESHOLD], add ["+configList.size()+"] config");
+    }
+
+    /**
+     * 更新动态阀值配置
+     * @param configList
+     */
+    private void updateDynamicCfg(List<TbAtoDynamicThreshold> configList) {
+        String[] id = new String[configList.size()];
+        for (int i = 0; i < configList.size(); i++) {
+            id[i] = configList.get(i).getID();
+        }
+        TbAtoDynamicThresholdDao dao = new TbAtoDynamicThresholdDao();
+        dao.deleteTbAtoDynamicThreshold(id);
+        for (TbAtoDynamicThreshold config : configList) {
+            dao.insertTbAtoDynamicThreshold(config);
+        }
+        logger.info("End refresh table[TB_ATO_DYNAMIC_THRESHOLD], update ["+configList.size()+"] config");
+    }
+
+    /**
+     * 删除动态阀值配置
+     * @param configList
+     */
+    private void deleteDynamicCfg(List<TbAtoDynamicThreshold> configList) {
+        String[] guid = new String[configList.size()];
+        for (int i = 0; i < configList.size(); i++) {
+            guid[i] = configList.get(i).getGUID();
+        }
+        TbAtoDynamicThresholdDao dao = new TbAtoDynamicThresholdDao();
+        dao.deleteTbAtoDynamicThreshold(guid);
+        logger.info("End refresh table[TB_ATO_DYNAMIC_THRESHOLD], delete ["+configList.size()+"] config");
+    }
+
 }
diff --git a/src/com/sitech/snmptrap/TbTopoPhysicalDevice.java b/src/com/sitech/snmptrap/TbTopoPhysicalDevice.java
new file mode 100644
index 0000000..4416761
--- /dev/null
+++ b/src/com/sitech/snmptrap/TbTopoPhysicalDevice.java
@@ -0,0 +1,74 @@
+package com.sitech.snmptrap;
+
+import com.sitech.ismp.coll.basic.TblATO_KPIDETAIL;
+import org.apache.log4j.Logger;
+
+import java.util.*;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description: 物理设备操作类。
+ * @Package com.sitech.snmptrap
+ * @ClassName: com.sitech.snmptrap.TbTopoPhysicalDevice
+ * @date 2017年03月03日 11:48
+ */
+public class TbTopoPhysicalDevice implements TbTopoPhysicalDeviceMBean {
+
+    Logger logger = Logger.getLogger(getClass());
+    TbTopoPhysicalDeviceDao dao=new TbTopoPhysicalDeviceDao();
+
+    /**
+     * 添加(修改)物理设备
+     * @param params
+     * @return
+     */
+    @Override
+    public Vector<TblATO_KPIDETAIL> addDevice(HashMap params) {
+        Vector<TblATO_KPIDETAIL> bean = new Vector<TblATO_KPIDETAIL>();
+        try {
+            logger.info("Start add phsical device ***************************!!!");
+            TbTopoPhysicalDeviceBean physicalDevice = new TbTopoPhysicalDeviceBean();
+            logger.info("physicalDevice Object===" + physicalDevice.getClass());
+            physicalDevice.setDEVICE_ID(UUID.randomUUID().toString());
+            physicalDevice.setCREATE_DATE(new Date());
+            physicalDevice.setDEVICE_ALIAS(params.get("DEVICE_ALIAS") + "");
+            physicalDevice.setKBP_CLASS(params.get("KBP_CLASS") + "-99");
+            physicalDevice.setDEVICE_CATALOG(params.get("DEVICE_CATALOG") + "");
+            physicalDevice.setDEVICE_CNAME(params.get("DEVICE_CNAME") + "");
+            physicalDevice.setDEVICE_DESC(params.get("DEVICE_DESC") + "");
+            physicalDevice.setDEVICE_IP(params.get("DEVICE_IP") + "");
+            TbTopoPhysicalDeviceDao dao = new TbTopoPhysicalDeviceDao();
+            logger.info("TbTopoPhysicalDeviceDao Object===" + dao.getClass());
+            dao.addTbTopoPhysicalDevice(physicalDevice);
+            logger.info("Start add phsical device success");
+        }catch (Exception ex){
+            logger.error("add device error .",ex);
+        }
+        return bean;
+    }
+
+    /**
+     * 删除物理设备
+     * @param deviceId
+     * @return
+     */
+    @Override
+    public String deleteDevice(String deviceId) {
+        boolean flag=false;
+        int result=dao.deleteTbTopoPhysicalDevice(deviceId);
+        if(result>0){
+            return "true";
+        }else{
+            return "false";
+        }
+    }
+
+    /**
+     * 根据IP查询对应的设备信息。
+     * @param deviceIp
+     * @return
+     */
+    public List<TbTopoPhysicalDeviceBean> getPhysicalDevice(String deviceIp){
+        return dao.getPhysicalDeviceByIp(deviceIp);
+    }
+}
diff --git a/src/com/sitech/snmptrap/TbTopoPhysicalDeviceBean.java b/src/com/sitech/snmptrap/TbTopoPhysicalDeviceBean.java
new file mode 100644
index 0000000..9be4c4c
--- /dev/null
+++ b/src/com/sitech/snmptrap/TbTopoPhysicalDeviceBean.java
@@ -0,0 +1,134 @@
+package com.sitech.snmptrap;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author frank  zmm@honggroup.com.cn
+ * @Description: 新添加物理设备类,对应数据的表为 TB_TOPO_PHYSICAL_DEVICE。
+ * 当添加新设备的时候,如果设备IP,设备别名与已经存在的数据相同,则视为修改。
+ * @Package com.sitech.snmptrap
+ * @ClassName: com.sitech.snmptrap.TbTopoPhysicalDeviceBean
+ * @date 2017年03月03日 09:56
+ */
+public class TbTopoPhysicalDeviceBean implements Serializable{
+
+//    设备ID
+    private String DEVICE_ID;
+//    设备IP地址
+    private String DEVICE_IP;
+//    设备别名
+    private String DEVICE_ALIAS;
+//    设备类型
+    private String DEVICE_CATALOG;
+//    设备中文名称
+    private String DEVICE_CNAME;
+//    kbp_class 设备的分类
+    private String KBP_CLASS;
+//    设备描述
+    private String DEVICE_DESC;
+//    所属机房
+    private String DEVICE_ROOM;
+//    所属机架(机柜)
+    private String DEVICE_RACK;
+//    创建日期
+    private Date CREATE_DATE;
+
+    public TbTopoPhysicalDeviceBean() {}
+
+    public String getDEVICE_ID() {
+        return DEVICE_ID;
+    }
+
+    public void setDEVICE_ID(String DEVICE_ID) {
+        this.DEVICE_ID = DEVICE_ID;
+    }
+
+    public String getDEVICE_IP() {
+        return DEVICE_IP;
+    }
+
+    public void setDEVICE_IP(String DEVICE_IP) {
+        this.DEVICE_IP = DEVICE_IP;
+    }
+
+    public String getDEVICE_ALIAS() {
+        return DEVICE_ALIAS;
+    }
+
+    public void setDEVICE_ALIAS(String DEVICE_ALIAS) {
+        this.DEVICE_ALIAS = DEVICE_ALIAS;
+    }
+
+    public String getDEVICE_CATALOG() {
+        return DEVICE_CATALOG;
+    }
+
+    public void setDEVICE_CATALOG(String DEVICE_CATALOG) {
+        this.DEVICE_CATALOG = DEVICE_CATALOG;
+    }
+
+    public String getDEVICE_CNAME() {
+        return DEVICE_CNAME;
+    }
+
+    public void setDEVICE_CNAME(String DEVICE_CNAME) {
+        this.DEVICE_CNAME = DEVICE_CNAME;
+    }
+
+    public String getKBP_CLASS() {
+        return KBP_CLASS;
+    }
+
+    public void setKBP_CLASS(String KBP_CLASS) {
+        this.KBP_CLASS = KBP_CLASS;
+    }
+
+    public String getDEVICE_DESC() {
+        return DEVICE_DESC;
+    }
+
+    public void setDEVICE_DESC(String DEVICE_DESC) {
+        this.DEVICE_DESC = DEVICE_DESC;
+    }
+
+    public String getDEVICE_ROOM() {
+        return DEVICE_ROOM;
+    }
+
+    public void setDEVICE_ROOM(String DEVICE_ROOM) {
+        this.DEVICE_ROOM = DEVICE_ROOM;
+    }
+
+    public String getDEVICE_RACK() {
+        return DEVICE_RACK;
+    }
+
+    public void setDEVICE_RACK(String DEVICE_RACK) {
+        this.DEVICE_RACK = DEVICE_RACK;
+    }
+
+    public Date getCREATE_DATE() {
+        return CREATE_DATE;
+    }
+
+    public void setCREATE_DATE(Date CREATE_DATE) {
+        this.CREATE_DATE = CREATE_DATE;
+    }
+
+    @Override
+    public String toString() {
+        return "TbTopoPhysicalDeviceBean{" +
+                "DEVICE_ID='" + DEVICE_ID + '\'' +
+                ", DEVICE_IP='" + DEVICE_IP + '\'' +
+                ", DEVICE_ALIAS='" + DEVICE_ALIAS + '\'' +
+                ", DEVICE_CATALOG='" + DEVICE_CATALOG + '\'' +
+                ", DEVICE_CNAME='" + DEVICE_CNAME + '\'' +
+                ", KBP_CLASS='" + KBP_CLASS + '\'' +
+                ", DEVICE_DESC='" + DEVICE_DESC + '\'' +
+                ", DEVICE_ROOM='" + DEVICE_ROOM + '\'' +
+                ", DEVICE_RACK='" + DEVICE_RACK + '\'' +
+                ", CREATE_DATE=" + CREATE_DATE +
+                '}';
+    }
+}