Add filters/tasks to enable/disable request logging.
This commit is contained in:
parent
ab62c19de9
commit
1732cf9243
|
@ -157,6 +157,8 @@ import org.whispersystems.textsecuregcm.websocket.ProvisioningConnectListener;
|
|||
import org.whispersystems.textsecuregcm.websocket.WebSocketAccountAuthenticator;
|
||||
import org.whispersystems.textsecuregcm.workers.CertificateCommand;
|
||||
import org.whispersystems.textsecuregcm.workers.DeleteUserCommand;
|
||||
import org.whispersystems.textsecuregcm.workers.DisableRequestLoggingTask;
|
||||
import org.whispersystems.textsecuregcm.workers.EnableRequestLoggingTask;
|
||||
import org.whispersystems.textsecuregcm.workers.GetRedisCommandStatsCommand;
|
||||
import org.whispersystems.textsecuregcm.workers.GetRedisSlowlogCommand;
|
||||
import org.whispersystems.textsecuregcm.workers.VacuumCommand;
|
||||
|
@ -451,6 +453,9 @@ public class WhisperServerService extends Application<WhisperServerConfiguration
|
|||
provisioning.addMapping("/v1/websocket/provisioning/");
|
||||
provisioning.setAsyncSupported(true);
|
||||
|
||||
environment.admin().addTask(new EnableRequestLoggingTask());
|
||||
environment.admin().addTask(new DisableRequestLoggingTask());
|
||||
|
||||
///
|
||||
|
||||
environment.healthChecks().register("directory", new RedisHealthCheck(directoryClient));
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
package org.whispersystems.textsecuregcm.util.logging;
|
||||
|
||||
import ch.qos.logback.core.filter.Filter;
|
||||
import ch.qos.logback.core.spi.FilterReply;
|
||||
|
||||
class RequestLogEnabledFilter<E> extends Filter<E> {
|
||||
|
||||
private volatile boolean requestLoggingEnabled = false;
|
||||
|
||||
@Override
|
||||
public FilterReply decide(final E event) {
|
||||
return requestLoggingEnabled ? FilterReply.NEUTRAL : FilterReply.DENY;
|
||||
}
|
||||
|
||||
public void setRequestLoggingEnabled(final boolean requestLoggingEnabled) {
|
||||
this.requestLoggingEnabled = requestLoggingEnabled;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
package org.whispersystems.textsecuregcm.util.logging;
|
||||
|
||||
import ch.qos.logback.access.spi.IAccessEvent;
|
||||
import ch.qos.logback.core.filter.Filter;
|
||||
import com.fasterxml.jackson.annotation.JsonTypeName;
|
||||
import io.dropwizard.logging.filter.FilterFactory;
|
||||
|
||||
@JsonTypeName("requestLogEnabled")
|
||||
class RequestLogEnabledFilterFactory implements FilterFactory<IAccessEvent> {
|
||||
|
||||
@Override
|
||||
public Filter<IAccessEvent> build() {
|
||||
return RequestLogManager.getHttpRequestLogFilter();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
package org.whispersystems.textsecuregcm.util.logging;
|
||||
|
||||
import ch.qos.logback.access.spi.IAccessEvent;
|
||||
import ch.qos.logback.core.filter.Filter;
|
||||
import org.whispersystems.websocket.logging.WebsocketEvent;
|
||||
|
||||
public class RequestLogManager {
|
||||
private static final RequestLogEnabledFilter<IAccessEvent> HTTP_REQUEST_LOG_FILTER = new RequestLogEnabledFilter<>();
|
||||
|
||||
static Filter<IAccessEvent> getHttpRequestLogFilter() {
|
||||
return HTTP_REQUEST_LOG_FILTER;
|
||||
}
|
||||
|
||||
public static void setRequestLoggingEnabled(final boolean enabled) {
|
||||
HTTP_REQUEST_LOG_FILTER.setRequestLoggingEnabled(enabled);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package org.whispersystems.textsecuregcm.workers;
|
||||
|
||||
import io.dropwizard.servlets.tasks.Task;
|
||||
import org.whispersystems.textsecuregcm.util.logging.RequestLogManager;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class DisableRequestLoggingTask extends Task {
|
||||
|
||||
public DisableRequestLoggingTask() {
|
||||
super("disable-request-logging");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(final Map<String, List<String>> map, final PrintWriter printWriter) {
|
||||
RequestLogManager.setRequestLoggingEnabled(false);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
package org.whispersystems.textsecuregcm.workers;
|
||||
|
||||
import io.dropwizard.servlets.tasks.Task;
|
||||
import org.whispersystems.textsecuregcm.util.logging.RequestLogManager;
|
||||
|
||||
import java.io.PrintWriter;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class EnableRequestLoggingTask extends Task {
|
||||
|
||||
public EnableRequestLoggingTask() {
|
||||
super("enable-request-logging");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute(final Map<String, List<String>> map, final PrintWriter printWriter) {
|
||||
RequestLogManager.setRequestLoggingEnabled(true);
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
org.whispersystems.textsecuregcm.util.logging.RequestLogEnabledFilterFactory
|
|
@ -4,18 +4,19 @@
|
|||
*/
|
||||
package org.whispersystems.websocket.logging;
|
||||
|
||||
import org.glassfish.jersey.server.ContainerRequest;
|
||||
import org.glassfish.jersey.server.ContainerResponse;
|
||||
|
||||
import ch.qos.logback.core.Appender;
|
||||
import ch.qos.logback.core.filter.Filter;
|
||||
import ch.qos.logback.core.spi.AppenderAttachableImpl;
|
||||
import ch.qos.logback.core.spi.FilterAttachableImpl;
|
||||
import ch.qos.logback.core.spi.FilterReply;
|
||||
import org.glassfish.jersey.server.ContainerRequest;
|
||||
import org.glassfish.jersey.server.ContainerResponse;
|
||||
|
||||
public class WebsocketRequestLog {
|
||||
|
||||
private AppenderAttachableImpl<WebsocketEvent> aai = new AppenderAttachableImpl<>();
|
||||
private FilterAttachableImpl<WebsocketEvent> fai = new FilterAttachableImpl<>();
|
||||
private final AppenderAttachableImpl<WebsocketEvent> aai = new AppenderAttachableImpl<>();
|
||||
private final FilterAttachableImpl<WebsocketEvent> fai = new FilterAttachableImpl<>();
|
||||
|
||||
public WebsocketRequestLog() {
|
||||
}
|
||||
|
|
|
@ -4,15 +4,7 @@
|
|||
*/
|
||||
package org.whispersystems.websocket.logging;
|
||||
|
||||
import ch.qos.logback.classic.Logger;
|
||||
import ch.qos.logback.classic.LoggerContext;
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import io.dropwizard.logging.AppenderFactory;
|
||||
import io.dropwizard.logging.ConsoleAppenderFactory;
|
||||
import io.dropwizard.logging.async.AsyncAppenderFactory;
|
||||
import io.dropwizard.logging.filter.LevelFilterFactory;
|
||||
import io.dropwizard.logging.filter.NullLevelFilterFactory;
|
||||
import io.dropwizard.logging.layout.LayoutFactory;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.whispersystems.websocket.logging.layout.WebsocketEventLayoutFactory;
|
||||
|
||||
|
@ -21,6 +13,15 @@ import javax.validation.constraints.NotNull;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import ch.qos.logback.classic.Logger;
|
||||
import ch.qos.logback.classic.LoggerContext;
|
||||
import io.dropwizard.logging.AppenderFactory;
|
||||
import io.dropwizard.logging.ConsoleAppenderFactory;
|
||||
import io.dropwizard.logging.async.AsyncAppenderFactory;
|
||||
import io.dropwizard.logging.filter.LevelFilterFactory;
|
||||
import io.dropwizard.logging.filter.NullLevelFilterFactory;
|
||||
import io.dropwizard.logging.layout.LayoutFactory;
|
||||
|
||||
public class WebsocketRequestLoggerFactory {
|
||||
|
||||
@VisibleForTesting
|
||||
|
|
Loading…
Reference in New Issue