extensions/net.sf.basedb.opengrid/trunk/src/net/sf/basedb/opengrid/servlet/OpenGridServlet.java

Code
Comments
Other
Rev Date Author Line
4314 20 Jan 17 nicklas 1 package net.sf.basedb.opengrid.servlet;
4314 20 Jan 17 nicklas 2
4314 20 Jan 17 nicklas 3 import java.io.IOException;
4314 20 Jan 17 nicklas 4
4314 20 Jan 17 nicklas 5 import javax.servlet.ServletException;
4314 20 Jan 17 nicklas 6 import javax.servlet.http.HttpServlet;
4314 20 Jan 17 nicklas 7 import javax.servlet.http.HttpServletRequest;
4314 20 Jan 17 nicklas 8 import javax.servlet.http.HttpServletResponse;
4314 20 Jan 17 nicklas 9
4314 20 Jan 17 nicklas 10 import org.json.simple.JSONArray;
4314 20 Jan 17 nicklas 11 import org.json.simple.JSONObject;
4314 20 Jan 17 nicklas 12
4314 20 Jan 17 nicklas 13 import net.sf.basedb.clients.web.extensions.ExtensionsControl;
4314 20 Jan 17 nicklas 14 import net.sf.basedb.clients.web.extensions.service.ServiceControllerAction;
4314 20 Jan 17 nicklas 15 import net.sf.basedb.clients.web.extensions.service.Services;
4314 20 Jan 17 nicklas 16 import net.sf.basedb.core.DbControl;
4314 20 Jan 17 nicklas 17 import net.sf.basedb.core.Include;
4314 20 Jan 17 nicklas 18 import net.sf.basedb.core.ItemNotFoundException;
4314 20 Jan 17 nicklas 19 import net.sf.basedb.core.SessionControl;
4314 20 Jan 17 nicklas 20 import net.sf.basedb.opengrid.AbstractSession;
4314 20 Jan 17 nicklas 21 import net.sf.basedb.opengrid.CmdResult;
4314 20 Jan 17 nicklas 22 import net.sf.basedb.opengrid.OpenGrid;
4314 20 Jan 17 nicklas 23 import net.sf.basedb.opengrid.OpenGridCluster;
4314 20 Jan 17 nicklas 24 import net.sf.basedb.opengrid.OpenGridSession;
4314 20 Jan 17 nicklas 25 import net.sf.basedb.opengrid.json.JSONOption;
4314 20 Jan 17 nicklas 26 import net.sf.basedb.opengrid.json.JSONOptions;
4314 20 Jan 17 nicklas 27 import net.sf.basedb.opengrid.service.OpenGridService;
4314 20 Jan 17 nicklas 28 import net.sf.basedb.util.Values;
4314 20 Jan 17 nicklas 29 import net.sf.basedb.util.error.ThrowableUtil;
4314 20 Jan 17 nicklas 30 import net.sf.basedb.util.extensions.Extension;
4314 20 Jan 17 nicklas 31
4314 20 Jan 17 nicklas 32 /**
4314 20 Jan 17 nicklas 33   Get information about Open Grid Scheduler hosts.
4314 20 Jan 17 nicklas 34   
4314 20 Jan 17 nicklas 35   @author nicklas
4314 20 Jan 17 nicklas 36    @since 1.0
4314 20 Jan 17 nicklas 37  */
4314 20 Jan 17 nicklas 38 public class OpenGridServlet 
4314 20 Jan 17 nicklas 39   extends HttpServlet 
4314 20 Jan 17 nicklas 40 {
4314 20 Jan 17 nicklas 41
4314 20 Jan 17 nicklas 42   private static final long serialVersionUID = 6061966555605197262L;
4314 20 Jan 17 nicklas 43
4314 20 Jan 17 nicklas 44   public OpenGridServlet()
4314 20 Jan 17 nicklas 45   {}
4314 20 Jan 17 nicklas 46
4314 20 Jan 17 nicklas 47   @SuppressWarnings("unchecked")
4314 20 Jan 17 nicklas 48   @Override
4314 20 Jan 17 nicklas 49   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
4314 20 Jan 17 nicklas 50     throws ServletException, IOException 
4314 20 Jan 17 nicklas 51   {
4314 20 Jan 17 nicklas 52     String cmd = req.getParameter("cmd");
4314 20 Jan 17 nicklas 53     ServletUtil.setJsonResponseHeaders(resp);
4314 20 Jan 17 nicklas 54
4314 20 Jan 17 nicklas 55     JSONObject json = new JSONObject();
4314 20 Jan 17 nicklas 56     json.put("status", "ok");
4314 20 Jan 17 nicklas 57   
4314 20 Jan 17 nicklas 58     final SessionControl sc = ServletUtil.getSessionControl(req);
4314 20 Jan 17 nicklas 59     DbControl dc = null;
4314 20 Jan 17 nicklas 60     AbstractSession<?> session = null;
4314 20 Jan 17 nicklas 61     try
4314 20 Jan 17 nicklas 62     {
4314 20 Jan 17 nicklas 63       if ("GetHostInfo".equals(cmd))
4314 20 Jan 17 nicklas 64       {
4314 20 Jan 17 nicklas 65         dc = sc.newDbControl();
4314 20 Jan 17 nicklas 66         ServletUtil.checkPermission(dc);
4314 20 Jan 17 nicklas 67         
4314 20 Jan 17 nicklas 68         if (Values.getBoolean(req.getParameter("reload")))
4314 20 Jan 17 nicklas 69         {
4742 09 Apr 18 nicklas 70           ExtensionsControl ec = ExtensionsControl.get(dc);
4742 09 Apr 18 nicklas 71           Services.restart((Extension<ServiceControllerAction>)ec.getExtension("net.sf.basedb.opengrid.service"));
4742 09 Apr 18 nicklas 72           Throwable t = ec.getLastExtensionError("net.sf.basedb.opengrid.service");
4742 09 Apr 18 nicklas 73           if (t != null) throw t;
4314 20 Jan 17 nicklas 74         }
4314 20 Jan 17 nicklas 75         
4314 20 Jan 17 nicklas 76         String hostId = req.getParameter("hostId");
4317 23 Jan 17 nicklas 77         JSONOptions includeClusterInfo = new JSONOptions(dc);
4314 20 Jan 17 nicklas 78         includeClusterInfo.enable(JSONOption.CLUSTER_INFO);
4314 20 Jan 17 nicklas 79         includeClusterInfo.enable(JSONOption.NODE_INFO);
4317 23 Jan 17 nicklas 80         if (Values.getBoolean(req.getParameter("jobAgentDetails")))
4317 23 Jan 17 nicklas 81         {
4317 23 Jan 17 nicklas 82           includeClusterInfo.enable(JSONOption.JOBAGENT_INFO);
4317 23 Jan 17 nicklas 83         }
4314 20 Jan 17 nicklas 84         if (hostId == null)
4314 20 Jan 17 nicklas 85         {
4314 20 Jan 17 nicklas 86           JSONArray jsonHosts = new JSONArray();
4314 20 Jan 17 nicklas 87           for (OpenGridCluster host : OpenGridService.getInstance().getClusters(dc, Include.ALL))
4314 20 Jan 17 nicklas 88           {
4314 20 Jan 17 nicklas 89             JSONObject jsonHost = host.asJSONObject(includeClusterInfo);
4314 20 Jan 17 nicklas 90             jsonHosts.add(jsonHost);
4314 20 Jan 17 nicklas 91           }
4314 20 Jan 17 nicklas 92           json.put("hosts", jsonHosts);
4314 20 Jan 17 nicklas 93         }
4314 20 Jan 17 nicklas 94         else
4314 20 Jan 17 nicklas 95         {
4314 20 Jan 17 nicklas 96           OpenGridCluster host = OpenGridService.getInstance().getClusterById(dc, hostId);
4314 20 Jan 17 nicklas 97           if (host == null)
4314 20 Jan 17 nicklas 98           {
4314 20 Jan 17 nicklas 99             throw new ItemNotFoundException("OpenGridCluster[id="+hostId+"]");
4314 20 Jan 17 nicklas 100           }
4314 20 Jan 17 nicklas 101           JSONObject jsonHost = host.asJSONObject(includeClusterInfo);
4314 20 Jan 17 nicklas 102           json.put("host", jsonHost);
4314 20 Jan 17 nicklas 103         }
4314 20 Jan 17 nicklas 104       }
4314 20 Jan 17 nicklas 105     }
4314 20 Jan 17 nicklas 106     catch (Throwable t)
4314 20 Jan 17 nicklas 107     {
4314 20 Jan 17 nicklas 108       t.printStackTrace();
4314 20 Jan 17 nicklas 109       json.clear();
4314 20 Jan 17 nicklas 110       json.put("status", "error");
4314 20 Jan 17 nicklas 111       json.put("message", t.getMessage());
4314 20 Jan 17 nicklas 112       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
4314 20 Jan 17 nicklas 113     }
4314 20 Jan 17 nicklas 114     finally
4314 20 Jan 17 nicklas 115     {
4314 20 Jan 17 nicklas 116       OpenGrid.close(session);
4314 20 Jan 17 nicklas 117       if (dc != null) dc.close();
4314 20 Jan 17 nicklas 118       if (json != null) json.writeJSONString(resp.getWriter());
4314 20 Jan 17 nicklas 119     }
4314 20 Jan 17 nicklas 120     
4314 20 Jan 17 nicklas 121   }
4314 20 Jan 17 nicklas 122   
4314 20 Jan 17 nicklas 123   @Override
4314 20 Jan 17 nicklas 124   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
4314 20 Jan 17 nicklas 125     throws ServletException, IOException 
4314 20 Jan 17 nicklas 126   {
4314 20 Jan 17 nicklas 127     String cmd = req.getParameter("cmd");
4314 20 Jan 17 nicklas 128     ServletUtil.setJsonResponseHeaders(resp);
4314 20 Jan 17 nicklas 129     
4314 20 Jan 17 nicklas 130     JSONObject json = new JSONObject();
4314 20 Jan 17 nicklas 131     json.put("status", "ok");
4314 20 Jan 17 nicklas 132     JSONArray jsonMessages = new JSONArray();
4314 20 Jan 17 nicklas 133   
4314 20 Jan 17 nicklas 134     final SessionControl sc = ServletUtil.getSessionControl(req);
4314 20 Jan 17 nicklas 135     DbControl dc = null;
4314 20 Jan 17 nicklas 136     OpenGridSession session = null;
4314 20 Jan 17 nicklas 137     try
4314 20 Jan 17 nicklas 138     {
4314 20 Jan 17 nicklas 139       if ("ExecuteCmd".equals(cmd))
4314 20 Jan 17 nicklas 140       {
4314 20 Jan 17 nicklas 141         dc = sc.newDbControl();
4314 20 Jan 17 nicklas 142         ServletUtil.checkPermission(dc);
4314 20 Jan 17 nicklas 143         
4314 20 Jan 17 nicklas 144         JSONObject jsonReq = ServletUtil.parseRequest(req);
4314 20 Jan 17 nicklas 145
4314 20 Jan 17 nicklas 146         String hostId = (String)jsonReq.get("hostId");
4314 20 Jan 17 nicklas 147         String hostCmd = (String)jsonReq.get("cmd");
4314 20 Jan 17 nicklas 148         
4314 20 Jan 17 nicklas 149         OpenGridCluster host = OpenGridService.getInstance().getClusterById(dc, hostId);
4314 20 Jan 17 nicklas 150         if (host == null)
4314 20 Jan 17 nicklas 151         {
4314 20 Jan 17 nicklas 152           throw new ItemNotFoundException("OpenGridCluster[id="+hostId+"]");
4314 20 Jan 17 nicklas 153         }
4314 20 Jan 17 nicklas 154         
4314 20 Jan 17 nicklas 155         session = host.connect(5);
4314 20 Jan 17 nicklas 156         CmdResult<String> result = session.executeCmd(hostCmd, 10);
4314 20 Jan 17 nicklas 157         json.put("result", result.asJSONObject(JSONOptions.DEFAULT));
4314 20 Jan 17 nicklas 158       }
4314 20 Jan 17 nicklas 159     }
4314 20 Jan 17 nicklas 160     catch (Throwable t)
4314 20 Jan 17 nicklas 161     {
4314 20 Jan 17 nicklas 162       t.printStackTrace();
4314 20 Jan 17 nicklas 163       json.clear();
4314 20 Jan 17 nicklas 164       json.put("status", "error");
4314 20 Jan 17 nicklas 165       json.put("message", t.getMessage());
4314 20 Jan 17 nicklas 166       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
4314 20 Jan 17 nicklas 167     }
4314 20 Jan 17 nicklas 168     finally
4314 20 Jan 17 nicklas 169     {
4314 20 Jan 17 nicklas 170       if (dc != null) dc.close();
4314 20 Jan 17 nicklas 171       OpenGrid.close(session);
4314 20 Jan 17 nicklas 172       json.writeJSONString(resp.getWriter());
4314 20 Jan 17 nicklas 173     }
4314 20 Jan 17 nicklas 174   }
4314 20 Jan 17 nicklas 175
4314 20 Jan 17 nicklas 176 }