|
What this is
Other links
The source code
/*
* Copyright 1999-2004 The Apache Sofware 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.tomcat.modules.loggers;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.tomcat.core.BaseInterceptor;
import org.apache.tomcat.core.ContextManager;
import org.apache.tomcat.core.Request;
import org.apache.tomcat.core.Response;
import org.apache.tomcat.core.TomcatException;
/**
* Time counting.
*
*/
public class AccountingInterceptor extends BaseInterceptor {
ContextManager cm;
int debug=0;
boolean acc=true;
String trace="trace.log";
BufferedOutputStream logF=null;
public static final int ACC_PRE_CMAP=0;
public static final int ACC_PRE_RMAP=1;
public static final int ACC_POST_MAP=2;
public static final int ACC_PRE_SERVICE=3;
public static final int ACC_POST_SERVICE=4;
public static final int ACC_IN_OUT=5;
public static final int ACC_OUT_COUNT=6;
public static final int COUNTERS_COUNT=10;
int reqCountNote=0;
public AccountingInterceptor() {
}
public void setTrace( String file ) {
trace=file;
}
/** Called when the ContextManger is started
*/
public void engineInit(ContextManager cm) throws TomcatException {
try {
logF=new BufferedOutputStream( new FileOutputStream( trace ));
reqCountNote=cm.getNoteId(ContextManager.REQUEST_NOTE,
"counters");
} catch(IOException ex ) {
ex.printStackTrace();
}
}
public int requestMap(Request request ) {
if( acc ) {
Counters ct=(Counters)request.getNote(reqCountNote);
if( ct==null ) {
request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
}
ct.setCounter( ACC_PRE_RMAP, System.currentTimeMillis() );
}
return 0;
}
public int contextMap( Request request ) {
if( acc ) {
Counters ct=(Counters)request.getNote(reqCountNote);
if( ct==null ) {
request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
}
ct.setCounter( ACC_PRE_CMAP, System.currentTimeMillis() );
}
return 0;
}
public int authenticate(Request request, Response response) {
if( acc ) {
Counters ct=(Counters)request.getNote(reqCountNote);
if( ct==null ) {
request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
}
ct.setCounter( ACC_POST_MAP, System.currentTimeMillis() );
}
return 0;
}
public int authorize(Request request, Response response) {
return 0;
}
public int preService(Request request, Response response) {
if( acc ) {
Counters ct=(Counters)request.getNote(reqCountNote);
if( ct==null ) {
request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
}
ct.setCounter( ACC_PRE_SERVICE, System.currentTimeMillis() );
}
return 0;
}
public int beforeBody( Request rrequest, Response response ) {
return 0;
}
public int beforeCommit( Request request, Response response) {
return 0;
}
public int afterBody( Request request, Response response) {
return 0;
}
public int postService(Request request, Response response) {
if( acc ) {
Counters ct=(Counters)request.getNote(reqCountNote);
if( ct==null ) {
request.setNote( reqCountNote, new Counters(COUNTERS_COUNT));
}
ct.setCounter( ACC_POST_SERVICE, System.currentTimeMillis() );
long t1=ct.getCounter( ACC_PRE_CMAP );
long t2=ct.getCounter( ACC_PRE_RMAP );
long t3=ct.getCounter( ACC_POST_MAP );
long t4=ct.getCounter( ACC_PRE_SERVICE );
long t5=ct.getCounter( ACC_POST_SERVICE );
long t21=t2-t1;
long t31=t3-t1;
long t54=t5-t4;
long t41=t4-t1;
long tout=ct.getCounter( ACC_OUT_COUNT );
StringBuffer sb=new StringBuffer();
// ContextMap, Map, Service, Pre-Service-Overhead
sb.append(t21).append(",");
sb.append(t31).append(",");
sb.append(t54).append(",");
sb.append(tout).append(",");
sb.append(t41).append("\n");
ct.recycle();
cnt++;
try {
if( logF!=null ) logF.write(sb.toString().getBytes());
if( (cnt % 64) == 0 ) logF.flush();
} catch( IOException ex ) {
ex.printStackTrace();
}
}
return 0;
}
static int cnt=0;
}
/*
*/
final class Counters {
long accTable[];
public Counters( int len ) {
accTable=new long[len];
}
public final void touchCounter( int pos ) {
accTable[pos]=System.currentTimeMillis();
}
public final void setCounter( int pos, long value ) {
accTable[pos]=value;
}
public final long getCounter( int pos ) {
return accTable[pos];
}
public void recycle() {
for( int i=0; i |
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.