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 doHead(HttpServletRequest req, HttpServletResponse resp)
\r
38 throws ServletException, IOException {
\r
43 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
\r
44 throws ServletException, IOException {
\r
46 Services[] servicesToTest = null;
\r
47 String path = req.getPathInfo();
\r
48 if (!Util.isEmpty(path)) {
\r
49 // test a particular service
\r
51 path = path.trim().substring(1);
\r
52 Services service = Services.getService(path);
\r
53 if (service == null) {
\r
55 HttpServletResponse.SC_BAD_REQUEST,
\r
56 "Unknown service name: " + path
\r
57 + "\n Known services are: "
\r
58 + Arrays.toString(Services.values())); // bad
\r
62 servicesToTest = new Services[]{service};
\r
64 // assume all services require testing
\r
65 servicesToTest = Services.values();
\r
68 // find out the application path to give it to the tester
\r
70 // http://localhost:8080/jabaws/HttpCodeResponseServiceStatus/DisEMBLWS
\r
71 // convert it to http://localhost:8080/jabaws
\r
72 StringBuffer jabawspath = req.getRequestURL();
\r
73 jabawspath = jabawspath.delete(
\r
74 jabawspath.indexOf("/"
\r
75 + HttpCodeResponseServiceStatus.class.getSimpleName()),
\r
76 jabawspath.length());
\r
77 boolean operating = false;
\r
78 // save for the future use
\r
79 Services failedService = null;
\r
80 String failMessage = "";
\r
81 for (Services serv : servicesToTest) {
\r
82 String serverPath = jabawspath.toString();
\r
83 StringWriter testres = new StringWriter();
\r
84 PrintWriter writer = new PrintWriter(testres, true);
\r
87 WSTester tester = new WSTester(serverPath, writer);
\r
88 operating = tester.checkService(serv);
\r
89 } catch (Exception e) {
\r
90 log.info(e, e.getCause());
\r
91 writer.println("Fails to connect to a web service: " + serv
\r
92 + " With " + e.getLocalizedMessage() + "\nDetails: ");
\r
93 // if one service fails, everything fails
\r
99 failedService = serv;
\r
100 failMessage = testres.toString();
\r
106 resp.setStatus(HttpServletResponse.SC_OK); // OK
\r
108 // Internal server error - Service Unavailable
\r
109 resp.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE,
\r
110 "Service: " + failedService
\r
111 + "\n is not available! Error message:\n "
\r