/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package org.autoplot.servlet; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.util.HashSet; import java.util.Set; import java.util.logging.FileHandler; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.autoplot.AutoplotDataServer; import static org.autoplot.servlet.SimpleServlet.handler; import org.das2.system.DasLogger; import org.das2.util.TimerConsoleFormatter; import org.das2.util.monitor.NullProgressMonitor; /** * DataServlet wraps the command-line data server, so that start-up time is * not an issue and memory caching is used. * @author jbf */ public class DataServlet extends HttpServlet { private static final Logger logger= Logger.getLogger("autoplot.servlet" ); public static final String version= "v20180526.1255"; private void logit(String string, long t0, long id, String debug) { boolean flushHandlers= true; if ( debug!=null && !debug.equals("false") ) { if ( logger.isLoggable(Level.FINE) ) { logger.log( Level.FINE, String.format( "##%d# %s: %d\n", id, string, (System.currentTimeMillis() - t0) ) ); if ( flushHandlers ) { for ( Handler h: logger.getHandlers() ) { h.flush(); } } } //System.err.println( String.format( "##%d# %s: %d\n", id, string, (System.currentTimeMillis() - t0) ) ); } else { if ( logger.isLoggable(Level.FINER) ) { logger.log( Level.FINER, String.format( "##%d# %s: %d\n", id, string, (System.currentTimeMillis() - t0) ) ); if ( flushHandlers ) { for ( Handler h: logger.getHandlers() ) { h.flush(); } } } } } private static void addHandlers(long requestId) { try { FileHandler h = new FileHandler("/tmp/testservlet/log" + requestId + ".txt"); TimerConsoleFormatter form = new TimerConsoleFormatter(); form.setResetMessage("getImage"); h.setFormatter(form); h.setLevel(Level.ALL); DasLogger.addHandlerToAll(h); if (handler != null) handler.close(); handler = h; } catch (IOException | SecurityException ex) { logger.log(Level.SEVERE, ex.getMessage(), ex); } } /** * Processes requests for both HTTP GET and POST * methods. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try (OutputStream outs = response.getOutputStream()) { long t0 = System.currentTimeMillis(); String suniq = request.getParameter("requestId"); long uniq; if (suniq == null) { uniq = (long) (Math.random() * 100); } else { uniq = Long.parseLong(suniq); addHandlers(uniq); } String debug = request.getParameter("debug"); if ( debug==null ) debug= "false"; //debug= "TRUE"; logit("-- new request " + uniq + " --", t0, uniq, debug); String suri = request.getParameter("uri"); if ( suri==null ) { suri = request.getParameter("url"); } String stimeRange = ServletUtil.getStringParameter(request, "timeRange", ""); String step= request.getParameter("timeStep"); if ( step==null ) { step= "86400s"; } String format= request.getParameter("format"); if ( format==null ) { format="hapi-csv"; } ServletUtil.SecurityResponse check= ServletUtil.checkSecurity( response, null, suri, null ); ServletUtil.securityCheckPart2(check); Set outEmpty= new HashSet<>(); AutoplotDataServer.doService( stimeRange, suri, step, true, format, new PrintStream( outs ), true, outEmpty, new NullProgressMonitor() ); } catch (Exception ex) { Logger.getLogger(DataServlet.class.getName()).log(Level.SEVERE, null, ex); } } // /** * Handles the HTTP GET method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Handles the HTTP POST method. * * @param request servlet request * @param response servlet response * @throws ServletException if a servlet-specific error occurs * @throws IOException if an I/O error occurs */ @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } /** * Returns a short description of the servlet. * * @return a String containing servlet description */ @Override public String getServletInfo() { return "Short description"; }// }