Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one
   * or more contributor license agreements.  See the NOTICE file
   * distributed with this work for additional information
   * regarding copyright ownership.  The ASF licenses this file
   * to you 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.sling.engine.impl.debug;
 
 import  org.osgi.service.component.ComponentContext;
 
Filter that dumps the output of the RequestProgressTracker to the log after processing the request.
 
         metatype = true,
         immediate = true,
         label = "%rpt.log.name",
         description = "%rpt.log.description"
 )
     @Property(name="service.description", value="RequestProgressTracker dump filter", propertyPrivate = true),
     @Property(name="service.vendor", value="The Apache Software Foundation", propertyPrivate = true),
     @Property(name="filter.scope", value="request", propertyPrivate = true)
 })
 public class RequestProgressTrackerLogFilter implements Filter {
 
     private static final Logger log = LoggerFactory.getLogger(RequestProgressTrackerLogFilter.class);
 
     private int requestCounter;
 
     private static final String[] DEFAULT_EXTENSIONS = new String[0];
     private String[] extensions = ;
     @Property(value = {}, cardinality = .)
     private static final String NAME_EXTENSIONS = "extensions";
 
     private static final int DEFAULT_MIN_DURATION = 0;
     private int minDurationMs = ;
     @Property(intValue = )
     private static final String NAME_MIN_DURATION = "minDurationMs";
 
     private static final int DEFAULT_MAX_DURATION = .;
     private int maxDurationMs = ;
     @Property(intValue = )
     private static final String NAME_MAX_DURATION = "maxDurationMs";
 
     private static final boolean DEFAULT_COMPACT_LOG_FORMAT = false;
     private boolean compactLogFormat = ;
     @Property(boolValue = )
     private static final String NAME_COMPACT_LOG_FORMAT = "compactLogFormat";
 
     public void init(FilterConfig filterConfigthrows ServletException {
     }
 
     public void doFilter(ServletRequest requestServletResponse response,
             FilterChain chainthrows IOExceptionServletException {
 
         chain.doFilter(requestresponse);
 
         if (request instanceof SlingHttpServletRequest) {
             final SlingHttpServletRequest slingRequest = (SlingHttpServletRequestrequest;
             final RequestProgressTracker rpt = slingRequest.getRequestProgressTracker();
            rpt.done();
            if (.isDebugEnabled() && allowDuration(rpt) && allowExtension(extractExtension(slingRequest))) {
                if () {
                    logCompactFormat(rpt);
                } else {
                    logDefaultFormat(rpt);
                }
            }
        }
    }
    public void destroy() {
    }
    private void logCompactFormat(RequestProgressTracker rpt) {
        final Iterator<Stringmessages = rpt.getMessages();
        final StringBuilder sb = new StringBuilder("\n");
        while (messages.hasNext()) {
            sb.append(messages.next());
        }
        sb.setLength(sb.length() - 1);
        .debug(sb.toString());
    }
    private void logDefaultFormat(RequestProgressTracker rpt) {
        int requestId = 0;
        synchronized (getClass()) {
            requestId = ++;
        }
        final Iterator<Stringit = rpt.getMessages();
        while (it.hasNext()) {
            .debug("REQUEST_{} - " + it.next(), requestId);
        }
    }
    private String extractExtension(SlingHttpServletRequest request) {
        final RequestPathInfo requestPathInfo = request.getRequestPathInfo();
        String extension = requestPathInfo.getExtension();
        if (extension == null) {
            final String pathInfo = requestPathInfo.getResourcePath();
            final int extensionIndex = pathInfo.lastIndexOf('.') + 1;
            extension = pathInfo.substring(extensionIndex);
        }
        return extension;
    }
    private boolean allowExtension(final String extension) {
        return . == 0 || Arrays.binarySearch(extension) > -1;
    }
    private boolean allowDuration(final RequestProgressTracker rpt) {
        if (rpt instanceof SlingRequestProgressTracker) {
            long duration = ((SlingRequestProgressTrackerrpt).getDuration();
            return  <= duration && duration <= ;
        } else {
            .debug("Logged requests can only be filtered by duration if the SlingRequestProgressTracker is used.");
            return true;
        }
    }

    
Sorts the String array and removes any empty values, which are assumed to be sorted to the beginning.

Parameters:
strings An array of Strings
Returns:
The sorted array with empty strings removed.
    private String[] sortAndClean(String[] strings) {
        if (strings.length == 0) {
            return strings;
        }
        Arrays.sort(strings);
        int skip = 0;
        for (int i = strings.length - 1; i > -1; i--) {
            // skip all empty strings that are sorted to the beginning of the array
            if (strings[i].length() == 0) {
                skip++;
            }
        }
        return skip == 0 ? strings : Arrays.copyOfRange(stringsskipstrings.length);
    }
    @Activate
    private void activate(ComponentContext ctx) {
        final Dictionary p = ctx.getProperties();
        // extensions needs to be sorted for Arrays.binarySearch() to work
         = PropertiesUtil.toInteger(p.get(), );
         = PropertiesUtil.toInteger(p.get(), );
        .debug("activated: extensions = {}, min = {}, max = {}, compact = {}",
                new Object[]{});
    }
New to GrepCode? Check out our FAQ X