0
0
mirror of https://github.com/signalapp/Signal-Server.git synced 2024-09-19 19:42:18 +02:00

Add filters/tasks to enable/disable request logging.

This commit is contained in:
Jon Chambers 2020-10-20 15:27:36 -04:00 committed by Jon Chambers
parent ab62c19de9
commit 1732cf9243
9 changed files with 110 additions and 12 deletions

View File

@ -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));

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -0,0 +1 @@
org.whispersystems.textsecuregcm.util.logging.RequestLogEnabledFilterFactory

View File

@ -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() {
}

View File

@ -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