what is delay between HttpPost being sent to server and server responding

Viewed 655

I'm an uploading a zipfile from a Java desktop application to an Httpserver (running Tomcat 7), Im using Apache httpClient 4.5.3 and I display a progress bar showing progress using this wrapper solution https://github.com/x2on/gradle-hockeyapp-plugin/blob/master/src/main/groovy/de/felixschulze/gradle/util/ProgressHttpEntityWrapper.groovy

So in my code Im updating progressbar every time the callback gets called

HttpEntity reqEntity = MultipartEntityBuilder.create()
        .addPart("email", comment)
        .addPart("bin", binaryFile)
        .build();

ProgressHttpEntityWrapper.ProgressCallback progressCallback = new ProgressHttpEntityWrapper.ProgressCallback() {

    @Override
    public void progress(final float progress) {
        SwingUtilities.invokeLater(
                new Runnable()
                {
                    public void run()
                    {
                        MainWindow.logger.severe("progress:"+progress);
                        Counters.getUploadSupport().set((int)progress);
                        SongKong.refreshProgress(CreateAndSendSupportFilesCounters.UPLOAD_SUPPORT_FILES);
                    }
                }
        );
    }
};

httpPost.setEntity(new ProgressHttpEntityWrapper(reqEntity, progressCallback));
HttpResponse response = httpclient.execute(httpPost);
HttpEntity resEntity = response.getEntity();
MainWindow.logger.severe("HttpResponse:"+response.getStatusLine());

This reports files uploaded as a percentage, but there is a sizeable delay between it reporting 100% creation and actually receiving http status from server.

07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.19408
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.40069
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.6073
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.81391
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.99768
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.99778
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.99789
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.999794
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:99.9999
07/07/2017 14.23.54:BST:CreateSupportFile$4$1:run:SEVERE: progress:100.0
07/07/2017 14.24.11:BST:CreateSupportFile:sendAsHttpPost:SEVERE: HttpResponse:HTTP/1.1 200 OK
07/07/2017 14.24.11:BST:CreateSupportFile:sendAsHttpPost:SEVERE: Unknown Request

Note is not due to my tomcat code doing much since I haven't yet implemented the tomcat code for this function so it just defaults to the "Unknown Request" code.

protected void doPost(javax.servlet.http.HttpServletRequest request, 

    javax.servlet.http.HttpServletResponse response)
                throws javax.servlet.ServletException, java.io.IOException
        {
            String createMacUpdateLicense   = request.getParameter(RequestParameter.CREATEMACUPDATELICENSE.getName());
            if(createMacUpdateLicense!=null)
            {
                createMacUpdateLicense(response, createMacUpdateLicense);
            }
            else
            {
                response.setCharacterEncoding("UTF-8");
                response.setContentType("text/plain; charset=UTF-8; charset=UTF-8");
                response.getWriter().println("Unknown Request");
                response.getWriter().close();
            }
        }

How can I more accurately report to the user when it will complete

Update I have now fully implemented the serverside, this has increased the discrepancy

    @Override
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)
            throws javax.servlet.ServletException, java.io.IOException
    {
        String uploadSupportFiles   = request.getParameter(RequestParameter.UPLOADSUPPORTFILES.getName());
        if(uploadSupportFiles!=null)
        {
            uploadSupportFiles(request, response, uploadSupportFiles);
        }
        else
        {
            response.setCharacterEncoding("UTF-8");
            response.setContentType("text/plain; charset=UTF-8; charset=UTF-8");
            response.getWriter().println("Unknown Request");
            response.getWriter().close();
        }
    }

private void uploadSupportFiles(HttpServletRequest request, HttpServletResponse response, String email) throws IOException
    {
        Part filePart;
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/plain; charset=UTF-8; charset=UTF-8");

        try
        {
            filePart = request.getPart("bin");
            String fileName = getSubmittedFileName(filePart);
            response.getWriter().println(email+":File:" + fileName);

            //Okay now save the zip file somewhere and email notification
            File uploads = new File("/home/jthink/songkongsupport");
            File supportFile = new File(uploads, email+".zip");

            int count =0;
            while(supportFile.exists())
            {
                supportFile = new File(uploads, email+"("+count+").zip");
                count++;
            }
            InputStream input;
            input = filePart.getInputStream();
            Files.copy(input, supportFile.toPath());

            Email.sendAlert("SongKongSupportUploaded:" + supportFile.getName(),  "SongKongSupportUploaded:" + supportFile.getName());
            response.getWriter().close();
        }
        catch(ServletException se)
        {
            response.getWriter().println(email+":"+se.getMessage());
            response.getWriter().close();
        }


    }
2 Answers
Related