Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
   *
   * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
   *
   * The contents of this file are subject to the terms of either the GNU
   * General Public License Version 2 only ("GPL") or the Common Development
   * and Distribution License("CDDL") (collectively, the "License").  You
   * may not use this file except in compliance with the License.  You can
  * obtain a copy of the License at
  * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
  * or packager/legal/LICENSE.txt.  See the License for the specific
  * language governing permissions and limitations under the License.
  *
  * When distributing the software, include this License Header Notice in each
  * file and include the License file at packager/legal/LICENSE.txt.
  *
  * GPL Classpath Exception:
  * Oracle designates this particular file as subject to the "Classpath"
  * exception as provided by Oracle in the GPL Version 2 section of the License
  * file that accompanied this code.
  *
  * Modifications:
  * If applicable, add the following below the License Header, with the fields
  * enclosed by brackets [] replaced by your own identifying information:
  * "Portions Copyright [year] [name of copyright owner]"
  *
  * Contributor(s):
  * If you wish your version of this file to be governed by only the CDDL or
  * only the GPL Version 2, indicate your decision by adding "[Contributor]
  * elects to include this software in this distribution under the [CDDL or GPL
  * Version 2] license."  If you don't indicate a single choice of license, a
  * recipient has the option to distribute your version of this file under
  * either the CDDL, the GPL Version 2 or to extend the choice of license to
  * its licensees as provided above.  However, if you add GPL Version 2 code
  * and therefore, elected the GPL Version 2 license, then the option applies
  * only if the new code is made subject to such option by the copyright
  * holder.
  *
  *
  * This file incorporates work covered by the following copyright and
  * permission notice:
  *
  * Copyright 2004 The Apache Software Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
  *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.apache.coyote;


Structure holding the Request and Response objects. It also holds statistical informations about request processing and provide management informations about the requests beeing processed. Each thread uses a Request/Response pair that is recycled on each request. This object provides a place to collect global low-level statistics - without having to deal with synchronization ( since each thread will have it's own RequestProcessorMX ). TODO: Request notifications will be registered here.

Author(s):
Costin Manolache
 
 public class RequestInfo  {
 
     private RequestGroupInfo global=null;
 
     private Request req;
 
     private int stage = .;
 
     /*
      * Statistical data collected at the end of each request.
      */
     private long bytesSent;
 
     private long bytesReceived;
 
     // Total time = divide by requestCount to get average.
     private long processingTime;
 
     // The longest response time for a request
     private long maxTime;
 
     // URI of the request that took maxTime
     private String maxRequestUri;
 
    private int requestCount;
    // number of response codes >= 400
    private int errorCount;
    // START S1AS
    // Number of responses with a status code in the 2xx range
    private long count2xx;
    // Number of responses with a status code in the 3xx range
    private long count3xx;
    // Number of responses with a status code in the 4xx range
    private long count4xx;
    // Number of responses with a status code in the 5xx range
    private long count5xx;
    // Number of responses with a status code outside the 2xx, 3xx, 4xx,
    // and 5xx range
    private long countOther;
    // Number of responses with a status code equal to 200
    private long count200;
    // Number of responses with a status code equal to 302
    private long count302;
    // Number of responses with a status code equal to 304
    private long count304;
    // Number of responses with a status code equal to 400
    private long count400;
    // Number of responses with a status code equal to 401
    private long count401;
    // Number of responses with a status code equal to 403
    private long count403;
    // Number of responses with a status code equal to 404
    private long count404;
    // Number of responses with a status code equal to 503
    private long count503;
    // Worker thread ID that processes the associated request
    private long workerThreadID = 0;
    // Request completion time
    private long requestCompletionTime;
    // END S1AS
    // START SJSAS 6338793
    private String lastURI;
    private String lastMethod;
    private long lastCompletionTime;
    // END SJSAS 6338793

    
Constructor
    public RequestInfoRequest req) {
        this.=req;
    }
        return ;
    }
    
    public void setGlobalProcessor(RequestGroupInfo global) {
        ifglobal != null) {
            this.=global;
            global.addRequestProcessorthis );
        } else {
            if (this. != null) {
                this..removeRequestProcessorthis ); 
                this. = null;
            }
        }
    }
    // ------------------- Information about the current request  -----------
    // This is useful for long-running requests only
    public String getMethod() {
        return .method().toString();
    }
    public String getCurrentUri() {
        return .requestURI().toString();
    }
    public String getCurrentQueryString() {
        return .queryString().toString();
    }
    public String getProtocol() {
        return .protocol().toString();
    }
    public String getVirtualHost() {
        return .serverName().toString();
    }
    public int getServerPort() {
        return .getServerPort();
    }
    public String getRemoteAddr() {
        return .remoteAddr().toString();
    }
    public int getContentLength() {
        return .getContentLength();
    }
    public long getRequestBytesReceived() {
        return .getBytesRead();
    }
    public long getRequestBytesSent() {
        return .getResponse().getBytesWritten();
    }
    public long getRequestProcessingTime() {
        return (System.currentTimeMillis() - .getStartTime());
    }


    
