From dceec3250bf632736f743ea0daaa7240132ea38d Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Mon, 8 Jan 2024 09:58:43 -0500 Subject: [PATCH] Make `spring-syslog-supplier` as auto-configuration * Fix `SyslogSupplierConfiguration` according to the `@AutoConfiguration` expectations * Fix all the Checkstyle violations in the `spring-syslog-supplier` --- supplier/spring-syslog-supplier/README.adoc | 2 +- .../syslog/SyslogSupplierConfiguration.java | 67 ++++++++++++------- .../syslog/SyslogSupplierProperties.java | 29 ++++---- .../fn/supplier/syslog/package-info.java | 4 ++ ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../fn/supplier/syslog/Tcp3164Tests.java | 9 +-- .../fn/supplier/syslog/Tcp5424Tests.java | 10 +-- .../supplier/syslog/TcpAndUdp3164Tests.java | 12 ++-- .../supplier/syslog/TcpAndUdp5424Tests.java | 14 ++-- .../fn/supplier/syslog/Udp3164Tests.java | 9 +-- .../fn/supplier/syslog/Udp5424Tests.java | 10 +-- 11 files changed, 101 insertions(+), 66 deletions(-) create mode 100644 supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/package-info.java create mode 100644 supplier/spring-syslog-supplier/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports diff --git a/supplier/spring-syslog-supplier/README.adoc b/supplier/spring-syslog-supplier/README.adoc index 85cd3b0e..5cef21b7 100644 --- a/supplier/spring-syslog-supplier/README.adoc +++ b/supplier/spring-syslog-supplier/README.adoc @@ -7,7 +7,7 @@ Users have to subscribe to this `Flux` and receive the data. ## Beans for injection -You can import the `SyslogSupplierConfiguration` in the application and then inject the following bean. +The `SyslogSupplierConfiguration` provides the following bean: `syslogSupplier` diff --git a/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/SyslogSupplierConfiguration.java b/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/SyslogSupplierConfiguration.java index f78bf3f4..02f5ed26 100644 --- a/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/SyslogSupplierConfiguration.java +++ b/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/SyslogSupplierConfiguration.java @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 the original author or authors. + * Copyright 2020-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,7 @@ import reactor.core.publisher.Flux; import org.springframework.beans.factory.ObjectProvider; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; @@ -43,11 +44,11 @@ import org.springframework.integration.syslog.inbound.UdpSyslogReceivingChannelA import org.springframework.messaging.Message; /** - * Configuration class for SYSLOG Supplier. + * Auto-configuration class for SYSLOG Supplier. * * @author Soby Chacko */ -@Configuration +@AutoConfiguration @EnableConfigurationProperties(SyslogSupplierProperties.class) public class SyslogSupplierConfiguration { @@ -60,12 +61,13 @@ public class SyslogSupplierConfiguration { } @Bean - public Supplier>> syslogSupplier( + public Supplier>> syslogSupplier(FluxMessageChannel syslogInputChannel, ObjectProvider udpAdapterProvider, ObjectProvider tcpAdapterProvider) { - return () -> Flux.from(syslogInputChannel()).doOnSubscribe(subscription -> { - final UdpSyslogReceivingChannelAdapter udpAdapter = udpAdapterProvider.getIfAvailable(); - final TcpSyslogReceivingChannelAdapter tcpAdapter = tcpAdapterProvider.getIfAvailable(); + + return () -> Flux.from(syslogInputChannel).doOnSubscribe((subscription) -> { + UdpSyslogReceivingChannelAdapter udpAdapter = udpAdapterProvider.getIfAvailable(); + TcpSyslogReceivingChannelAdapter tcpAdapter = tcpAdapterProvider.getIfAvailable(); if (udpAdapter != null) { udpAdapter.start(); } @@ -77,34 +79,44 @@ public class SyslogSupplierConfiguration { @Bean @ConditionalOnProperty(name = "syslog.supplier.protocol", havingValue = "udp") - public UdpSyslogReceivingChannelAdapter udpAdapter() { - return createUdpAdapter(); + public UdpSyslogReceivingChannelAdapter udpAdapter(MessageConverter syslogConverter, + FluxMessageChannel syslogInputChannel) { + + return createUdpAdapter(syslogConverter, syslogInputChannel); } @Bean @ConditionalOnProperty(name = "syslog.supplier.protocol", havingValue = "both") - public UdpSyslogReceivingChannelAdapter udpBothAdapter() { - return createUdpAdapter(); + public UdpSyslogReceivingChannelAdapter udpBothAdapter(MessageConverter syslogConverter, + FluxMessageChannel syslogInputChannel) { + + return createUdpAdapter(syslogConverter, syslogInputChannel); } - private UdpSyslogReceivingChannelAdapter createUdpAdapter() { + private UdpSyslogReceivingChannelAdapter createUdpAdapter(MessageConverter syslogConverter, + FluxMessageChannel syslogInputChannel) { + UdpSyslogReceivingChannelAdapter adapter = new UdpSyslogReceivingChannelAdapter(); - setAdapterProperties(adapter); + setAdapterProperties(adapter, syslogConverter, syslogInputChannel); return adapter; } @Bean @ConditionalOnProperty(name = "syslog.supplier.protocol", havingValue = "tcp", matchIfMissing = true) public TcpSyslogReceivingChannelAdapter tcpAdapter( - @Qualifier("syslogSupplierConnectionFactory") AbstractServerConnectionFactory connectionFactory) { - return createTcpAdapter(connectionFactory); + @Qualifier("syslogSupplierConnectionFactory") AbstractServerConnectionFactory connectionFactory, + MessageConverter syslogConverter, FluxMessageChannel syslogInputChannel) { + + return createTcpAdapter(connectionFactory, syslogConverter, syslogInputChannel); } @Bean @ConditionalOnProperty(name = "syslog.supplier.protocol", havingValue = "both") public TcpSyslogReceivingChannelAdapter tcpBothAdapter( - @Qualifier("syslogSupplierConnectionFactory") AbstractServerConnectionFactory connectionFactory) { - return createTcpAdapter(connectionFactory); + @Qualifier("syslogSupplierConnectionFactory") AbstractServerConnectionFactory connectionFactory, + MessageConverter syslogConverter, FluxMessageChannel syslogInputChannel) { + + return createTcpAdapter(connectionFactory, syslogConverter, syslogInputChannel); } @Bean @@ -117,21 +129,25 @@ public class SyslogSupplierConfiguration { } } - private TcpSyslogReceivingChannelAdapter createTcpAdapter(AbstractServerConnectionFactory connectionFactory) { + private TcpSyslogReceivingChannelAdapter createTcpAdapter(AbstractServerConnectionFactory connectionFactory, + MessageConverter syslogConverter, FluxMessageChannel syslogInputChannel) { + TcpSyslogReceivingChannelAdapter adapter = new TcpSyslogReceivingChannelAdapter(); adapter.setConnectionFactory(connectionFactory); - setAdapterProperties(adapter); + setAdapterProperties(adapter, syslogConverter, syslogInputChannel); return adapter; } - private void setAdapterProperties(SyslogReceivingChannelAdapterSupport adapter) { + private void setAdapterProperties(SyslogReceivingChannelAdapterSupport adapter, MessageConverter syslogConverter, + FluxMessageChannel syslogInputChannel) { + adapter.setPort(this.properties.getPort()); - adapter.setConverter(syslogConverter()); - adapter.setOutputChannel(syslogInputChannel()); + adapter.setConverter(syslogConverter); + adapter.setOutputChannel(syslogInputChannel); adapter.setAutoStartup(false); } - @Configuration + @Configuration(proxyBeanMethods = false) @ConditionalOnProperty(name = "syslog.supplier.protocol", havingValue = "tcp", matchIfMissing = true) protected static class TcpBits { @@ -140,7 +156,8 @@ public class SyslogSupplierConfiguration { @Bean public AbstractServerConnectionFactory syslogSupplierConnectionFactory( - @Qualifier("syslogSupplierDecoder") Deserializer decoder) throws Exception { + @Qualifier("syslogSupplierDecoder") Deserializer decoder) { + AbstractServerConnectionFactory factory; if (this.properties.isNio()) { factory = new TcpNioServerConnectionFactory(this.properties.getPort()); @@ -168,7 +185,7 @@ public class SyslogSupplierConfiguration { } - @Configuration + @Configuration(proxyBeanMethods = false) @ConditionalOnProperty(name = "syslog.supplier.protocol", havingValue = "both") protected static class BothBits extends TcpBits { diff --git a/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/SyslogSupplierProperties.java b/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/SyslogSupplierProperties.java index bb2b1526..e8ba029a 100644 --- a/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/SyslogSupplierProperties.java +++ b/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/SyslogSupplierProperties.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,6 +22,11 @@ import jakarta.validation.constraints.NotNull; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.validation.annotation.Validated; +/** + * The configuration properties for Syslog supplier. + * + * @author Soby Chacko + */ @ConfigurationProperties("syslog.supplier") @Validated public class SyslogSupplierProperties { @@ -42,28 +47,28 @@ public class SyslogSupplierProperties { private int port = 1514; /** - * whether or not to use NIO (when supporting a large number of connections). + * Whether to use NIO (when supporting a large number of connections). */ private boolean nio = false; /** - * whether or not to perform a reverse lookup on the incoming socket. + * Whether to perform a reverse lookup on the incoming socket. */ private boolean reverseLookup; /** - * the socket timeout. + * The socket timeout. */ private int socketTimeout; /** - * '5424' or '3164' - the syslog format according to the RFC; 3164 is aka 'BSD' + * The '5424' or '3164' - the syslog format according to the RFC; 3164 is aka 'BSD' * format. */ private String rfc = "3164"; public int getBufferSize() { - return bufferSize; + return this.bufferSize; } public void setBufferSize(int bufferSize) { @@ -71,7 +76,7 @@ public class SyslogSupplierProperties { } public Protocol getProtocol() { - return protocol; + return this.protocol; } public void setProtocol(Protocol protocol) { @@ -79,7 +84,7 @@ public class SyslogSupplierProperties { } public int getPort() { - return port; + return this.port; } public void setPort(int port) { @@ -87,7 +92,7 @@ public class SyslogSupplierProperties { } public boolean isNio() { - return nio; + return this.nio; } public void setNio(boolean nio) { @@ -95,7 +100,7 @@ public class SyslogSupplierProperties { } public boolean isReverseLookup() { - return reverseLookup; + return this.reverseLookup; } public void setReverseLookup(boolean reverseLookup) { @@ -103,7 +108,7 @@ public class SyslogSupplierProperties { } public int getSocketTimeout() { - return socketTimeout; + return this.socketTimeout; } public void setSocketTimeout(int socketTimeout) { @@ -112,7 +117,7 @@ public class SyslogSupplierProperties { @NotNull public String getRfc() { - return rfc; + return this.rfc; } public void setRfc(String rfc) { diff --git a/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/package-info.java b/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/package-info.java new file mode 100644 index 00000000..a223fbe3 --- /dev/null +++ b/supplier/spring-syslog-supplier/src/main/java/org/springframework/cloud/fn/supplier/syslog/package-info.java @@ -0,0 +1,4 @@ +/** + * The Syslog supplier auto-configuration support. + */ +package org.springframework.cloud.fn.supplier.syslog; diff --git a/supplier/spring-syslog-supplier/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/supplier/spring-syslog-supplier/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports new file mode 100644 index 00000000..612fc282 --- /dev/null +++ b/supplier/spring-syslog-supplier/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -0,0 +1 @@ +org.springframework.cloud.fn.supplier.syslog.SyslogSupplierConfiguration diff --git a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Tcp3164Tests.java b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Tcp3164Tests.java index bb1a774f..e370e2ed 100644 --- a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Tcp3164Tests.java +++ b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Tcp3164Tests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,9 +32,10 @@ public class Tcp3164Tests extends AbstractSyslogSupplierTests { public void test() throws Exception { final Flux> messageFlux = syslogSupplier.get(); - final StepVerifier stepVerifier = StepVerifier.create(messageFlux).assertNext((message) -> { - assertThat(((Map) message.getPayload()).get("HOST")).isEqualTo("WEBERN"); - }).thenCancel().verifyLater(); + final StepVerifier stepVerifier = StepVerifier.create(messageFlux) + .assertNext((message) -> assertThat(((Map) message.getPayload()).get("HOST")).isEqualTo("WEBERN")) + .thenCancel() + .verifyLater(); sendTcp(AbstractSyslogSupplierTests.RFC3164_PACKET + "\n"); diff --git a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Tcp5424Tests.java b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Tcp5424Tests.java index 2b372d57..59f75f64 100644 --- a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Tcp5424Tests.java +++ b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Tcp5424Tests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,9 +34,11 @@ public class Tcp5424Tests extends AbstractSyslogSupplierTests { public void test() throws Exception { final Flux> messageFlux = syslogSupplier.get(); - final StepVerifier stepVerifier = StepVerifier.create(messageFlux).assertNext((message) -> { - assertThat(((Map) message.getPayload()).get("syslog_HOST")).isEqualTo("loggregator"); - }).thenCancel().verifyLater(); + final StepVerifier stepVerifier = StepVerifier.create(messageFlux) + .assertNext((message) -> assertThat(((Map) message.getPayload()).get("syslog_HOST")) + .isEqualTo("loggregator")) + .thenCancel() + .verifyLater(); sendTcp("253 " + RFC5424_PACKET); diff --git a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/TcpAndUdp3164Tests.java b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/TcpAndUdp3164Tests.java index 9c4db156..2f2109f6 100644 --- a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/TcpAndUdp3164Tests.java +++ b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/TcpAndUdp3164Tests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,11 +33,11 @@ public class TcpAndUdp3164Tests extends AbstractSyslogSupplierTests { @Test public void test() throws Exception { final Flux> messageFlux = syslogSupplier.get(); - final StepVerifier stepVerifier = StepVerifier.create(messageFlux).assertNext((message) -> { - assertThat(((Map) message.getPayload()).get("HOST")).isEqualTo("WEBERN"); - }).assertNext((message) -> { - assertThat(((Map) message.getPayload()).get("HOST")).isEqualTo("WEBERN"); - }).thenCancel().verifyLater(); + final StepVerifier stepVerifier = StepVerifier.create(messageFlux) + .assertNext((message) -> assertThat(((Map) message.getPayload()).get("HOST")).isEqualTo("WEBERN")) + .assertNext((message) -> assertThat(((Map) message.getPayload()).get("HOST")).isEqualTo("WEBERN")) + .thenCancel() + .verifyLater(); sendTcp(RFC3164_PACKET + "\n"); sendUdp(RFC3164_PACKET); diff --git a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/TcpAndUdp5424Tests.java b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/TcpAndUdp5424Tests.java index 00e6ddce..94f2b28b 100644 --- a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/TcpAndUdp5424Tests.java +++ b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/TcpAndUdp5424Tests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,11 +33,13 @@ public class TcpAndUdp5424Tests extends AbstractSyslogSupplierTests { @Test public void test() throws Exception { final Flux> messageFlux = syslogSupplier.get(); - final StepVerifier stepVerifier = StepVerifier.create(messageFlux).assertNext((message) -> { - assertThat(((Map) message.getPayload()).get("syslog_HOST")).isEqualTo("loggregator"); - }).assertNext((message) -> { - assertThat(((Map) message.getPayload()).get("syslog_HOST")).isEqualTo("loggregator"); - }).thenCancel().verifyLater(); + final StepVerifier stepVerifier = StepVerifier.create(messageFlux) + .assertNext((message) -> assertThat(((Map) message.getPayload()).get("syslog_HOST")) + .isEqualTo("loggregator")) + .assertNext((message) -> assertThat(((Map) message.getPayload()).get("syslog_HOST")) + .isEqualTo("loggregator")) + .thenCancel() + .verifyLater(); sendTcp("253 " + RFC5424_PACKET); sendUdp(RFC5424_PACKET); diff --git a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Udp3164Tests.java b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Udp3164Tests.java index e8578924..450f07ea 100644 --- a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Udp3164Tests.java +++ b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Udp3164Tests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -34,9 +34,10 @@ public class Udp3164Tests extends AbstractSyslogSupplierTests { public void test() throws Exception { final Flux> messageFlux = syslogSupplier.get(); - final StepVerifier stepVerifier = StepVerifier.create(messageFlux).assertNext((message) -> { - assertThat(((Map) message.getPayload()).get("HOST")).isEqualTo("WEBERN"); - }).thenCancel().verifyLater(); + final StepVerifier stepVerifier = StepVerifier.create(messageFlux) + .assertNext((message) -> assertThat(((Map) message.getPayload()).get("HOST")).isEqualTo("WEBERN")) + .thenCancel() + .verifyLater(); sendUdp(RFC3164_PACKET); diff --git a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Udp5424Tests.java b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Udp5424Tests.java index 94d41c40..d78f685f 100644 --- a/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Udp5424Tests.java +++ b/supplier/spring-syslog-supplier/src/test/java/org/springframework/cloud/fn/supplier/syslog/Udp5424Tests.java @@ -1,5 +1,5 @@ /* - * Copyright 2016-2020 the original author or authors. + * Copyright 2016-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,9 +33,11 @@ public class Udp5424Tests extends AbstractSyslogSupplierTests { @Test public void test() throws Exception { final Flux> messageFlux = syslogSupplier.get(); - final StepVerifier stepVerifier = StepVerifier.create(messageFlux).assertNext((message) -> { - assertThat(((Map) message.getPayload()).get("syslog_HOST")).isEqualTo("loggregator"); - }).thenCancel().verifyLater(); + final StepVerifier stepVerifier = StepVerifier.create(messageFlux) + .assertNext((message) -> assertThat(((Map) message.getPayload()).get("syslog_HOST")) + .isEqualTo("loggregator")) + .thenCancel() + .verifyLater(); sendUdp(RFC5424_PACKET); stepVerifier.verify();