1 package compbio.stat.servlet;
\r
3 import java.io.IOException;
\r
4 import java.io.PrintWriter;
\r
5 import java.io.StringWriter;
\r
6 import java.util.ArrayList;
\r
7 import java.util.List;
\r
8 import java.util.Collections;
\r
10 import javax.servlet.RequestDispatcher;
\r
11 import javax.servlet.ServletException;
\r
12 import javax.servlet.http.HttpServlet;
\r
13 import javax.servlet.http.HttpServletRequest;
\r
14 import javax.servlet.http.HttpServletResponse;
\r
15 import javax.servlet.ServletContext;
\r
17 import org.apache.log4j.Logger;
\r
19 import compbio.stat.servlet.util.Totals;
\r
20 import compbio.ws.client.Services;
\r
21 import compbio.ws.client.WSTester;
\r
26 * <li>Test web services and display results on the web page</li>
\r
32 public class ServiceStatus extends HttpServlet {
\r
34 private final static Logger log = Logger.getLogger(ServiceStatus.class);
\r
37 private static String getURL(HttpServletRequest req) {
\r
38 String scheme = req.getScheme(); // http
\r
39 String serverName = req.getServerName(); // hostname.com
\r
40 int serverPort = req.getServerPort(); // 80
\r
41 String contextPath = req.getContextPath(); // /mywebapp
\r
42 String servletPath = req.getServletPath(); // /servlet/MyServlet
\r
43 String pathInfo = req.getPathInfo(); // /a/b;c=123
\r
44 String queryString = req.getQueryString(); // d=789
\r
46 // Reconstruct original requesting URL
\r
47 StringBuffer url = new StringBuffer();
\r
48 url.append(scheme).append("://").append(serverName);
\r
50 if ((serverPort != 80) && (serverPort != 443)) {
\r
51 url.append(":").append(serverPort);
\r
54 url.append(contextPath).append(servletPath);
\r
56 if (pathInfo != null) {
\r
57 url.append(pathInfo);
\r
59 if (queryString != null) {
\r
60 url.append("?").append(queryString);
\r
62 return url.toString();
\r
66 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
\r
67 throws ServletException, IOException {
\r
68 StringBuffer jabawspath = req.getRequestURL();
\r
69 jabawspath = jabawspath.delete(jabawspath.lastIndexOf("/"), jabawspath.length());
\r
70 String serverPath = jabawspath.toString();
\r
72 String host = java.net.InetAddress.getLocalHost().getCanonicalHostName();
\r
73 System.out.println("Testing services at " + req.getRequestURL());
\r
74 System.out.println("Really: Testing services at " + serverPath);
\r
75 System.out.println(" serverPath2 is " + getURL(req));
\r
76 System.out.println(" Context Path is " + req.getContextPath());
\r
77 System.out.println(" Host is " + host);
\r
78 System.out.println(" Request URI is " + req.getRequestURI());
\r
79 System.out.println(" Servlet Path is " + req.getServletPath());
\r
80 System.out.println(" Path Info is " + req.getPathInfo());
\r
81 System.out.println(" Local Port is " + req.getLocalPort());
\r
82 System.out.println(" Remote Port is " + req.getRemotePort());
\r
83 System.out.println(" Local address is " + req.getLocalAddr());
\r
84 System.out.println(" Remote address is " + req.getRemoteAddr());
\r
85 @SuppressWarnings("unchecked")
\r
86 List<String> list = Collections.list(req.getHeaderNames());
\r
87 System.out.println(" HTTP header names are " + list.toString());
\r
88 for (String hdr : list) {
\r
89 System.out.println(" " + hdr + " header is " + req.getHeader(hdr));
\r
92 List<ServiceTestResult> testResults = new ArrayList<ServiceTestResult>();
\r
93 long startTime = System.nanoTime();
\r
94 for (Services service : Services.values()) {
\r
95 StringWriter testres = new StringWriter();
\r
96 PrintWriter writer = new PrintWriter(testres, true);
\r
97 WSTester tester = new WSTester(serverPath, writer);
\r
98 ServiceTestResult result = new ServiceTestResult(service);
\r
100 result.failed = tester.checkService(service);
\r
101 } catch (Exception e) {
\r
102 log.info(e, e.getCause());
\r
103 String mess = "Fails to connect to the web service: " + service + ". Reason: ";
\r
104 writer.println(mess + e.getLocalizedMessage() + "\nDetails: ");
\r
105 e.printStackTrace(writer);
\r
109 result.details = testres.toString();
\r
110 testResults.add(result);
\r
112 req.setAttribute("results", testResults);
\r
113 long endTime = System.nanoTime();
\r
114 req.setAttribute("timeexec", (endTime - startTime) / 1000000);
\r
115 RequestDispatcher rd = req.getRequestDispatcher("statpages/ServicesStatus.jsp");
\r
116 rd.forward(req, resp);
\r