Called by the processor before recycling the request. It'll collect statistic information.
    void updateCounters() {
        +=.getBytesRead();
        ++;
        int responseStatus = .getResponse().getStatus();
        // START S1AS
        if (responseStatus >= 200 && responseStatus < 299) {
            // 2xx
            ++;
            if (responseStatus == 200) {
                ++;
            }
        } else if (responseStatus >= 300 && responseStatus < 399) {
            // 3xx
            ++;
            if (responseStatus == 302) {
                ++;
            } else if (responseStatus == 304) {
                ++;
            }
        } else if (responseStatus >= 400 && responseStatus < 499) {
            // 4xx
            ++;
            if (responseStatus == 400) {
                ++;
            } else if (responseStatus == 401) {
                ++;
            } else if (responseStatus == 403) {
                ++;
            } else if (responseStatus == 404) {
                ++;
            }
        } else if (responseStatus >= 500 && responseStatus < 599) {
            // 5xx
            ++;
            if (responseStatus == 503) {
                ++;
            }
        } else {
            // Other
            ++;
        }
        // END S1AS
        if (responseStatus >= 400) {
            ++;
        }
        long t0=.getStartTime();
        long t1=System.currentTimeMillis();
         = t1-t0;
        if <  ) {
            =;
            =.requestURI().toString();
        }
        // START SJSAS 6338793
         = .requestURI().toString();
         = .method().toString();
         = t1;
        // END SJAS 6338793
    }
    public int getStage() {
        return ;
    }
    public void setStage(int stage) {
        this. = stage;
    }
    public long getBytesSent() {
        return ;
    }
    public void setBytesSent(long bytesSent) {
        this. = bytesSent;
    }
    public long getBytesReceived() {
        return ;
    }
    public void setBytesReceived(long bytesReceived) {
        this. = bytesReceived;
    }
    public long getProcessingTime() {
        return ;
    }
    public void setProcessingTime(long processingTime) {
        this. = processingTime;
    }
    public long getMaxTime() {
        return ;
    }
    public void setMaxTime(long maxTime) {
        this. = maxTime;
    }
    public String getMaxRequestUri() {
        return ;
    }
    public void setMaxRequestUri(String maxRequestUri) {
        this. = maxRequestUri;
    }
    public int getRequestCount() {
        return ;
    }
    public void setRequestCount(int requestCount) {
        this. = requestCount;
    }
    public int getErrorCount() {
        return ;
    }
    public void setErrorCount(int errorCount) {
        this. = errorCount;
    }
    // START S1AS
    public long getCount2xx() {
        return ;
    }
    public void setCount2xx(long count2xx) {
        this. = count2xx;
    }
    public long getCount3xx() {
        return ;
    }
    public void setCount3xx(long count3xx) {
        this. = count3xx;
    }
    public long getCount4xx() {
        return ;
    }
    public void setCount4xx(long count4xx) {
        this. = count4xx;
    }
    public long getCount5xx() {
        return ;
    }
    public void setCount5xx(long count5xx) {
        this. = count5xx;
    }
    public long getCountOther() {
        return ;
    }
    public void setCountOther(long countOther) {
        this. = countOther;
    }
    public long getCount200() {
        return ;
    }
    public void setCount200(long count200) {
        this. = count200;
    }
    public long getCount302() {
        return ;
    }
    public void setCount302(long count302) {
        this. = count302;
    }
    public long getCount304() {
        return ;
    }
    public void setCount304(long count304) {
        this. = count304;
    }
    public long getCount400() {
        return ;
    }
    public void setCount400(long count400) {
        this. = count400;
    }
    public long getCount401() {
        return ;
    }
    public void setCount401(long count401) {
        this. = count401;
    }
    public long getCount403() {
        return ;
    }
    public void setCount403(long count403) {
        this. = count403;
    }
    public long getCount404() {
        return ;
    }
    public void setCount404(long count404) {
        this. = count404;
    }
    public long getCount503() {
        return ;
    }
    public void setCount503(long count503) {
        this. = count503;
    }

    
Gets the worker thread ID which is processing the request associated with this RequestInfo. Return 0 if no thread ID has been associated.

Returns:
The worker thread id
    public long getWorkerThreadID() {
        return ;
    }

    
Sets the worker thread ID responsible for processing the request associated with this RequestInfo.

Parameters:
workerThread The worker thread is
    public void setWorkerThreadID(long workerThreadID) {
        this. = workerThreadID;
    }
  
    
Gets the time taken to complete the request associated with this RequestInfo.
    public long getRequestCompletionTime() {
        return ;
    }

    
Sets the time taken to complete the request associated with this RequestInfo.
    public void setRequestCompletionTime(long completionTime) {
        this. = completionTime;
    }
    // END S1AS
    // START SJSAS 6338793
    
Gets the URI of the last request serviced.

Returns:
The URI of the last request serviced
    public String getLastRequestURI() {
        return ;
    }

    
Gets the HTTP method of the last request serviced.

Returns:
The HTTP method of the last request serviced
    public String getLastRequestMethod() {
        return ;
    }

    
Gets the time when the last request was completed.

Returns:
The time when the last request was completed.
    public long getLastRequestCompletionTime() {
        return ;
    }
    // END SJSAS 6338793
    // START S1AS
    
Resets this RequestInfo.
    public void reset() {
        setBytesSent(0);
        setBytesReceived(0);
        setProcessingTime(0);
        setMaxTime(0);
        setMaxRequestUri(null);
        setRequestCount(0);
        setErrorCount(0);
        setCount2xx(0);
        setCount3xx(0);
        setCount4xx(0);
        setCount5xx(0);
        setCountOther(0);
        setCount200(0);
        setCount302(0);
        setCount304(0);
        setCount400(0);
        setCount401(0);
        setCount403(0);
        setCount404(0);
        setCount503(0);
        setWorkerThreadID(0);
        setRequestCompletionTime(0);
        // START SJSAS 6338793
         = null;
         = null;
         = 0;
        // END SJSAS 6338793
    }
    // END S1AS
New to GrepCode? Check out our FAQ X