Ver código fonte

data-service improvements

Jason Rivard 2 anos atrás
pai
commit
753d70b50c

+ 2 - 2
data-service/src/main/java/password/pwm/receiver/ContextManager.java

@@ -37,7 +37,7 @@ public class ContextManager implements ServletContextListener
     {
         app = new PwmReceiverApp();
         sce.getServletContext().setAttribute( CONTEXT_ATTR, this );
-        LOGGER.info( "open for bidness" );
+        LOGGER.info( () -> "open for bidness" );
     }
 
     @Override
@@ -45,7 +45,7 @@ public class ContextManager implements ServletContextListener
     {
         app.close();
         app = null;
-        LOGGER.info( "cya!" );
+        LOGGER.info( () -> "cya!" );
     }
 
     public PwmReceiverApp getApp( )

+ 6 - 4
data-service/src/main/java/password/pwm/receiver/Logger.java

@@ -20,6 +20,8 @@
 
 package password.pwm.receiver;
 
+import java.util.function.Supplier;
+
 public class Logger
 {
     private final org.slf4j.Logger logger;
@@ -34,13 +36,13 @@ public class Logger
         return new Logger( classname );
     }
 
-    public void info( final String input )
+    public void info( final Supplier<String> input )
     {
-        logger.info( input );
+        logger.makeLoggingEventBuilder( org.slf4j.event.Level.INFO ).log( input );
     }
 
-    public void debug( final String input )
+    public void debug( final Supplier<String> input )
     {
-        logger.debug( input );
+        logger.makeLoggingEventBuilder( org.slf4j.event.Level.DEBUG ).log( input );
     }
 }

+ 0 - 7
data-service/src/main/java/password/pwm/receiver/PublishVersionServlet.java

@@ -21,7 +21,6 @@
 package password.pwm.receiver;
 
 import password.pwm.bean.pub.PublishVersionBean;
-import password.pwm.util.java.AtomicLoopIntIncrementer;
 import password.pwm.ws.server.RestResultBean;
 
 import javax.servlet.annotation.WebServlet;
@@ -38,16 +37,10 @@ import java.util.Collections;
 )
 public class PublishVersionServlet extends HttpServlet
 {
-    private static final Logger LOGGER = Logger.createLogger( PublishVersionServlet.class );
-    private static final AtomicLoopIntIncrementer REQ_COUNTER = new AtomicLoopIntIncrementer();
-
-
     @Override
     protected void doGet( final HttpServletRequest req, final HttpServletResponse resp )
             throws IOException
     {
-        final int requestId = REQ_COUNTER.next();
-        LOGGER.debug( "http request #" + requestId + " for version" );
 
         final ContextManager contextManager = ContextManager.getContextManager( req.getServletContext() );
         final PwmReceiverApp app = contextManager.getApp();

+ 115 - 0
data-service/src/main/java/password/pwm/receiver/RequestLoggerFilter.java

@@ -0,0 +1,115 @@
+/*
+ * Password Management Servlets (PWM)
+ * http://www.pwm-project.org
+ *
+ * Copyright (c) 2006-2009 Novell, Inc.
+ * Copyright (c) 2009-2021 The PWM Project
+ *
+ * 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 password.pwm.receiver;
+
+import password.pwm.util.java.AtomicLoopLongIncrementer;
+import password.pwm.util.java.StringUtil;
+import password.pwm.util.java.TimeDuration;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.time.Instant;
+import java.util.List;
+
+@WebFilter( filterName = "RequestLoggerFilter", urlPatterns = "*" )
+public class RequestLoggerFilter implements Filter
+{
+    private static final Logger LOGGER = Logger.createLogger( TelemetryViewerServlet.class );
+    private static final AtomicLoopLongIncrementer REQ_COUNTER = new AtomicLoopLongIncrementer();
+
+    @Override
+    public void doFilter( final ServletRequest request, final ServletResponse response, final FilterChain chain )
+            throws ServletException, IOException
+    {
+        final Instant startTime = Instant.now();
+
+        chain.doFilter( request, response );
+
+        final HttpServletRequest req = ( HttpServletRequest ) request;
+        final long requestId = REQ_COUNTER.next();
+        final TimeDuration timeDuration = TimeDuration.fromCurrent( startTime );
+
+        LOGGER.debug( () -> "http request #" + requestId + " for "
+                + req.getRequestURI() + " from "
+                + getSrcDisplayString( req )
+                + " (" + timeDuration.asCompactString() + ")" );
+    }
+
+    @Override
+    public void init( final FilterConfig filterConfig )
+            throws ServletException
+    {
+        Filter.super.init( filterConfig );
+    }
+
+    @Override
+    public void destroy()
+    {
+        Filter.super.destroy();
+    }
+
+    private static String getSrcDisplayString( final HttpServletRequest request )
+    {
+        final String address = srcAddress( request );
+        final String hostname = srcHostname( request );
+
+        if ( StringUtil.isEmpty( hostname ) || hostname.equals( address ) )
+        {
+            return address;
+        }
+
+        return address + "/" + hostname;
+    }
+
+    public static String srcAddress( final HttpServletRequest request )
+    {
+        final String xForwardedForValue = request.getHeader( "X-Forwarded-For" );
+        if ( StringUtil.isEmpty( xForwardedForValue ) )
+        {
+            return request.getRemoteAddr();
+        }
+
+        final List<String> values = StringUtil.splitAndTrim( xForwardedForValue, "," );
+        return values.get( 0 );
+    }
+
+    public static String srcHostname( final HttpServletRequest request )
+    {
+        final String addr = srcAddress( request );
+        try
+        {
+            return InetAddress.getByName( addr ).getHostName();
+        }
+        catch ( final Exception e )
+        {
+            /* ignore */
+        }
+        return addr;
+    }
+}

