📄 vpserver.java
字号:
/* * NTNU ITEA "nav" prosjekt * * Server-modul for vlanPlot * * Skrvet av: Kristian Eide <kreide@online.no> * */import no.ntnu.nav.ConfigParser.*;import no.ntnu.nav.Database.*;import no.ntnu.nav.Path;import java.io.*;import java.util.*;import java.sql.*;import javax.servlet.*;import javax.servlet.http.*;public class vPServer extends HttpServlet{ public static final String scriptName = "vPServer"; public void init(ServletConfig conf) throws ServletException { super.init(conf); } public void service(HttpServletRequest req, HttpServletResponse res) throws IOException { //Com com = new Com(); res.setContentType("text/html"); res.setHeader("nav-template-wrapper", "false"); ServletOutputStream out = res.getOutputStream(); String dbConfigFile = getServletContext().getInitParameter("dbConfigFile"); String configFile = getServletContext().getInitParameter("configFile"); String navConfigFile = getServletContext().getInitParameter("navConfigFile"); ConfigParser cp, dbCp, navCp; try { cp = new ConfigParser(Path.sysconfdir + File.separatorChar + configFile); } catch (IOException e) { out.println("Error, could not read config file: " + Path.sysconfdir + File.separatorChar + configFile); return; } try { dbCp = new ConfigParser(Path.sysconfdir + File.separatorChar + dbConfigFile); } catch (IOException e) { out.println("Error, could not read database config file: " + Path.sysconfdir + File.separatorChar + dbConfigFile); return; } try { navCp = new ConfigParser(Path.sysconfdir + File.separatorChar + navConfigFile); } catch (IOException e) { out.println("Error, could not read nav config file: " + Path.sysconfdir + File.separatorChar + navConfigFile); return; } // Åpne databasen if (!Database.openConnection(dbCp.get("dbhost"), dbCp.get("dbport"), dbCp.get("db_nav"), dbCp.get("script_"+scriptName), dbCp.get("userpw_"+dbCp.get("script_"+scriptName)))) { out.println("Error, could not connect to database!"); return; } HttpSession session = req.getSession(true); // Check user String user = req.getHeader("x-authenticated-user"); boolean hasAdmin = user != null && user.length() > 0; SqlBoks.req = req; SqlBoks.res = res; SqlBoks.out = out; SqlAdmin.req = req; SqlAdmin.out = out; String section = req.getParameter("section"); String request = req.getParameter("request"); //try { if (section != null && request != null) { //StringTokenizer st = new StringTokenizer(request, ","); String[] r = request.split(","); if (section.equals("boks")) { SqlBoks.serviceRequest(r, user, hasAdmin, cp, navCp); } else if (section.equals("admin")) { if (!hasAdmin) { failAuth(out); return; } SqlAdmin.serviceRequest(r, user); } } else { out.println("Missing parameter."); } //} catch (Exception e) { // out.println("Error, exception thrown: " + e.getMessage()); //} out.close(); //Close the output stream Database.closeConnection(); // Close the SQL connection } private void failAuth(ServletOutputStream out) throws IOException { out.println("Error, failed authentication!"); }}class SqlBoks{ public static HttpServletRequest req; public static HttpServletResponse res; public static ServletOutputStream out; private static String rrdTime; private static String rrdType; private static ConfigParser navCp; private static LinkedList reqQ = new LinkedList(); static void serviceRequest(String[] reqA, String user, boolean hasAdmin, ConfigParser cp, ConfigParser _navCp) throws IOException { reqQ.addAll(Arrays.asList(reqA)); navCp = _navCp; rrdTime = req.getParameter("time"); rrdType = req.getParameter("type"); while (!reqQ.isEmpty()) { String req = (String)reqQ.removeFirst(); try { if (req.equals("listConfig")) listConfig(user, hasAdmin, cp, navCp); else if (req.equals("listRouters")) listRouters(); else if (req.equals("listRouterGroups")) listRouterGroups(); else if (req.equals("listRouterXY")) listRouterXY(); else if (req.equals("listBoks")) listBoks(); else if (req.equals("listLoad")) listLoad(); else outl("Unsupported request string: " + req); } catch (SQLException e) { outl("<pre>"); outl("Got SQLException: " + e.getMessage()); e.printStackTrace(new PrintStream(out)); outl("Stack trace complete."); outl("</pre>"); } } } // Config for vP static void listConfig(String user, boolean hasAdmin, ConfigParser cp, ConfigParser navCp) throws SQLException { outl("listConfig"); String vpNetName = cp.get("vpNetName"); String vpNetLink = cp.get("vpNetLink"); outl("vpNetName^"+vpNetName); outl("vpNetLink^"+vpNetLink); outl("domainSuffix^"+navCp.get("DOMAIN_SUFFIX")); outl("userName^"+user); outl("hasAdmin^"+hasAdmin); } // Lister ut alle routere på topp-nivå og linker/vlan mellom dem static void listRouters() throws SQLException { HashMap text = new HashMap(); HashMap textOut = new HashMap(); /* listRouterText t0,2 t1,"sysName: ^ !!Kat: ^", 569, 568, 567 t2,"sysName: ^ !!Kat: ^", -92, -186 569,hb-gw,GW 568,hb-gw2,GW 567,sb-gw,GW -92,fddi,stam -186,isdn,stam listRouterLinkText t0,2 */ // && = variabelnavn, ## = bytt ut med gitt verdi, !! = \n /* String gwBoksText = "boksid: &&boksid!!sysName: &&sysName!!Kat: ##!!Last: &&boksLast"; String defBoksText = "sysName: &&sysName!!Kat: ##!!Ikke-gw-boks"; String[] gwBoksFields = { "kat", }; String[] defBoksFields = { "kat", }; String gwLinkText = "gwportid: &&linkid!!&&sysNameFrom -> &&sysNameTo!!Kat: ##!!Interface: ##!!Speed: ##!!OSPF: ##!!Last: &&linkLastPst (&&linkLast)"; String defLinkText = "gwportid: &&linkid!!&&sysNameFrom -> &&sysNameTo!!Kat: ##!!Last: &&linkLastPst (&&linkLast)"; String[] linkLinkFields = { "kat", "interf", "speed", "metric" }; String[] defLinkFields = { "kat", }; String cFields = ""; { HashSet hs = new HashSet(); for (int i=0;i<gwBoksFields.length;i++) if (hs.add(gwBoksFields[i])) cFields += ","+gwBoksFields[i]; for (int i=0;i<defBoksFields.length;i++) if (hs.add(defBoksFields[i])) cFields += ","+defBoksFields[i]; for (int i=0;i<linkLinkFields.length;i++) if (hs.add(linkLinkFields[i])) cFields += ","+linkLinkFields[i]; for (int i=0;i<defLinkFields.length;i++) if (hs.add(defLinkFields[i])) cFields += ","+defLinkFields[i]; } */ // && = variabelnavn, ## = bytt ut med gitt verdi, !! = \n { String[] s = { "Name: &&sysname!!Category: ##!!Type: ##!!Room: ##!!CPU load: &&boksLast", "catid", "typename", "roomid", }; text.put("gwBoks", s); text.put("gswBoks", s); } { String[] s = { "Name: &&sysName!!Category: core!!Net addr: ##", "netaddr", }; text.put("coreBoks", s); } { String[] s = { "Name: &&sysname!!Category: ##", "catid", }; text.put("defBoks", s); } // Linker { String[] s = { "Link: &&sysNameFrom -> &&sysNameTo!!Interface: ##!!IP address: ##!!Net ident: ##!!Capacity: ## Mbps!!Metric: ##!!Load: &&linkLastPst (&&linkLast)", "interface", "gwip", "netident", "speed", "metric", }; text.put("gw-gwLink", s); } { String[] s = { "Link: &&sysNameFrom -> &&sysNameTo!!Interface: ##!!IP address: ##!!Net ident: ##!!Capacity: ## Mbps!!Metric: ##!!Load: &&linkLastPst (&&linkLast)", "interface", "gwip", "netident", "speed", "metric", }; text.put("gw-coreLink", s); text.put("core-gwLink", s); text.put("gsw-coreLink", s); text.put("core-gswLink", s); text.put("gsw-defLink", s); text.put("def-gswLink", s); text.put("gw-defLink", s); text.put("def-gwLink", s); text.put("core-defLink", s); text.put("def-coreLink", s); text.put("def-defLink", s); } /* { String[] s = { "&&sysNameFrom -> &&sysNameTo!!Interface: ##!!OSPF: ##!!Nettadr: ##!!Capacity: ##!!Last: &&linkLastPst (&&linkLast)!!(gw->def)", "interface", "metric", "netaddr", "speed" }; text.put("gw-defLink", s); } { String[] s = { "&&sysNameFrom -> &&sysNameTo!!OSPF: ##!!Nettadr: ##!!Capacity: ##!!Last: &&linkLastPst (&&linkLast)!!(stam->gw)", "metric", "netaddr", "speed" }; text.put("stam-gwLink", s); } { String[] s = { "&&sysNameFrom -> &&sysNameTo!!OSPF: ##!!Nettadr: ##!!Capacity: ##!!Last: &&linkLastPst (&&linkLast)!!(def->gw)", "metric", "netaddr", "speed" }; text.put("def-gwLink", s); } { String[] s = { "&&sysNameFrom -> &&sysNameTo!!Nettadr: ##!!Capacity: ##!!Last: &&linkLastPst (&&linkLast)!!(def->def)", "netaddr", "speed" }; text.put("def-defLink", s); } */ String cFields = ""; { HashSet hs = new HashSet(); String[] aa = { "gwportid", "netboxid", "sysname", "interface", "prefixid", "nettype", "catid", "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(); textOut.put(key, new ArrayList()); String[] s = (String[])me.getValue(); for (int i=1;i<s.length;i++) if (hs.add(s[i].toLowerCase())) cFields += ","+s[i].toLowerCase(); } } ResultSet rs = Database.query("SELECT gwportid,netboxid,sysname,interface,prefix.prefixid,nettype,catid,netident"+cFields+" FROM gwport JOIN gwportprefix USING(gwportid) JOIN prefix USING (prefixid) JOIN vlan USING(vlanid) JOIN module USING (moduleid) JOIN netbox USING (netboxid) JOIN type USING(typeid) WHERE nettype NOT IN ('loopback','unknown','lan') ORDER BY netboxid"); // SELECT gwportid,boksid,sysName,gwport.prefiksid,nettype,kat,nettident FROM (gwport JOIN prefiks USING (prefiksid)) JOIN boks USING (boksid) WHERE nettype NOT IN ('loopback','ukjent','lan') ORDER BY boksid //SELECT gwportid,boksid,sysName,gwport.prefiksid,komm FROM (gwport JOIN prefiks USING (prefiksid)) JOIN boks USING (boksid) WHERE gwport.prefiksid>0 ORDER BY boksid //SELECT gwportid,boksid,sysName,gwport.prefiksid,komm FROM (gwport JOIN prefiks USING (prefiksid)) JOIN boks USING (boksid); //SELECT gwportid,boksid,sysName,gwport.prefiksid FROM gwport JOIN boks USING (boksid) ORDER BY boksid //SELECT gwportid,boksid,sysName,gwport.prefiksid FROM gwport JOIN boks USING (boksid) WHERE gwport.prefiksid IN (SELECT prefiksid FROM gwport GROUP BY prefiksid HAVING COUNT(prefiksid)>=2) ORDER BY boksid HashMap pRouters = new HashMap(); HashMap sysNames = new HashMap(); ArrayList links = new ArrayList(); ArrayList l=null; int curid=0; HashMap linkInfo = new HashMap(); HashMap textBoks = new HashMap(); ArrayList routerBoksIds = new ArrayList(); ArrayList otherBoksIds = new ArrayList(); HashMap textLinks = new HashMap(); //ArrayList routerLinkIds = new ArrayList(); //ArrayList otherLinkIds = new ArrayList(); // Gå gjennom data fra databasen og legg det i datastrukturene klar for å skrives ut HashSet boksDupe = new HashSet(); while (rs.next()) { Integer gwportid = new Integer(rs.getString("gwportid")); Integer boksid = new Integer(rs.getString("netboxid")); Integer prefiksid = new Integer(rs.getString("prefixid")); String nettype = rs.getString("nettype"); String kat = rs.getString("catid").toLowerCase(); if (!pRouters.containsKey(prefiksid)) { // Ny prefiksid oppdaget, lag tom liste for den og legg til enheten pRouters.put(prefiksid, new ArrayList() ); if ("static".equals(nettype)) continue; if (!nettype.equals("link")) { String nettident = rs.getString("netident");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -