Add Jabaws version string available in Services
[jabaws.git] / webservices / compbio / stat / servlet / ServiceStatus.java
1 package compbio.stat.servlet;\r
2 \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
9 \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
16 \r
17 import org.apache.log4j.Logger;\r
18 \r
19 import compbio.stat.servlet.util.Totals;\r
20 import compbio.ws.client.Services;\r
21 import compbio.ws.client.WSTester;\r
22 \r
23 /**\r
24  * Use cases:\r
25  * <dl>\r
26  * <li>Test web services and display results on the web page</li>\r
27  * </dl>\r
28  * \r
29  * @author pvtroshin\r
30  * \r
31  */\r
32 public class ServiceStatus extends HttpServlet {\r
33 \r
34         private final static Logger log = Logger.getLogger(ServiceStatus.class);\r
35 \r
36 \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
45 \r
46                 // Reconstruct original requesting URL\r
47                 StringBuffer url =  new StringBuffer();\r
48                 url.append(scheme).append("://").append(serverName);\r
49 \r
50                 if ((serverPort != 80) && (serverPort != 443)) {\r
51                         url.append(":").append(serverPort);\r
52                 }\r
53 \r
54                 url.append(contextPath).append(servletPath);\r
55 \r
56                 if (pathInfo != null) {\r
57                         url.append(pathInfo);\r
58                 }\r
59                 if (queryString != null) {\r
60                         url.append("?").append(queryString);\r
61                 }\r
62                 return url.toString();\r
63         }\r
64 \r
65         @Override\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
71 /**\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
90                 }\r
91 */\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
99                         try {\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
106                         } finally {\r
107                                 writer.close();\r
108                         }\r
109                         result.details = testres.toString();\r
110                         testResults.add(result);\r
111                 }\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
117         }\r
118 \r
119 }\r