+ 1 - 1
data-service/src/main/java/password/pwm/receiver/Settings.java

@@ -128,7 +128,7 @@ public class Settings
         }
         catch ( final Exception e )
         {
-            LOGGER.info( "error parsing version string from setting properties: " + e.getMessage() );
+            LOGGER.info( () -> "error parsing version string from setting properties: " + e.getMessage() );
             return VersionNumber.ZERO;
         }
     }

+ 2 - 2
data-service/src/main/java/password/pwm/receiver/Storage.java

@@ -67,12 +67,12 @@ public class Storage
         final EnvironmentConfig environmentConfig = new EnvironmentConfig();
         environment = Environments.newInstance( storagePath.getAbsolutePath(), environmentConfig );
 
-        LOGGER.info( "environment open" );
+        LOGGER.info( () -> "environment open" );
 
         environment.executeInTransaction( txn -> store
                 = environment.openStore( STORE_NAME, StoreConfig.WITHOUT_DUPLICATES, txn ) );
 
-        LOGGER.info( "store open with " + count() + " records" );
+        LOGGER.info( () -> "store open with " + count() + " records" );
     }
 
     public void store( final TelemetryPublishBean bean )

+ 1 - 4
data-service/src/main/java/password/pwm/receiver/TelemetryRestReceiver.java

@@ -55,9 +55,6 @@ public class TelemetryRestReceiver extends HttpServlet
     {
         try
         {
-            final int requestId = REQ_COUNTER.next();
-            LOGGER.debug( "http rest request #" + requestId + " for telemetry update" );
-
             final String input = ServletUtility.readRequestBodyAsString( req, 1024 * 1024 );
             final TelemetryPublishBean telemetryPublishBean = JsonFactory.get().deserialize( input, TelemetryPublishBean.class );
             final Storage storage = ContextManager.getContextManager( this.getServletContext() ).getApp().getStorage();
@@ -65,7 +62,7 @@ public class TelemetryRestReceiver extends HttpServlet
 
             final RestResultBean restResultBean = RestResultBean.forSuccessMessage( null, null, null, Message.Success_Unknown );
             ReceiverUtil.outputJsonResponse( req, resp, restResultBean );
-            LOGGER.debug( "http rest request #" + requestId + " received from " + telemetryPublishBean.getSiteDescription() );
+            LOGGER.debug( () -> "http telemetry rest data received from " + telemetryPublishBean.getSiteDescription() );
         }
         catch ( final PwmUnrecoverableException e )
         {

+ 1 - 7
data-service/src/main/java/password/pwm/receiver/TelemetryViewerServlet.java

@@ -20,7 +20,6 @@
 
 package password.pwm.receiver;
 
-import password.pwm.util.java.AtomicLoopIntIncrementer;
 import password.pwm.util.java.StringUtil;
 
 import javax.servlet.ServletException;
@@ -40,9 +39,8 @@ import java.time.temporal.ChronoUnit;
 )
 public class TelemetryViewerServlet extends HttpServlet
 {
-    private static final Logger LOGGER = Logger.createLogger( TelemetryViewerServlet.class );
     private static final String PARAM_DAYS = "days";
-    private static final AtomicLoopIntIncrementer REQ_COUNTER = new AtomicLoopIntIncrementer();
+
 
     public static final String SUMMARY_ATTR = "SummaryBean";
 
@@ -51,8 +49,6 @@ public class TelemetryViewerServlet extends HttpServlet
     protected void doGet( final HttpServletRequest req, final HttpServletResponse resp )
             throws ServletException, IOException
     {
-        final int requestId = REQ_COUNTER.next();
-        LOGGER.debug( "http request #" + requestId + " for viewer" );
         final String daysString = req.getParameter( PARAM_DAYS );
         final int days = StringUtil.isEmpty( daysString ) ? 30 : Integer.parseInt( daysString );
         final ContextManager contextManager = ContextManager.getContextManager( req.getServletContext() );
@@ -63,8 +59,6 @@ public class TelemetryViewerServlet extends HttpServlet
             if ( StringUtil.notEmpty( errorState ) )
             {
                 resp.sendError( 500, errorState );
-                final String htmlBody = "<html>Error: " + errorState + "</html>";
-                resp.getWriter().print( htmlBody );
                 return;
             }
         }