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.Arrays;
\r
8 import javax.servlet.ServletException;
\r
9 import javax.servlet.http.HttpServlet;
\r
10 import javax.servlet.http.HttpServletRequest;
\r
11 import javax.servlet.http.HttpServletResponse;
\r
13 import org.apache.log4j.Logger;
\r
15 import compbio.util.Util;
\r
16 import compbio.ws.client.Services;
\r
17 import compbio.ws.client.WSTester;
\r
20 * This servlet checks the webservice coming as pathinfo and returns http code
\r
21 * as a reply. If the web service functions correctly then OK (200) is returned.
\r
22 * otherwise Service unavailable (503). When the webservice is not recognised
\r
23 * unknown service error (400) is sent as a response.
\r
25 * If no pathinfo is specified all web services are checked and OK is returned
\r
26 * only if all webservices are functioning.
\r
31 public class HttpCodeResponseServiceStatus extends HttpServlet {
\r
33 private final static Logger log = Logger
\r
34 .getLogger(HttpCodeResponseServiceStatus.class);
\r
37 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
\r
38 throws ServletException, IOException {
\r
40 Services[] servicesToTest = null;
\r
41 String path = req.getPathInfo();
\r
42 if (!Util.isEmpty(path)) {
\r
43 // test a particular service
\r
45 path = path.trim().substring(1);
\r
46 Services service = Services.getService(path);
\r
47 if (service == null) {
\r
49 HttpServletResponse.SC_BAD_REQUEST,
\r
50 "Unknown service name: " + path
\r
51 + "\n Known services are: "
\r
52 + Arrays.toString(Services.values())); // bad
\r
56 servicesToTest = new Services[]{service};
\r
58 // assume all services require testing
\r
59 servicesToTest = Services.values();
\r
62 // find out the application path to give it to the tester
\r
64 // http://localhost:8080/jabaws/HttpCodeResponseServiceStatus/DisEMBLWS
\r
65 // convert it to http://localhost:8080/jabaws
\r
66 StringBuffer jabawspath = req.getRequestURL();
\r
67 jabawspath = jabawspath.delete(
\r
68 jabawspath.indexOf("/"
\r
69 + HttpCodeResponseServiceStatus.class.getSimpleName()),
\r
70 jabawspath.length());
\r
71 boolean operating = false;
\r
72 // save for the future use
\r
73 Services failedService = null;
\r
74 String failMessage = "";
\r
75 for (Services serv : servicesToTest) {
\r
76 String serverPath = jabawspath.toString();
\r
77 StringWriter testres = new StringWriter();
\r
78 PrintWriter writer = new PrintWriter(testres, true);
\r
81 WSTester tester = new WSTester(serverPath, writer);
\r
82 operating = tester.checkService(serv);
\r
83 } catch (Exception e) {
\r
84 log.info(e, e.getCause());
\r
85 writer.println("Fails to connect to a web service: " + serv
\r
86 + " With " + e.getLocalizedMessage() + "\nDetails: ");
\r
87 // if one service fails, everything fails
\r
93 failedService = serv;
\r
94 failMessage = testres.toString();
\r
100 resp.setStatus(HttpServletResponse.SC_OK); // OK
\r
102 // Internal server error - Service Unavailable
\r
103 resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
\r
104 "Service: " + failedService
\r
105 + "\n is not available! Error message:\n "
\r