Skip to content

Commit

Permalink
Allow custom configuration for the OutgoingWebSocketEventSniffer exte…
Browse files Browse the repository at this point in the history
…nsion

Signed-off-by: Yannic Klem <yannic.klem@bosch.io>
  • Loading branch information
Yannic92 committed Jul 12, 2022
1 parent 36efa59 commit 92a3a71
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 19 deletions.
Expand Up @@ -14,18 +14,15 @@

import static org.eclipse.ditto.base.model.common.ConditionChecker.checkNotNull;

import java.util.concurrent.CompletableFuture;

import org.eclipse.ditto.base.service.DittoExtensionIds;
import org.eclipse.ditto.base.service.DittoExtensionPoint;
import org.eclipse.ditto.gateway.service.util.config.DittoGatewayConfig;
import org.eclipse.ditto.gateway.service.util.config.GatewayConfig;
import org.eclipse.ditto.internal.utils.config.DefaultScopedConfig;

import com.typesafe.config.Config;

import akka.NotUsed;
import akka.actor.ActorSystem;
import akka.http.javadsl.model.HttpRequest;
import akka.stream.javadsl.Flow;
import akka.stream.javadsl.Sink;

/**
* Extension to sniff outgoing events over websocket.
Expand All @@ -45,22 +42,31 @@ public interface OutgoingWebSocketEventSniffer extends DittoExtensionPoint {
* {@code ActorSystem}.
*
* @param actorSystem the actorSystem in which the {@code OutgoingWebSocketEventSniffer} should be loaded.
* @param config the configuration for this extension.
* @return the {@code OutgoingWebSocketEventSniffer} implementation.
* @throws NullPointerException if {@code actorSystem} is {@code null}.
* @since 3.0.0
*/
static OutgoingWebSocketEventSniffer get(final ActorSystem actorSystem) {
static OutgoingWebSocketEventSniffer get(final ActorSystem actorSystem, final Config config) {
checkNotNull(actorSystem, "actorSystem");
return ExtensionId.INSTANCE.get(actorSystem);
checkNotNull(config, "config");
final var extensionIdConfig = ExtensionId.computeConfig(config);
return DittoExtensionIds.get(actorSystem)
.computeIfAbsent(extensionIdConfig, ExtensionId::new)
.get(actorSystem);
}

final class ExtensionId extends DittoExtensionPoint.ExtensionId<OutgoingWebSocketEventSniffer> {

private static final String CONFIG_PATH = "ditto.gateway.streaming.websocket.outgoing-event-sniffer";
private static final ExtensionId INSTANCE = new ExtensionId(OutgoingWebSocketEventSniffer.class);
private static final String CONFIG_KEY = "outgoing-websocket-event-sniffer";
private static final String CONFIG_PATH = "ditto.extensions." + CONFIG_KEY;

private ExtensionId(final ExtensionIdConfig<OutgoingWebSocketEventSniffer> extensionIdConfig) {
super(extensionIdConfig);
}

private ExtensionId(final Class<OutgoingWebSocketEventSniffer> parentClass) {
super(parentClass);
static ExtensionIdConfig<OutgoingWebSocketEventSniffer> computeConfig(final Config config) {
return ExtensionIdConfig.of(OutgoingWebSocketEventSniffer.class, config, CONFIG_KEY);
}

@Override
Expand Down
Expand Up @@ -96,8 +96,6 @@
import org.eclipse.ditto.thingsearch.model.signals.commands.SearchErrorResponse;
import org.slf4j.Logger;

import com.typesafe.config.Config;

import akka.NotUsed;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
Expand Down Expand Up @@ -191,7 +189,7 @@ private WebSocketRoute(final ActorSystem actorSystem,
final var config = actorSystem.settings().config();
final var dittoExtensionsConfig = ScopedConfig.dittoExtension(config);
incomingMessageSniffer = IncomingWebSocketEventSniffer.get(actorSystem, dittoExtensionsConfig);
outgoingMessageSniffer = OutgoingWebSocketEventSniffer.get(actorSystem);
outgoingMessageSniffer = OutgoingWebSocketEventSniffer.get(actorSystem, dittoExtensionsConfig);
final var websocketConfig = ScopedConfig.getOrEmpty(config, "ditto.gateway.streaming.websocket");
authorizationEnforcer = StreamingAuthorizationEnforcer.get(actorSystem, websocketConfig);
webSocketSupervisor = WebSocketSupervisor.get(actorSystem);
Expand Down
5 changes: 2 additions & 3 deletions gateway/service/src/main/resources/gateway.conf
Expand Up @@ -51,6 +51,8 @@ ditto {
streaming-authorization-enforcer = org.eclipse.ditto.gateway.service.streaming.NoOpAuthorizationEnforcer
# The listener for incoming WebSocket events
incoming-websocket-event-sniffer = org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpIncomingWebSocketEventSniffer
# The listener for outgoing WebSocket events
outgoing-websocket-event-sniffer = org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpOutgoingWebSocketEventSniffer
}

service-name = "gateway"
Expand Down Expand Up @@ -166,9 +168,6 @@ ditto {
connection-supervisor = "org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpWebSocketSupervisor"
connection-supervisor = ${?GATEWAY_WEBSOCKET_CONNECTION_SUPERVISOR}

# The listener for outgoing WebSocket events
outgoing-event-sniffer = "org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpOutgoingWebSocketEventSniffer"
outgoing-event-sniffer = ${?GATEWAY_WEBSOCKET_OUTGOING_EVENT_SNIFFER}
}

sse {
Expand Down
2 changes: 1 addition & 1 deletion gateway/service/src/test/resources/test.conf
Expand Up @@ -144,6 +144,7 @@ ditto {
websocket-config-provider = org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpWebSocketConfigProvider
sse-event-sniffer = org.eclipse.ditto.gateway.service.endpoints.routes.sse.NoOpSseEventSniffer
incoming-websocket-event-sniffer = org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpIncomingWebSocketEventSniffer
outgoing-websocket-event-sniffer = org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpOutgoingWebSocketEventSniffer
}

mapping-strategy.implementation = "org.eclipse.ditto.gateway.service.util.GatewayMappingStrategies"
Expand Down Expand Up @@ -172,7 +173,6 @@ ditto {
# The provider enforcer for WebSocket connections
streaming-authorization-enforcer = org.eclipse.ditto.gateway.service.streaming.NoOpAuthorizationEnforcer
connection-supervisor = org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpWebSocketSupervisor
outgoing-event-sniffer = org.eclipse.ditto.gateway.service.endpoints.routes.websocket.NoOpOutgoingWebSocketEventSniffer
}
}

Expand Down

0 comments on commit 92a3a71

Please sign in to comment.