1 /* Copyright (c) 2013 Alexander Sherstnev
\r
2 * Copyright (c) 2011 Peter Troshin
\r
4 * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 2.0
\r
6 * This library is free software; you can redistribute it and/or modify it under the terms of the
\r
7 * Apache License version 2 as published by the Apache Software Foundation
\r
9 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
\r
10 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache
\r
11 * License for more details.
\r
13 * A copy of the license is in apache_license.txt. It is also available here:
\r
14 * @see: http://www.apache.org/licenses/LICENSE-2.0.txt
\r
16 * Any republication or derived work distributed in source code form
\r
17 * must include this copyright and license notice.
\r
20 package compbio.stat.servlet;
\r
22 import java.io.IOException;
\r
23 import java.io.PrintWriter;
\r
24 import java.io.StringWriter;
\r
25 import java.lang.management.ManagementFactory;
\r
26 import java.net.InetAddress;
\r
27 import java.net.UnknownHostException;
\r
28 import java.util.ArrayList;
\r
29 import java.util.Iterator;
\r
30 import java.util.List;
\r
31 import java.util.Set;
\r
32 import java.util.Collections;
\r
34 import javax.management.AttributeNotFoundException;
\r
35 import javax.management.InstanceNotFoundException;
\r
36 import javax.management.MBeanException;
\r
37 import javax.management.MBeanServer;
\r
38 import javax.management.MalformedObjectNameException;
\r
39 import javax.management.ObjectName;
\r
40 import javax.management.Query;
\r
41 import javax.management.ReflectionException;
\r
42 import javax.servlet.RequestDispatcher;
\r
43 import javax.servlet.ServletException;
\r
44 import javax.servlet.http.HttpServlet;
\r
45 import javax.servlet.http.HttpServletRequest;
\r
46 import javax.servlet.http.HttpServletResponse;
\r
48 import org.apache.log4j.Logger;
\r
50 import compbio.ws.client.Services;
\r
51 import compbio.ws.client.WSTester;
\r
56 * <li>Test web services and display results on the web page</li>
\r
63 public class ServiceStatus extends HttpServlet {
\r
65 private final static Logger log = Logger.getLogger(ServiceStatus.class);
\r
67 private List<String> getEndPoints() throws MalformedObjectNameException, NullPointerException, UnknownHostException,
\r
68 AttributeNotFoundException, InstanceNotFoundException, MBeanException, ReflectionException {
\r
69 MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
\r
70 Set<ObjectName> objs = mbs.queryNames(new ObjectName("*:type=Connector,*"),
\r
71 Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));
\r
72 List<String> endPoints = new ArrayList<String>();
\r
73 for (Iterator<ObjectName> i = objs.iterator(); i.hasNext();) {
\r
74 ObjectName obj = i.next();
\r
75 String scheme = mbs.getAttribute(obj, "scheme").toString();
\r
76 String port = obj.getKeyProperty("port");
\r
77 String hostname = InetAddress.getLocalHost().getHostName();
\r
78 endPoints.add(scheme + "://" + hostname + ":" + port);
\r
84 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
\r
86 * // PROBLEM: the code tries to test not WS endpoints on an internal
\r
87 * Tomcat, but on an external // endpoints with wrong info on the
\r
88 * proxing StringBuffer jabawspath = req.getRequestURL(); jabawspath =
\r
89 * jabawspath.delete(jabawspath.lastIndexOf("/"), jabawspath.length());
\r
90 * String serverPath = jabawspath.toString();
\r
92 List<String> eps = new ArrayList<String>();
\r
94 eps = getEndPoints();
\r
95 } catch (MalformedObjectNameException e) {
\r
96 // TODO Auto-generated catch block
\r
97 e.printStackTrace();
\r
98 } catch (AttributeNotFoundException e) {
\r
99 // TODO Auto-generated catch block
\r
100 e.printStackTrace();
\r
101 } catch (InstanceNotFoundException e) {
\r
102 // TODO Auto-generated catch block
\r
103 e.printStackTrace();
\r
104 } catch (NullPointerException e) {
\r
105 // TODO Auto-generated catch block
\r
106 e.printStackTrace();
\r
107 } catch (MBeanException e) {
\r
108 // TODO Auto-generated catch block
\r
109 e.printStackTrace();
\r
110 } catch (ReflectionException e) {
\r
111 // TODO Auto-generated catch block
\r
112 e.printStackTrace();
\r
114 if (1 != eps.size()) {
\r
115 log.info(eps.size() + "EndPoints found");
\r
116 //System.out.println(" " + eps.size() + " EndPoints found");
\r
117 for (String endpoint : eps) {
\r
118 log.info(eps.size() + "EndPoint is " + endpoint);
\r
119 //System.out.println(" EndPoint is " + endpoint);
\r
123 String serverPath = new String();
\r
124 for (String endpoint : eps) {
\r
125 serverPath = endpoint + req.getContextPath();
\r
127 //System.out.println("Testing services at " + serverPath);
\r
129 List<ServiceTestResult> testResults = new ArrayList<ServiceTestResult>();
\r
130 long startTime = System.nanoTime();
\r
131 for (Services service : Services.values()) {
\r
132 StringWriter testres = new StringWriter();
\r
133 PrintWriter writer = new PrintWriter(testres, true);
\r
134 WSTester tester = new WSTester(serverPath, writer);
\r
135 ServiceTestResult result = new ServiceTestResult(service);
\r
137 result.failed = tester.checkService(service);
\r
138 } catch (Exception e) {
\r
139 log.info(e, e.getCause());
\r
140 String mess = "Fails to connect to the web service: " + service + ". Reason: ";
\r
141 writer.println(mess + e.getLocalizedMessage() + "\nDetails: ");
\r
142 e.printStackTrace(writer);
\r
146 result.details = testres.toString();
\r
147 testResults.add(result);
\r
149 req.setAttribute("results", testResults);
\r
150 long endTime = System.nanoTime();
\r
151 req.setAttribute("timeexec", (endTime - startTime) / 1000000);
\r
152 RequestDispatcher rd = req.getRequestDispatcher("statpages/ServicesStatus.jsp");
\r
153 rd.forward(req, resp);
\r