/**
*
* Copyright
* 2009-2015 Jayway Products AB
* 2016-2017 Föreningen Sambruk
*
* Licensed under AGPL, Version 3.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.gnu.org/licenses/agpl.txt
*
* 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 se.streamsource.streamflow.web.rest.resource;
import java.text.DateFormat;
import java.util.Date;
import org.restlet.Context;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.Restlet;
import org.restlet.data.Method;
import org.restlet.routing.Filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Log command and query performance
*/
class PerformanceLoggingFilter extends Filter
{
Logger queryPerformanceMonitor;
Logger commandPerformanceMonitor;
public PerformanceLoggingFilter( Context context, Restlet restlet )
{
super( context, restlet );
queryPerformanceMonitor = LoggerFactory.getLogger( "monitor.rest.query" );
commandPerformanceMonitor = LoggerFactory.getLogger( "monitor.rest.command" );
}
@Override
protected int doHandle( Request request, Response response )
{
long start = System.nanoTime();
try
{
return super.doHandle( request, response );
} finally
{
long end = System.nanoTime();
long requestTime = (end - start) / 1000000L;
Date now = new Date();
if (request.getMethod().equals( Method.GET ))
{
queryPerformanceMonitor.info( "{}\t{}\t{}\t{}", new Object[]{requestTime, DateFormat.getDateTimeInstance().format( now ), request.getResourceRef().getLastSegment(), request.getResourceRef()} );
} else
{
commandPerformanceMonitor.info( "{}\t{}\t{}\t{}", new Object[]{requestTime, DateFormat.getDateTimeInstance().format( now ), request.getResourceRef().getLastSegment(), request.getResourceRef()} );
}
}
}
}