From 03ae2bf59150bbbf2b36e5f592d4f42002e52f21 Mon Sep 17 00:00:00 2001 From: "Claudio D. Gasparini" Date: Fri, 21 May 2021 10:40:39 +0200 Subject: [PATCH] Fix Sonar complains Issue-ID: OAM-215 Signed-off-by: Claudio D. Gasparini Change-Id: I48fb824b105a02ebf049907bb759de6c7d33693a --- .../ves-nf-oam-adopter-parent/pom.xml | 2 +- .../adopter/snmp/manager/SnmpCommandResponder.java | 71 ++++++++++++++++++++++ .../{SnmpManagerImpl.java => SnmpManager.java} | 4 +- .../oam/adopter/snmp/manager/SnmpTrapListener.java | 62 ++++--------------- .../manager/configurations/SnmpManagerConfig.java | 6 +- .../oam/adopter/snmp/manager/SnmpManagerTest.java | 2 +- 6 files changed, 91 insertions(+), 56 deletions(-) create mode 100644 ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpCommandResponder.java rename ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/{SnmpManagerImpl.java => SnmpManager.java} (93%) diff --git a/ves-nf-oam-adopter/ves-nf-oam-adopter-parent/pom.xml b/ves-nf-oam-adopter/ves-nf-oam-adopter-parent/pom.xml index 431371c..435210a 100644 --- a/ves-nf-oam-adopter/ves-nf-oam-adopter-parent/pom.xml +++ b/ves-nf-oam-adopter/ves-nf-oam-adopter-parent/pom.xml @@ -52,7 +52,7 @@ ../ves-nf-oam-adopter-app/target/site/jacoco-ut/jacoco.xml, ../ves-nf-oam-adopter-app/target/site/jacoco-aggregate/jacoco.xml - 4.4.0.2170 + 3.8.0.2131 **/api/**, **/model/**, diff --git a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpCommandResponder.java b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpCommandResponder.java new file mode 100644 index 0000000..3e4d462 --- /dev/null +++ b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpCommandResponder.java @@ -0,0 +1,71 @@ +/* + * ============LICENSE_START======================================================= + * O-RAN-SC + * ================================================================================ + * Copyright © 2021 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.o.ran.oam.nf.oam.adopter.snmp.manager; + +import java.time.LocalDateTime; +import java.util.Optional; +import org.o.ran.oam.nf.oam.adopter.api.VesEventNotifier; +import org.o.ran.oam.nf.oam.adopter.snmp.manager.api.TimeZoneOffsetService; +import org.o.ran.oam.nf.oam.adopter.snmp.manager.mapper.SnmpMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.snmp4j.CommandResponder; +import org.snmp4j.CommandResponderEvent; +import org.snmp4j.smi.UdpAddress; + +class SnmpCommandResponder implements CommandResponder { + + private static final Logger LOG = LoggerFactory.getLogger(SnmpCommandResponder.class); + private final TimeZoneOffsetService timeZoneOffsetService; + private final SnmpMapper mapper; + private final VesEventNotifier vesEventNotifier; + + public SnmpCommandResponder(final TimeZoneOffsetService timeZoneOffsetService, final SnmpMapper mapper, + final VesEventNotifier vesEventNotifier) { + this.timeZoneOffsetService = timeZoneOffsetService; + this.mapper = mapper; + this.vesEventNotifier = vesEventNotifier; + } + + /** + * This method will be called whenever a pdu is received on the given port + * specified in the listen() method. + */ + @Override + public synchronized void processPdu(final CommandResponderEvent cmdRespEvent) { + LOG.info("Received PDU"); + final var pdu = cmdRespEvent.getPDU(); + if (pdu == null) { + LOG.warn("Ignoring PDU."); + return; + } + + final UdpAddress address = (UdpAddress) cmdRespEvent.getPeerAddress(); + final var optZoneId = timeZoneOffsetService.getTimeZone(address.getInetAddress().getHostAddress()); + final String timeZone = Optional.ofNullable(optZoneId) + .map(zoneId -> "UTC" + LocalDateTime.now().atZone(zoneId).getOffset() + .toString()).orElse(null); + + mapper.toEvent(address, timeZone, pdu).flatMapCompletable(vesEventNotifier::notifyEvents) + .doOnSubscribe(result -> LOG.debug("SNMP Trap processing started")) + .doOnComplete(() -> LOG.debug("SNMP Trap processed successfully")) + .doOnError(error -> LOG.error("Failed to process SNMP Trap", error)).subscribe(); + } +} diff --git a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManagerImpl.java b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManager.java similarity index 93% rename from ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManagerImpl.java rename to ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManager.java index b3aa381..25b5e75 100644 --- a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManagerImpl.java +++ b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManager.java @@ -24,14 +24,14 @@ import org.o.ran.oam.nf.oam.adopter.api.VesEventNotifier; import org.o.ran.oam.nf.oam.adopter.snmp.manager.api.TimeZoneOffsetService; import org.o.ran.oam.nf.oam.adopter.snmp.manager.mapper.SnmpMapper; -public class SnmpManagerImpl implements AutoCloseable { +public class SnmpManager implements AutoCloseable { private static final String SNMP_MANAGER_THREAD = "SnmpManager"; private final Thread snmpThread; /** * Default constructor. */ - public SnmpManagerImpl(final String host, final int port, final SnmpMapper mapper, + public SnmpManager(final String host, final int port, final SnmpMapper mapper, final VesEventNotifier vesEventNotifier, final TimeZoneOffsetService timeZoneOffsetService) { final var trapListener = new SnmpTrapListener(host, port, mapper, vesEventNotifier, timeZoneOffsetService); this.snmpThread = new Thread(trapListener, SNMP_MANAGER_THREAD); diff --git a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpTrapListener.java b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpTrapListener.java index a4b7bb0..597505e 100644 --- a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpTrapListener.java +++ b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpTrapListener.java @@ -19,18 +19,12 @@ package org.o.ran.oam.nf.oam.adopter.snmp.manager; -import com.google.gson.Gson; -import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.IOException; -import java.time.LocalDateTime; -import java.util.Optional; import org.o.ran.oam.nf.oam.adopter.api.VesEventNotifier; import org.o.ran.oam.nf.oam.adopter.snmp.manager.api.TimeZoneOffsetService; import org.o.ran.oam.nf.oam.adopter.snmp.manager.mapper.SnmpMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.snmp4j.CommandResponder; -import org.snmp4j.CommandResponderEvent; import org.snmp4j.MessageDispatcher; import org.snmp4j.MessageDispatcherImpl; import org.snmp4j.Snmp; @@ -40,23 +34,18 @@ import org.snmp4j.transport.DefaultUdpTransportMapping; import org.snmp4j.util.MultiThreadedMessageDispatcher; import org.snmp4j.util.ThreadPool; -final class SnmpTrapListener implements CommandResponder, Runnable { +final class SnmpTrapListener implements Runnable { private static final Logger LOG = LoggerFactory.getLogger(SnmpTrapListener.class); private static final int THREADS_SIZE = 2; private final String hostPortAddress; - private final SnmpMapper mapper; - private final VesEventNotifier vesEventNotifier; - private final Gson gson = new Gson(); - private final TimeZoneOffsetService timeZoneOffsetService; + private final SnmpCommandResponder commandResponder; public SnmpTrapListener(final String host, final Integer port, final SnmpMapper mapper, final VesEventNotifier vesEventNotifier, final TimeZoneOffsetService timeZoneOffsetService) { LOG.info("SnmpTrapListener listening on {}:{}", host, port); this.hostPortAddress = host + "/" + port; - this.mapper = mapper; - this.vesEventNotifier = vesEventNotifier; - this.timeZoneOffsetService = timeZoneOffsetService; + this.commandResponder = new SnmpCommandResponder(timeZoneOffsetService, mapper, vesEventNotifier); } @Override @@ -72,42 +61,17 @@ final class SnmpTrapListener implements CommandResponder, Runnable { } } - @SuppressFBWarnings("WA_NOT_IN_LOOP") private synchronized void listenSnmp(final MessageDispatcher dispatcher, final DefaultUdpTransportMapping snmpTarget) { - try (final var snmp = new Snmp(dispatcher, snmpTarget)) { - snmp.addCommandResponder(this); - snmpTarget.listen(); - LOG.debug("Listening on {}", snmpTarget); - wait(); - } catch (final InterruptedException | IOException ex) { - Thread.currentThread().interrupt(); - } - } - - /** - * This method will be called whenever a pdu is received on the given port - * specified in the listen() method. - */ - @Override - public synchronized void processPdu(final CommandResponderEvent cmdRespEvent) { - LOG.info("Received PDU"); - final var pdu = cmdRespEvent.getPDU(); - if (pdu == null) { - LOG.warn("Ignoring PDU."); - return; - } - - final UdpAddress address = (UdpAddress) cmdRespEvent.getPeerAddress(); - final var optZoneId = timeZoneOffsetService.getTimeZone(address.getInetAddress().getHostAddress()); - final String timeZone = Optional.ofNullable(optZoneId) - .map(zoneId -> "UTC" + LocalDateTime.now().atZone(zoneId).getOffset().toString()).orElse(null); - - mapper.toEvent(address, timeZone, pdu) - .flatMapCompletable(vesEventNotifier::notifyEvents) - .doOnSubscribe(result -> LOG.debug("SNMP Trap processing started")) - .doOnComplete(() -> LOG.debug("SNMP Trap processed successfully")) - .doOnError(error -> LOG.error("Failed to process SNMP Trap", error)) - .subscribe(); + do { + try (final var snmp = new Snmp(dispatcher, snmpTarget)) { + snmp.addCommandResponder(commandResponder); + snmpTarget.listen(); + LOG.debug("Listening on {}", snmpTarget); + wait(); + } catch (final InterruptedException | IOException ex) { + Thread.currentThread().interrupt(); + } + } while (snmpTarget.isListening()); } } diff --git a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/configurations/SnmpManagerConfig.java b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/configurations/SnmpManagerConfig.java index a39a52f..88409e9 100644 --- a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/configurations/SnmpManagerConfig.java +++ b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/main/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/configurations/SnmpManagerConfig.java @@ -20,7 +20,7 @@ package org.o.ran.oam.nf.oam.adopter.snmp.manager.configurations; import org.o.ran.oam.nf.oam.adopter.api.VesEventNotifier; -import org.o.ran.oam.nf.oam.adopter.snmp.manager.SnmpManagerImpl; +import org.o.ran.oam.nf.oam.adopter.snmp.manager.SnmpManager; import org.o.ran.oam.nf.oam.adopter.snmp.manager.api.TimeZoneOffsetService; import org.o.ran.oam.nf.oam.adopter.snmp.manager.mapper.SnmpMapper; import org.o.ran.oam.nf.oam.adopter.snmp.manager.properties.SnmpManagerProperties; @@ -50,8 +50,8 @@ public class SnmpManagerConfig { } @Bean - public SnmpManagerImpl getSnmpManagerService() { - return new SnmpManagerImpl(snmpManagerProperties.getHost(), snmpManagerProperties.getPort(), snmpMapper, + public SnmpManager getSnmpManagerService() { + return new SnmpManager(snmpManagerProperties.getHost(), snmpManagerProperties.getPort(), snmpMapper, vesEventNotifier, timeZoneOffsetService); } } diff --git a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/test/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManagerTest.java b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/test/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManagerTest.java index 913c3b6..091c783 100644 --- a/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/test/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManagerTest.java +++ b/ves-nf-oam-adopter/ves-nf-oam-adopter-snmp-manager/src/test/java/org/o/ran/oam/nf/oam/adopter/snmp/manager/SnmpManagerTest.java @@ -47,7 +47,7 @@ class SnmpManagerTest { @Autowired private SnmpManagerProperties snmpManagerProperties; @Autowired - private SnmpManagerImpl snmpManager; + private SnmpManager snmpManager; @MockBean private TimeZoneOffsetService timeZoneOffsetService; -- 2.16.6