📄 topodiscover.java
字号:
package com.sitech.net.topo.disc;
import java.util.List;
import java.util.Vector;
import sitech.www.frame.jdbc.SqlDelete;
import sitech.www.frame.jdbc.SqlInsert;
import sitech.www.frame.jdbc.SqlQuery;
import sitech.www.frame.jdbc.SqlUpdate;
import com.sitech.net.topo.netobj.RouteConnect;
import com.sitech.net.topo.netobj.Subnet;
import com.sitech.net.topo.table.Dot1dBasePortTable;
import com.sitech.net.topo.table.Dot1dTpFdbTable;
import com.sitech.net.topo.table.IfTable;
import com.sitech.net.topo.table.IpAddrTable;
import com.sitech.net.topo.table.IpNetToMediaTable;
import com.sitech.net.topo.table.IpRouteTable;
import com.sitech.net.topo.util.Queue;
import com.sitech.net.topo.util.netHelper;
public class TopoDiscover {
public static final String FIRST_COLL = "FIRST_COLL";
public static final String UPDATE_COLL = "UPDATE_COLL";
netHelper nethelper = new netHelper();
public Vector procNode(String nodeid) {
// 此节点发现的其他节点集合
Vector vector = new Vector();
String sql_exist = "select moni_ipaddr from tb_topo_node_info where node_id='"
+ nodeid
+ "' and moni_ipaddr in (select ipaddr from tb_topo_ipaddrtable)";
List list_exist = SqlQuery.findList(sql_exist);
if (list_exist.size() > 0) {
// 此节点已经处理过删除它
String sql_del_exist = "delete from tb_topo_node_info where node_id='"
+ nodeid + "'";
System.out.println("---" + sql_del_exist + "---");
SqlDelete.delete(sql_del_exist);
return null;
} else {
String sql = "select moni_ipaddr,moni_port,moni_community,node_type from tb_topo_node_info where process_flag='0' and node_id='"
+ nodeid + "'";
List list = SqlQuery.findList(sql);
String[] item = (String[]) list.get(0);
String ip = item[0];
int port = Integer.parseInt(item[1]);
String community = item[2];
String nodetype = item[3];
System.out.println("[当前处理节点 NodeID: " + nodeid + " IpAddress: "
+ ip + " NodeType: " + nodetype + "]");
// 采集节点基本信息
// 填充AddressTable表信息
IpAddrTable ipAddrTable = new IpAddrTable();
ipAddrTable.FillTable(ip, port, community, nodeid);
ipAddrTable.saveToDB();
// 填充RouteTable表信息
IpRouteTable ipRouteTable = new IpRouteTable();
ipRouteTable.FillTable(ip, port, community, nodeid);
ipRouteTable.saveToDB();
// 填充IpNetToMediaTable表信息
IpNetToMediaTable ipNetToMediaTable = new IpNetToMediaTable();
ipNetToMediaTable.FillTable(ip, port, community, nodeid);
ipNetToMediaTable.saveToDB();
// 填充IfTable表信息
IfTable ifTable = new IfTable();
ifTable.FillTable(ip, port, community, nodeid);
ifTable.saveToDB();
// 填充Dot1dTpFdbTable
Dot1dTpFdbTable tpFdbTable = new Dot1dTpFdbTable();
tpFdbTable.FillTable(ip, port, community, nodeid);
tpFdbTable.saveToDB();
// 填充Dot1dBasePortTable
Dot1dBasePortTable basePortTable = new Dot1dBasePortTable();
basePortTable.FillTable(ip, port, community, nodeid);
basePortTable.saveToDB();
// 填充子网信息
Subnet subnet = new Subnet();
subnet.saveToDB(nodeid, ip);
SqlUpdate
.update("update tb_topo_node_info set info_proc_flag='1' where node_id='"
+ nodeid + "'");
// 采集节点基本信息完毕
// /////////////////////////////////////////////////
// 填充RouterConnect信息表
// 发现链路及新路由器节点
RouteConnect routeConnect = new RouteConnect();
Vector rcVector = routeConnect.saveToDB(nodeid, ip);
// 填充每一个子网下的节点信息
for (int i = 0; i < rcVector.size(); i++) {
vector.add((String) rcVector.get(i));
}
Vector subNetVector = subnet.processSubNet();
for (int i = 0; i < subNetVector.size(); i++) {
vector.add((String) subNetVector.get(i));
}
SqlUpdate
.update("update tb_topo_node_info set process_flag='1' where node_id='"
+ nodeid + "'");
System.out.println("[当前处理节点 NodeID: " + nodeid + "处理完毕]");
return vector;
}
}
/**
* 处理节点
*
* @param nodeid
* @param collStatus
* @return
*/
public Vector procNode(String nodeid, String collStatus) {
// 此节点发现的其他节点集合
Vector vector = new Vector();
String sql_exist = "select moni_ipaddr from tb_topo_node_info where node_id='"
+ nodeid
+ "' and moni_ipaddr in (select ipaddr from tb_topo_ipaddrtable)";
List list_exist = SqlQuery.findList(sql_exist);
if (list_exist.size() > 0) {
// 此节点已经处理过删除它
String sql_del_exist = "delete from tb_topo_node_info where node_id='"
+ nodeid + "'";
System.out.println("---" + sql_del_exist + "---");
SqlDelete.delete(sql_del_exist);
return null;
} else {
String sql = "select moni_ipaddr,moni_port,moni_community,node_type from tb_topo_node_info where process_flag='0' and node_id='"
+ nodeid + "'";
List list = SqlQuery.findList(sql);
String[] item = (String[]) list.get(0);
String ip = item[0];
int port = Integer.parseInt(item[1]);
String community = item[2];
String nodetype = item[3];
System.out.println("[当前处理节点 NodeID: " + nodeid + " IpAddress: "
+ ip + " NodeType: " + nodetype + "]");
// 采集节点基本信息
// 填充AddressTable表信息
IpAddrTable ipAddrTable = new IpAddrTable();
ipAddrTable.FillTable(ip, port, community, nodeid);
ipAddrTable.saveToDB();
// 填充RouteTable表信息
IpRouteTable ipRouteTable = new IpRouteTable();
ipRouteTable.FillTable(ip, port, community, nodeid);
ipRouteTable.saveToDB();
// 填充IpNetToMediaTable表信息
IpNetToMediaTable ipNetToMediaTable = new IpNetToMediaTable();
ipNetToMediaTable.FillTable(ip, port, community, nodeid);
ipNetToMediaTable.saveToDB();
// 填充IfTable表信息
IfTable ifTable = new IfTable();
ifTable.FillTable(ip, port, community, nodeid);
ifTable.saveToDB();
// 填充Dot1dTpFdbTable
Dot1dTpFdbTable tpFdbTable = new Dot1dTpFdbTable();
tpFdbTable.FillTable(ip, port, community, nodeid);
tpFdbTable.saveToDB();
// 填充Dot1dBasePortTable
Dot1dBasePortTable basePortTable = new Dot1dBasePortTable();
basePortTable.FillTable(ip, port, community, nodeid);
basePortTable.saveToDB();
// 填充子网信息
Subnet subnet = new Subnet();
subnet.saveToDB(nodeid, ip);
SqlUpdate
.update("update tb_topo_node_info set info_proc_flag='1' where node_id='"
+ nodeid + "'");
// 采集节点基本信息完毕
// /////////////////////////////////////////////////
// 填充RouterConnect信息表
// 发现链路及新路由器节点
RouteConnect routeConnect = new RouteConnect();
Vector rcVector = routeConnect.saveToDB(nodeid, ip);
// 填充每一个子网下的节点信息
for (int i = 0; i < rcVector.size(); i++) {
vector.add((String) rcVector.get(i));
}
Vector subNetVector = subnet.processSubNet();
for (int i = 0; i < subNetVector.size(); i++) {
vector.add((String) subNetVector.get(i));
}
SqlUpdate
.update("update tb_topo_node_info set process_flag='1' where node_id='"
+ nodeid + "'");
System.out.println("[当前处理节点 NodeID: " + nodeid + "处理完毕]");
return vector;
}
}
public void discover() {
this.initCollTable();
Queue Routerqueue = new Queue();
// 根节点入队列
String sql1 = "select node_id from tb_topo_node_info where process_flag='0'";
List list1 = SqlQuery.findList(sql1);
for (int i = 0; i < list1.size(); i++) {
String[] item = (String[]) list1.get(i);
String nodeid = item[0];
Routerqueue.put(nodeid);
}
while (!(Routerqueue.isEmpty())) {
// 未处理节点出队列
String nodeid = (String) Routerqueue.get();
// 处理此节点
Vector vector = this.procNode(nodeid);
// 未处理节点入队列
if (vector != null) {
for (int i = 0; i < vector.size(); i++) {
String newNodeID = (String) vector.get(i);
Routerqueue.put(newNodeID);
}
}
}
System.out.println("[---队列中节点处理完毕---]");
}
public void discover1() {
this.initCollTable();
Queue Routerqueue = new Queue();
// 根节点入队列
String sql1 = "select node_id from tb_topo_node_info where process_flag='0'";
List list1 = SqlQuery.findList(sql1);
for (int i = 0; i < list1.size(); i++) {
String[] item = (String[]) list1.get(i);
String nodeid = item[0];
Routerqueue.put(nodeid);
}
while (!(Routerqueue.isEmpty())) {
// 未处理节点出队列
String nodeid = (String) Routerqueue.get();
// 处理此节点
Vector vector = this.procNode(nodeid);
// 未处理节点入队列
if (vector != null) {
for (int i = 0; i < vector.size(); i++) {
String newNodeID = (String) vector.get(i);
Routerqueue.put(newNodeID);
}
}
}
System.out.println("[---队列中节点处理完毕---]");
}
/**
* 更新拓扑展现表
*
*/
private void updateVTable() {
// 更新拓扑展现表
SqlDelete.delete("delete from tb_topo_node_info_v");
SqlDelete.delete("delete from tb_topo_routerconnect_v");
String insert_sql = "insert into tb_topo_node_info_v(select node_id,node_type,node_desc,area_id,node_manu,moni_ipaddr from tb_topo_node_info)";
SqlInsert.insert(insert_sql);
insert_sql = "insert into tb_topo_routerconnect_v(select nodeid,peernodeid from tb_topo_routerconnect)";
SqlInsert.insert(insert_sql);
System.out.println("[---拓扑展示表更新完毕---]");
}
/**
* 初始化采集表
*
*/
private void initCollTable() {
// 初始化采集表
String delete_sql = "delete from tb_topo_node_info where root_flag<>'1'";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_ipaddrtable";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_iproutetable";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_routerconnect";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_subnet";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_ipnettomediatable";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_noanswer";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_iftable";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_net_link";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_dot1dtpfdbtable";
SqlDelete.delete(delete_sql);
delete_sql = "delete from tb_topo_dot1dbaseporttable";
SqlDelete.delete(delete_sql);
String update_sql = "update tb_topo_node_info set process_flag='0',info_proc_flag='0' where root_flag='1'";
SqlUpdate.update(update_sql);
System.out.println("[---拓扑采集表初始化完毕---]");
}
public static void main(String args[]) {
TopoDiscover disc = new TopoDiscover();
disc.discover();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -