📄 vpserver.java
字号:
outl(boksid+"^"+sysname+"^"+kat); // Legg til tekst for bokser String[] fields = (String[])text.get(kat+"Boks"); if (fields == null) fields = (String[])text.get("defBoks"); if (fields == null) continue; // fail-safe ArrayList l = (ArrayList)textOut.get(kat+"Boks"); if (l == null) l = (ArrayList)textOut.get("defBoks"); if (l == null) continue; // fail-safe String[] s = new String[fields.length]; s[0] = boksid; for (int i=1;i<s.length;i++) s[i] = rs.getString(fields[i]); l.add(s); gwboksSet.add(boksid); boksDupe.add(boksid); } // Så er det resten, da har vi info om linken også, så legg til alle felter vi skal ha med cFields = ""; { HashSet hs = new HashSet(); String[] aa = { "swportid", "netboxid", "sysName", "catid", "module", "port", "vlan.vlan", "speed", "direction", "to_netboxid", "portname", "nettype", "netident" }; for (int i=0; i < aa.length; i++) hs.add(aa[i].toLowerCase()); Iterator iter = text.entrySet().iterator(); while (iter.hasNext()) { Map.Entry me = (Map.Entry)iter.next(); String key = (String)me.getKey(); if (key.equals("gwBoks")) continue; textOut.put(key, new ArrayList()); String[] s = (String[])me.getValue(); for (int i=1;i<s.length;i++) if (hs.add(s[i])) cFields += ","+s[i]; } } // Så henter vi alle bokser vi må eksplistitt hente info fra boks for // SELECT * da vi ikke vet hva som skal være med HashSet boksSet = new HashSet(); rs = Database.query("SELECT * FROM netbox WHERE netboxid IN (SELECT netboxid FROM module JOIN swport USING(moduleid) WHERE netboxid="+thisBoksid+") AND netboxid NOT IN (SELECT netboxid FROM module JOIN swport USING(moduleid) WHERE to_netboxid="+thisBoksid+")"); while (rs.next()) { String boksid = rs.getString("netboxid"); String sysname = rs.getString("sysname"); String kat = rs.getString("catid").toLowerCase(); outl(boksid+"^"+sysname+"^"+kat); // Legg til tekst for bokser String[] fields = (String[])text.get(kat+"Boks"); if (fields == null) fields = (String[])text.get("defBoks"); if (fields == null) continue; // fail-safe ArrayList l = (ArrayList)textOut.get(kat+"Boks"); if (l == null) l = (ArrayList)textOut.get("defBoks"); if (l == null) continue; // fail-safe String[] s = new String[fields.length]; s[0] = boksid; for (int i=1;i<s.length;i++) s[i] = rs.getString(fields[i]); l.add(s); boksidKatMap.put(boksid, kat); boksSet.add(boksid); } //rs = Database.query("SELECT swportid,boksid,sysName,kat,vlan,speed,retning,boksbak"+cFields+" FROM swport JOIN boks USING (boksid) JOIN swportvlan USING (swportid) WHERE status!='down' AND boksbak IS NOT NULL AND (boksid='"+thisBoksid+"' OR boksbak='"+thisBoksid+"')"); rs = Database.query("SELECT swportid,netboxid,sysName,catid,module,port,vlan.vlan,speed,direction,to_netboxid,portname,nettype,netident"+cFields+" FROM swport JOIN module USING(moduleid) JOIN netbox USING(netboxid) JOIN swportvlan USING (swportid) JOIN vlan USING(vlanid) LEFT JOIN prefix USING (vlanid) WHERE netbox.up!='n' AND (netboxid='"+thisBoksid+"' OR to_netboxid='"+thisBoksid+"') ORDER BY vlan.vlan"); //SELECT DISTINCT ON (vlan,boksid,boksbak) swportid,boksid,sysName,kat,vlan,speed,retning,boksbak,vpkatbak,portnavn,nettype,nettident FROM swport JOIN boks USING (boksid) JOIN swportvlan USING (swportid) LEFT JOIN prefiks USING (vlan) WHERE status!='down' AND (boksid='' OR boksbak='') ORDER BY vlan //SELECT DISTINCT ON (vlan,boksid,boksbak) swportid,boksid,sysName,kat,trunk,boksbak,vlan,retning,vpkatbak,nettype,nettident FROM swport JOIN boks USING (boksid) JOIN swportvlan USING (swportid) LEFT JOIN prefiks USING (vlan) WHERE status!='down' AND (boksid='16' OR boksbak='16') and boksbak IN (1,28) ORDER BY vlan,boksbak; HashMap linkMap = new HashMap(); ArrayList noInfoBoksL = new ArrayList(); while (rs.next()) { String swportid = rs.getString("swportid"); String boksid = rs.getString("netboxid"); String sysname = rs.getString("sysname"); String kat = rs.getString("catid").toLowerCase(); String vlan = rs.getString("vlan"); //String retning = rs.getString("retning"); String boksbak = rs.getString("to_netboxid"); boolean boksbakNull = (boksbak==null) ? true : false; String katBak; if (thisBoksid.equals(boksid)) { // Link ut fra enheten, så vi må endre kat if (boksbak == null) { String[] katSysname = decodeBoksbak(null, rs.getString("portname")); katBak = katSysname[0]; String boksidBak = String.valueOf(++maxBoksid); boksbak = boksidBak; String sysnameBak =katSysname[1]; outl(boksidBak+"^"+sysnameBak+"^"+katBak); // Vi må også legge til tekst for enheten String[] fields = (String[])text.get(katBak+"Boks"); if (fields == null) fields = (String[])text.get("defBoks"); if (fields == null) continue; // fail-safe ArrayList l = (ArrayList)textOut.get(katBak+"Boks"); if (l == null) l = (ArrayList)textOut.get("defBoks"); if (l == null) continue; // fail-safe String[] s = new String[fields.length]; s[0] = boksidBak; for (int i=1;i<s.length;i++) s[i] = rs.getString(fields[i]); l.add(s); } else { katBak = (String)boksidKatMap.get(boksbak); } } else { katBak = thisKat; } // Legg til vlan if (!vlanNameMap.containsKey(vlan)) { vlanNameMap.put(vlan, rs.getString("nettype")+","+rs.getString("netident")); } // Legg evt. til boksen if (boksDupe.add(boksid)) { outl(boksid+"^"+sysname+"^"+kat); // Legg til tekst for bokser String[] fields = (String[])text.get(kat+"Boks"); if (fields == null) fields = (String[])text.get("defBoks"); if (fields == null) continue; // fail-safe ArrayList l = (ArrayList)textOut.get(kat+"Boks"); if (l == null) l = (ArrayList)textOut.get("defBoks"); if (l == null) continue; // fail-safe String[] s = new String[fields.length]; s[0] = boksid; for (int i=1;i<s.length;i++) s[i] = rs.getString(fields[i]); l.add(s); } // Så sjekker vi linken if (linkDupe.add(swportid)) { String key = (thisBoksid.equals(boksid)) ? boksbak : boksid; // Vi lagrer linker per vlan, da det kan være flere fysiske linker mellom to enheter, men // de vil alltid være på forskjellig vlan key += ":"+vlan; // Legg til selve linken, litt styr fordi begge swportid'ene skal være med i samme link ut fra midten { ArrayList l; if ( (l=(ArrayList)linkMap.get(key)) == null) linkMap.put(key, l=new ArrayList()); // Linken ut skal komme først if (thisBoksid.equals(boksid)) { //l.add(0, retning); l.add(0, swportid); l.add(1, boksbak); } else { l.add(swportid+"^"+boksid); } } String[] linkInfoTo = { swportid, rs.getString("speed"), rs.getString("module")+"_"+rs.getString("port") }; linkInfo.add(linkInfoTo); // Legg til tekst for vanlige linker { /* String k1,k2; if (thisBoksid.equals(boksid)) { // Fra senter og ut k1 = thisKat; k2 = kat; } else { // Inn mot senter k1 = kat; k2 = thisKat; } */ String[] fields = (String[])text.get(kat+"-"+katBak+"Link"); if (fields == null) fields = (String[])text.get(kat+"-defLink"); if (fields == null) fields = (String[])text.get("def-defLink"); if (fields == null) continue; // fail-safe ArrayList l = (ArrayList)textOut.get(kat+"-"+katBak+"Link"); if (l == null) l = (ArrayList)textOut.get(kat+"-defLink"); if (l == null) l = (ArrayList)textOut.get("def-defLink"); if (l == null) continue; // fail-safe String[] s = new String[fields.length]; s[0] = swportid; for (int i=1;i<s.length;i++) s[i] = rs.getString(fields[i]); l.add(s); } // Spesialtilfelle der vi kun har linken en vei, dvs. boksbak er null eller det er srv, mas eller noe annet // der boksbak er definert // Dette er da linken inn mot senter if (boksbakNull || boksSet.contains(boksbak)) { String[] fields = (String[])text.get(katBak+"-"+thisKat+"Link"); if (fields == null) fields = (String[])text.get(katBak+"-defLink"); if (fields == null) fields = (String[])text.get("def-defLink"); if (fields == null) continue; // fail-safe ArrayList l = (ArrayList)textOut.get(katBak+"-"+thisKat+"Link"); if (l == null) l = (ArrayList)textOut.get(katBak+"-defLink"); if (l == null) l = (ArrayList)textOut.get("def-defLink"); if (l == null) continue; // fail-safe String[] s = new String[fields.length]; s[0] = "-"+swportid; for (int i=1;i<s.length;i++) s[i] = rs.getString(fields[i]); l.add(s); } // Spesialtilfelle for link gw->sw if (gwboksSet.contains(boksbak)) { String[] fields = (String[])text.get("gw-"+thisKat+"Link"); if (fields == null) fields = (String[])text.get("gw-defLink"); if (fields == null) fields = (String[])text.get("def-defLink"); if (fields == null) continue; // fail-safe ArrayList l = (ArrayList)textOut.get("gw-"+thisKat+"Link"); if (l == null) l = (ArrayList)textOut.get("gw-defLink"); if (l == null) l = (ArrayList)textOut.get("def-defLink"); if (l == null) continue; // fail-safe String[] s = new String[fields.length]; s[0] = "-"+swportid; for (int i=1;i<s.length;i++) s[i] = rs.getString(fields[i]); l.add(s); } } // Legg til vlan for linken { ArrayList l; if ( (l=(ArrayList)linkVlanMap.get(swportid)) == null) linkVlanMap.put(swportid, l=new ArrayList()); String retning = rs.getString("direction"); if (!retning.equals("o") && !retning.equals("b")) retning = "n"; l.add(rs.getString("vlan")+","+retning); } } // Nå går vi gjennom linkMap og legger inn linkene, det er to swportid'er per link Iterator iter = linkMap.values().iterator(); while (iter.hasNext()) { String retning, swportidUt, swportidInn; ArrayList l = (ArrayList)iter.next(); if (l.size() == 2) { // Nå har vi det tilfellet der vi har har funnet linken ut, det skjer for uplink til gw // og for endel servere // Vi har retning og swportid på ene siden, men vi bruker også den samme id'en andre veien da // last hentes bare fra ene siden //retning = (String)l.get(0); swportidUt = (String)l.get(0); String boksbak = (String)l.get(1); swportidInn = swportidUt+"^"+boksbak; // Vi har imidlertid ingen info, så legg enheten til en liste over enheter vi må hente info for, fra gwport //gwboksL.add(boksbak); } else if (l.size() < 3) { continue; } else { //retning = (String)l.get(0); swportidUt = (String)l.get(0); swportidInn = (String)l.get(2); } String linkS = swportidUt+"^"+swportidInn; link.add(linkS); /* if (retning.equals("o")) { up.add(linkS); } else { dn.add(linkS); } */ } /* StringBuffer sb = new StringBuffer(); for (int i=0; i < gwboksL.size(); i++) { String boksid = (String)gwboksL.get(i); sb.append(boksid); if (i != gwboksL.size()-1) sb.append(","); } String sql = "SELECT * FROM gwport JOIN boks USING (boksid) WHERE boksbak='"+thisBoksid+"' AND boksid = (SELECT boksbak FROM swport WHERE swportid IN ("+sb+"))"; outl("gwport: " + sql); */ } { Map newMap = new HashMap(); netboxidSet.add(thisBoksid); newMap.put("boxId", netboxidSet); newMap.put("datatype", "c5000Bandwidth"); loadMap.put("listBoxLoad", newMap); } // Så skrives linkene ut outl("listBoksLinks"); Set linkIdSet = new HashSet(); for (int i=0; i < link.size(); i++) { outl((String)link.get(i) ); linkIdSet.add( ((String)link.get(i)).split("\\^")[0] ); } { Map newMap = new HashMap(); newMap.put("cn", thisBoksid); if (thisKat.equalsIgnoreCase("gw")) rrdGwId.addAll(linkIdSet); else rrdSwId.addAll(linkIdSet); newMap.put("dualGwId", rrdGwId); newMap.put("dualSwId", rrdSwId); loadMap.put("listLinkLoad", newMap); } /* out("up"); for (int i=0; i < up.size(); i++) out("^"+up.get(i) ); outl(""); outl("hz^"); out("dn"); for (int i=0; i < dn.size(); i++) out("^"+dn.get(i) ); outl(""); */ outl("listBoksLinkInfo"); for (int i=0; i < linkInfo.size(); i++) { String[] linkInfoTo = (String[])linkInfo.get(i); out(linkInfoTo[0]); for (int j=1; j < linkInfoTo.length; j++) { out("^"+linkInfoTo[j]); } outl(""); } outl("listLinkVlans"); { Iterator iter = linkVlanMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry me = (Map.Entry)iter.next(); String linkId = (String)me.getKey(); ArrayList l = (ArrayList)me.getValue(); out(linkId); for (int i=0; i < l.size(); i++) { String linkVlanTo = (String)l.get(i); out("^"+linkVlanTo); } outl(""); } } if (!vlanNameMap.isEmpty()) { outl("listVlanNames"); Iterator iter = vlanNameMap.entrySet().iterator(); while (iter.hasNext()) { Map.Entry me = (Map.Entry)iter.next(); String vlan = (String)me.getKey(); String vlanName = (String)me.getValue(); outl(vlan+"^"+vlanName); } } String[] types = { "Boks", "Link" }; for (int typ=0; typ < types.length; typ++) { outl("list"+types[typ]+"Text"); int tcnt=0; Iterator iter = textOut.entrySet().iterator(); while (iter.hasNext()) { Map.Entry me = (Map.Entry)iter.next(); String key = (String)me.getKey();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -