extensions/net.sf.basedb.varsearch/trunk/src/net/sf/basedb/varsearch/servlet/AdminServlet.java

Code
Comments
Other
Rev Date Author Line
6163 05 Mar 21 nicklas 1 package net.sf.basedb.varsearch.servlet;
6163 05 Mar 21 nicklas 2
6163 05 Mar 21 nicklas 3 import java.io.IOException;
6163 05 Mar 21 nicklas 4
6163 05 Mar 21 nicklas 5 import javax.servlet.ServletException;
6163 05 Mar 21 nicklas 6 import javax.servlet.http.HttpServlet;
6163 05 Mar 21 nicklas 7 import javax.servlet.http.HttpServletRequest;
6163 05 Mar 21 nicklas 8 import javax.servlet.http.HttpServletResponse;
6163 05 Mar 21 nicklas 9
6700 26 Apr 22 nicklas 10 import org.apache.lucene.util.Version;
6163 05 Mar 21 nicklas 11 import org.json.simple.JSONArray;
6163 05 Mar 21 nicklas 12 import org.json.simple.JSONObject;
6163 05 Mar 21 nicklas 13
6168 12 Mar 21 nicklas 14 import net.sf.basedb.core.Application;
6163 05 Mar 21 nicklas 15 import net.sf.basedb.core.BaseException;
6163 05 Mar 21 nicklas 16 import net.sf.basedb.core.DbControl;
6163 05 Mar 21 nicklas 17 import net.sf.basedb.core.ItemList;
6163 05 Mar 21 nicklas 18 import net.sf.basedb.core.SessionControl;
6164 05 Mar 21 nicklas 19 import net.sf.basedb.core.SimpleProgressReporter;
6163 05 Mar 21 nicklas 20 import net.sf.basedb.util.Values;
6163 05 Mar 21 nicklas 21 import net.sf.basedb.util.error.ThrowableUtil;
6163 05 Mar 21 nicklas 22 import net.sf.basedb.varsearch.JsonUtil;
6163 05 Mar 21 nicklas 23 import net.sf.basedb.varsearch.VarSearch;
6163 05 Mar 21 nicklas 24 import net.sf.basedb.varsearch.dao.Annotationtype;
6163 05 Mar 21 nicklas 25 import net.sf.basedb.varsearch.dao.Itemlist;
6163 05 Mar 21 nicklas 26 import net.sf.basedb.varsearch.index.LuceneIndex;
6167 09 Mar 21 nicklas 27 import net.sf.basedb.varsearch.index.LuceneIndex.AutoUpdate;
6544 19 Jan 22 nicklas 28 import net.sf.basedb.varsearch.index.OncoArrayIndex;
6163 05 Mar 21 nicklas 29 import net.sf.basedb.varsearch.query.QueryCache;
6163 05 Mar 21 nicklas 30 import net.sf.basedb.varsearch.service.VarSearchService;
6163 05 Mar 21 nicklas 31
6163 05 Mar 21 nicklas 32 /**
6163 05 Mar 21 nicklas 33   Admin functions.
6163 05 Mar 21 nicklas 34   
6163 05 Mar 21 nicklas 35 */
6163 05 Mar 21 nicklas 36 public class AdminServlet 
6163 05 Mar 21 nicklas 37   extends HttpServlet 
6163 05 Mar 21 nicklas 38 {
6163 05 Mar 21 nicklas 39
6163 05 Mar 21 nicklas 40   private static final long serialVersionUID = -3842354795495914729L;
6163 05 Mar 21 nicklas 41
6163 05 Mar 21 nicklas 42   public AdminServlet()
6163 05 Mar 21 nicklas 43   {}
6163 05 Mar 21 nicklas 44
6163 05 Mar 21 nicklas 45   @Override
6163 05 Mar 21 nicklas 46   protected void doGet(HttpServletRequest req, HttpServletResponse resp)
6163 05 Mar 21 nicklas 47     throws ServletException, IOException 
6163 05 Mar 21 nicklas 48   {
6163 05 Mar 21 nicklas 49     String cmd = req.getParameter("cmd");
6163 05 Mar 21 nicklas 50     JsonUtil.setJsonResponseHeaders(resp);
6163 05 Mar 21 nicklas 51     
6163 05 Mar 21 nicklas 52     JSONObject json = new JSONObject();
6163 05 Mar 21 nicklas 53     json.put("status", "ok");
6163 05 Mar 21 nicklas 54   
6163 05 Mar 21 nicklas 55     SessionControl sc = null;
6163 05 Mar 21 nicklas 56     DbControl dc = null;
6163 05 Mar 21 nicklas 57     try
6163 05 Mar 21 nicklas 58     {
6163 05 Mar 21 nicklas 59       if ("GetIndexInfo".equals(cmd))
6163 05 Mar 21 nicklas 60       {
6163 05 Mar 21 nicklas 61         sc = VarSearch.getSessionControl(req);
6163 05 Mar 21 nicklas 62         VarSearch.checkIsAdmin(sc, "'" + cmd + "' wizard");
6163 05 Mar 21 nicklas 63         
6163 05 Mar 21 nicklas 64         VarSearchService service = VarSearchService.getInstance();
6163 05 Mar 21 nicklas 65         if (!service.isRunning())
6163 05 Mar 21 nicklas 66         {
6163 05 Mar 21 nicklas 67           throw new BaseException("The Variant Search service is not running.");
6163 05 Mar 21 nicklas 68         }
6163 05 Mar 21 nicklas 69         
6604 23 Feb 22 nicklas 70         dc = sc.newDbControl("Variant search: Index manager");
6163 05 Mar 21 nicklas 71         JSONArray jsonIndexes = new JSONArray();
6163 05 Mar 21 nicklas 72         json.put("indexes", jsonIndexes);
6168 12 Mar 21 nicklas 73         String rootPath = Application.getUserFilesDirectory().getAbsolutePath();
6163 05 Mar 21 nicklas 74         for (LuceneIndex idx : service.getIndexes())
6163 05 Mar 21 nicklas 75         {
6163 05 Mar 21 nicklas 76           JSONObject jsonIdx = new JSONObject();
6163 05 Mar 21 nicklas 77           jsonIdx.put("id", idx.getId());
6558 31 Jan 22 nicklas 78           jsonIdx.put("collapsed", Values.getBoolean(sc.getUserClientSetting("net.sf.basedb.varsearch.collapsed."+idx.getId()))?1:0);
6163 05 Mar 21 nicklas 79           jsonIdx.put("name", idx.getName());
6164 05 Mar 21 nicklas 80           jsonIdx.put("status", idx.getWorkingStatus().name());
6544 19 Jan 22 nicklas 81           jsonIdx.put("queryStatus", idx.getQueryStatus().name());
6167 09 Mar 21 nicklas 82           jsonIdx.put("nextAction", idx.getNextAutoUpdateAction().name());
6544 19 Jan 22 nicklas 83           jsonIdx.put("nextCustomAction", idx.getCustomUpdateAction());
6556 28 Jan 22 nicklas 84           Throwable error = idx.getError();
6556 28 Jan 22 nicklas 85           if (error != null)
6556 28 Jan 22 nicklas 86           {
6556 28 Jan 22 nicklas 87             JSONObject jsonError = new JSONObject();
6556 28 Jan 22 nicklas 88             jsonError.put("msg", error.getMessage());
6556 28 Jan 22 nicklas 89             jsonError.put("className", error.getClass().getName());
6556 28 Jan 22 nicklas 90             jsonError.put("stacktrace", ThrowableUtil.stackTraceToString(error));
6556 28 Jan 22 nicklas 91             jsonIdx.put("error", jsonError);
6556 28 Jan 22 nicklas 92           }
6163 05 Mar 21 nicklas 93           jsonIndexes.add(jsonIdx);
6163 05 Mar 21 nicklas 94           
6164 05 Mar 21 nicklas 95           SimpleProgressReporter progress = idx.getProgress();
6164 05 Mar 21 nicklas 96           if (progress != null)
6164 05 Mar 21 nicklas 97           {
6164 05 Mar 21 nicklas 98             JSONObject jsonProgress = new JSONObject();
6164 05 Mar 21 nicklas 99             jsonProgress.put("percent", progress.getPercent());
6164 05 Mar 21 nicklas 100             jsonProgress.put("message", progress.getMessage());
6164 05 Mar 21 nicklas 101             jsonIdx.put("progress", jsonProgress);
6164 05 Mar 21 nicklas 102           }
6164 05 Mar 21 nicklas 103           
6163 05 Mar 21 nicklas 104           Itemlist list = idx.getItemList();
6163 05 Mar 21 nicklas 105           if (list != null)
6163 05 Mar 21 nicklas 106           {
6163 05 Mar 21 nicklas 107             ItemList itemList = list.get(dc);
6163 05 Mar 21 nicklas 108             String autoProcessing = Annotationtype.AUTO_PROCESSING.getAnnotationValue(dc, itemList);
6163 05 Mar 21 nicklas 109             JSONObject jsonList = new JSONObject();
6163 05 Mar 21 nicklas 110             jsonList.put("id", itemList.getId());
6163 05 Mar 21 nicklas 111             jsonList.put("name", itemList.getName());
6163 05 Mar 21 nicklas 112             jsonList.put("size", itemList.getSize());
6163 05 Mar 21 nicklas 113             jsonList.put("autoProcessing", autoProcessing);
6163 05 Mar 21 nicklas 114             jsonIdx.put("itemList", jsonList);
6163 05 Mar 21 nicklas 115           }
6163 05 Mar 21 nicklas 116           
6163 05 Mar 21 nicklas 117           QueryCache queryCache = idx.getQueryCache();
6163 05 Mar 21 nicklas 118           if (queryCache != null)
6163 05 Mar 21 nicklas 119           {
6163 05 Mar 21 nicklas 120             JSONObject jsonQueryCache = new JSONObject();
6163 05 Mar 21 nicklas 121             jsonQueryCache.put("size", queryCache.getSize());
6163 05 Mar 21 nicklas 122             jsonIdx.put("queryCache", jsonQueryCache);
6163 05 Mar 21 nicklas 123           }
6163 05 Mar 21 nicklas 124           long sizeOnDisk = idx.getSizeOnDisk();
6408 20 Sep 21 nicklas 125           jsonIdx.put("path", idx.getPath() != null ? idx.getPath().getAbsolutePath().replace(rootPath, "~") : "n/a");
6163 05 Mar 21 nicklas 126           jsonIdx.put("sizeOnDisk", sizeOnDisk);
6163 05 Mar 21 nicklas 127           jsonIdx.put("sizeOnDiskFormatted", Values.formatBytes(sizeOnDisk));
6163 05 Mar 21 nicklas 128           jsonIdx.put("numVariants", idx.getNumVariants());
6163 05 Mar 21 nicklas 129           jsonIdx.put("numRawBioAssays", idx.getNumRawBioAssays());
6163 05 Mar 21 nicklas 130           jsonIdx.put("nonExistingRawBioAssays", idx.getNonExistingRawBioAssays(dc).size());
6544 19 Jan 22 nicklas 131           if (idx instanceof OncoArrayIndex)
6544 19 Jan 22 nicklas 132           {
6544 19 Jan 22 nicklas 133             OncoArrayIndex oaIdx = (OncoArrayIndex)idx;
6544 19 Jan 22 nicklas 134             jsonIdx.put("numSNPs", oaIdx.getNumIndexedSNPs());
6544 19 Jan 22 nicklas 135           }
6163 05 Mar 21 nicklas 136         }
6163 05 Mar 21 nicklas 137       }
6700 26 Apr 22 nicklas 138       else if ("GetVersionInfo".equals(cmd))
6700 26 Apr 22 nicklas 139       {
6700 26 Apr 22 nicklas 140         json.put("version", VarSearch.VERSION);
6700 26 Apr 22 nicklas 141         json.put("luceneVersion", Version.LATEST.toString());
6700 26 Apr 22 nicklas 142       }
6163 05 Mar 21 nicklas 143     }
6163 05 Mar 21 nicklas 144     catch (Throwable t)
6163 05 Mar 21 nicklas 145     {
6163 05 Mar 21 nicklas 146       t.printStackTrace();
6163 05 Mar 21 nicklas 147       json.clear();
6163 05 Mar 21 nicklas 148       json.put("status", "error");
6163 05 Mar 21 nicklas 149       json.put("message", t.getMessage());
6163 05 Mar 21 nicklas 150       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
6163 05 Mar 21 nicklas 151     }
6163 05 Mar 21 nicklas 152     finally
6163 05 Mar 21 nicklas 153     {
6163 05 Mar 21 nicklas 154       if (dc != null) dc.close();
6163 05 Mar 21 nicklas 155       json.writeJSONString(resp.getWriter());
6163 05 Mar 21 nicklas 156     }
6163 05 Mar 21 nicklas 157     
6163 05 Mar 21 nicklas 158   }
6163 05 Mar 21 nicklas 159
6165 08 Mar 21 nicklas 160   @Override
6165 08 Mar 21 nicklas 161   protected void doPost(HttpServletRequest req, HttpServletResponse resp)
6165 08 Mar 21 nicklas 162     throws ServletException, IOException 
6165 08 Mar 21 nicklas 163   {
6165 08 Mar 21 nicklas 164     String cmd = req.getParameter("cmd");
6165 08 Mar 21 nicklas 165     JsonUtil.setJsonResponseHeaders(resp);
6165 08 Mar 21 nicklas 166     
6165 08 Mar 21 nicklas 167     JSONObject json = new JSONObject();
6165 08 Mar 21 nicklas 168     json.put("status", "ok");
6165 08 Mar 21 nicklas 169     JSONArray jsonMessages = new JSONArray();
6163 05 Mar 21 nicklas 170   
6165 08 Mar 21 nicklas 171     final SessionControl sc = VarSearch.getSessionControl(req);
6165 08 Mar 21 nicklas 172     DbControl dc = null;
6165 08 Mar 21 nicklas 173     try
6165 08 Mar 21 nicklas 174     {
6165 08 Mar 21 nicklas 175       if ("ChangeAutoProcessing".equals(cmd))
6165 08 Mar 21 nicklas 176       {
6604 23 Feb 22 nicklas 177         dc = sc.newDbControl("Variant search: Index manager");
6165 08 Mar 21 nicklas 178         VarSearch.checkIsAdmin(sc, "'" + cmd + "' wizard");
6165 08 Mar 21 nicklas 179         
6165 08 Mar 21 nicklas 180         JSONObject jsonReq = JsonUtil.parseRequest(req);
6165 08 Mar 21 nicklas 181         Number listId = (Number)jsonReq.get("listId");
6165 08 Mar 21 nicklas 182
6165 08 Mar 21 nicklas 183         String autoProcessing = Values.getStringOrNull((String)jsonReq.get("autoProcessing"));
6165 08 Mar 21 nicklas 184         
6165 08 Mar 21 nicklas 185         ItemList list = ItemList.getById(dc, listId.intValue());
6165 08 Mar 21 nicklas 186         Annotationtype.AUTO_PROCESSING.setAnnotationValue(dc, list, autoProcessing);
6165 08 Mar 21 nicklas 187         dc.commit();
6165 08 Mar 21 nicklas 188       }
6165 08 Mar 21 nicklas 189       else if ("CleanCache".equals(cmd))
6165 08 Mar 21 nicklas 190       {
6165 08 Mar 21 nicklas 191         VarSearch.checkIsAdmin(sc, "'" + cmd + "' wizard");
6165 08 Mar 21 nicklas 192         
6165 08 Mar 21 nicklas 193         JSONObject jsonReq = JsonUtil.parseRequest(req);
6165 08 Mar 21 nicklas 194         String indexId = (String)jsonReq.get("indexId");
6165 08 Mar 21 nicklas 195
6165 08 Mar 21 nicklas 196         LuceneIndex idx = VarSearchService.getInstance().getIndexById(indexId);
6165 08 Mar 21 nicklas 197         if (idx != null)
6165 08 Mar 21 nicklas 198         {
6165 08 Mar 21 nicklas 199           QueryCache cache = idx.getQueryCache();
6165 08 Mar 21 nicklas 200           if (cache != null) cache.clean(true);
6165 08 Mar 21 nicklas 201         }
6165 08 Mar 21 nicklas 202       }
6167 09 Mar 21 nicklas 203       else if ("SetNextAutoUpdate".equals(cmd))
6165 08 Mar 21 nicklas 204       {
6167 09 Mar 21 nicklas 205         VarSearch.checkIsAdmin(sc, "'" + cmd + "' wizard");
6167 09 Mar 21 nicklas 206         JSONObject jsonReq = JsonUtil.parseRequest(req);
6167 09 Mar 21 nicklas 207         String indexId = (String)jsonReq.get("indexId");
6167 09 Mar 21 nicklas 208         AutoUpdate autoUpdate = AutoUpdate.valueOf((String)jsonReq.get("autoUpdate"));
6544 19 Jan 22 nicklas 209         String customAction = autoUpdate == AutoUpdate.CUSTOM ? (String)jsonReq.get("customAction") : null;
6167 09 Mar 21 nicklas 210
6167 09 Mar 21 nicklas 211         VarSearchService service = VarSearchService.getInstance();
6167 09 Mar 21 nicklas 212         LuceneIndex idx = service.getIndexById(indexId);
6167 09 Mar 21 nicklas 213         if (idx != null)
6167 09 Mar 21 nicklas 214         {
6544 19 Jan 22 nicklas 215           idx.setNextAutoUpdateAction(autoUpdate, customAction);
6167 09 Mar 21 nicklas 216           service.setForceUpdateCheck(1);
6167 09 Mar 21 nicklas 217         }
6165 08 Mar 21 nicklas 218       }
6558 31 Jan 22 nicklas 219       else if ("SetSectionCollapsed".equals(cmd))
6558 31 Jan 22 nicklas 220       {
6558 31 Jan 22 nicklas 221         String indexId = Values.getString(req.getParameter("indexId"));
6558 31 Jan 22 nicklas 222         VarSearchService service = VarSearchService.getInstance();
6558 31 Jan 22 nicklas 223         LuceneIndex idx = service.getIndexById(indexId);
6558 31 Jan 22 nicklas 224         if (idx != null)
6558 31 Jan 22 nicklas 225         {
6558 31 Jan 22 nicklas 226           boolean collapsed = Values.getBoolean(req.getParameter("collapsed"));
6558 31 Jan 22 nicklas 227           sc.setUserClientSetting("net.sf.basedb.varsearch.collapsed."+indexId, collapsed ? "1":"0");
6558 31 Jan 22 nicklas 228           jsonMessages.add("indexId="+indexId + "; collapsed="+collapsed);
6558 31 Jan 22 nicklas 229         }
6558 31 Jan 22 nicklas 230         else
6558 31 Jan 22 nicklas 231         {
6558 31 Jan 22 nicklas 232           jsonMessages.add("indexId="+indexId + " not found");
6558 31 Jan 22 nicklas 233         }
6558 31 Jan 22 nicklas 234       }
6165 08 Mar 21 nicklas 235
6165 08 Mar 21 nicklas 236       json.put("messages", jsonMessages);
6165 08 Mar 21 nicklas 237     }
6165 08 Mar 21 nicklas 238     catch (Throwable t)
6165 08 Mar 21 nicklas 239     {
6165 08 Mar 21 nicklas 240       t.printStackTrace();
6165 08 Mar 21 nicklas 241       json.clear();
6165 08 Mar 21 nicklas 242       json.put("status", "error");
6165 08 Mar 21 nicklas 243       json.put("message", t.getMessage());
6165 08 Mar 21 nicklas 244       json.put("stacktrace", ThrowableUtil.stackTraceToString(t));
6165 08 Mar 21 nicklas 245     }
6165 08 Mar 21 nicklas 246     finally
6165 08 Mar 21 nicklas 247     {
6165 08 Mar 21 nicklas 248       if (dc != null) dc.close();
6165 08 Mar 21 nicklas 249       json.writeJSONString(resp.getWriter());
6165 08 Mar 21 nicklas 250     }
6165 08 Mar 21 nicklas 251   }
6165 08 Mar 21 nicklas 252   
6163 05 Mar 21 nicklas 253 }