mirror of
				https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
				synced 2025-11-03 20:17:53 +00:00 
			
		
		
		
	[WIFI-3165] Keep last stats received timestamp in gateway client session map
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
This commit is contained in:
		@@ -210,10 +210,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                long locationId = autoProvisionedLocationId;
 | 
					                long locationId = autoProvisionedLocationId;
 | 
				
			||||||
                if ((customer.getDetails() != null) && (customer.getDetails().getAutoProvisioning() != null)
 | 
					 | 
				
			||||||
                        && customer.getDetails().getAutoProvisioning().isEnabled()) {
 | 
					 | 
				
			||||||
                locationId = customer.getDetails().getAutoProvisioning().getLocationId();
 | 
					                locationId = customer.getDetails().getAutoProvisioning().getLocationId();
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    Location location = locationServiceInterface.get(locationId);
 | 
					                    Location location = locationServiceInterface.get(locationId);
 | 
				
			||||||
@@ -221,7 +218,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
 | 
				
			|||||||
                } catch (Exception e) {
 | 
					                } catch (Exception e) {
 | 
				
			||||||
                    LOG.error("Cannot auto-provision equipment because customer location with id {} cannot be found", locationId);
 | 
					                    LOG.error("Cannot auto-provision equipment because customer location with id {} cannot be found", locationId);
 | 
				
			||||||
                    throw new IllegalStateException("Cannot auto-provision equipment because customer location cannot be found : " + locationId);
 | 
					                    throw new IllegalStateException("Cannot auto-provision equipment because customer location cannot be found : " + locationId);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                ce.setSerial(connectNodeInfo.serialNumber);
 | 
					                ce.setSerial(connectNodeInfo.serialNumber);
 | 
				
			||||||
@@ -250,7 +246,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    if (!radioType.equals(RadioType.UNSUPPORTED)) {
 | 
					                    if (!radioType.equals(RadioType.UNSUPPORTED)) {
 | 
				
			||||||
                        advancedRadioConfiguration = RadioConfiguration.createWithDefaults(radioType);
 | 
					                        advancedRadioConfiguration = RadioConfiguration.createWithDefaults(radioType);
 | 
				
			||||||
 | 
					 | 
				
			||||||
                        advancedRadioMap.put(radioType, advancedRadioConfiguration);
 | 
					                        advancedRadioMap.put(radioType, advancedRadioConfiguration);
 | 
				
			||||||
                        radioConfiguration = ElementRadioConfiguration.createWithDefaults(radioType);
 | 
					                        radioConfiguration = ElementRadioConfiguration.createWithDefaults(radioType);
 | 
				
			||||||
                        radioMap.put(radioType, radioConfiguration);
 | 
					                        radioMap.put(radioType, radioConfiguration);
 | 
				
			||||||
@@ -497,7 +492,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
 | 
				
			|||||||
    private void updateApStatus(Equipment ce, ConnectNodeInfo connectNodeInfo) {
 | 
					    private void updateApStatus(Equipment ce, ConnectNodeInfo connectNodeInfo) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            Status statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.EQUIPMENT_ADMIN);
 | 
					            Status statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.EQUIPMENT_ADMIN);
 | 
				
			||||||
            if (statusRecord == null) {
 | 
					            if (statusRecord == null) {
 | 
				
			||||||
                statusRecord = new Status();
 | 
					                statusRecord = new Status();
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -51,6 +51,7 @@ import com.telecominfraproject.wlan.equipment.EquipmentServiceInterface;
 | 
				
			|||||||
import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
					import com.telecominfraproject.wlan.equipment.models.Equipment;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.controller.OpensyncCloudGatewayController;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility;
 | 
					import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility;
 | 
				
			||||||
import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
					import com.telecominfraproject.wlan.profile.ProfileServiceInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.profile.models.Profile;
 | 
					import com.telecominfraproject.wlan.profile.models.Profile;
 | 
				
			||||||
@@ -138,6 +139,8 @@ public class MqttStatsPublisher implements StatsPublisherInterface {
 | 
				
			|||||||
    private RealtimeEventPublisher realtimeEventPublisher;
 | 
					    private RealtimeEventPublisher realtimeEventPublisher;
 | 
				
			||||||
    @Autowired
 | 
					    @Autowired
 | 
				
			||||||
    private AlarmServiceInterface alarmServiceInterface;
 | 
					    private AlarmServiceInterface alarmServiceInterface;
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private OpensyncCloudGatewayController gatewayController;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @Value("${tip.wlan.mqttStatsPublisher.temperatureThresholdInC:80}")
 | 
					    @Value("${tip.wlan.mqttStatsPublisher.temperatureThresholdInC:80}")
 | 
				
			||||||
    private int temperatureThresholdInC;
 | 
					    private int temperatureThresholdInC;
 | 
				
			||||||
@@ -171,6 +174,8 @@ public class MqttStatsPublisher implements StatsPublisherInterface {
 | 
				
			|||||||
        long locationId = ce.getLocationId();
 | 
					        long locationId = ce.getLocationId();
 | 
				
			||||||
        long profileId = ce.getProfileId();
 | 
					        long profileId = ce.getProfileId();
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
 | 
					        // update timestamp for active customer equipment
 | 
				
			||||||
 | 
					        gatewayController.updateActiveCustomer(customerId);
 | 
				
			||||||
        List<ServiceMetric> metricRecordList = new ArrayList<>();
 | 
					        List<ServiceMetric> metricRecordList = new ArrayList<>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try {
 | 
					        try {
 | 
				
			||||||
@@ -260,6 +265,7 @@ public class MqttStatsPublisher implements StatsPublisherInterface {
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void publishSystemEventFromTableStateMonitor(SystemEvent event) {
 | 
					    public void publishSystemEventFromTableStateMonitor(SystemEvent event) {
 | 
				
			||||||
        LOG.info("Publishing SystemEvent received by TableStateMonitor {}", event);
 | 
					        LOG.info("Publishing SystemEvent received by TableStateMonitor {}", event);
 | 
				
			||||||
 | 
					        gatewayController.updateActiveCustomer(event.getCustomerId());
 | 
				
			||||||
        cloudEventDispatcherInterface.publishEvent(event);
 | 
					        cloudEventDispatcherInterface.publishEvent(event);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
package com.telecominfraproject.wlan.opensync.external.integration;
 | 
					package com.telecominfraproject.wlan.opensync.external.integration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Objects;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.vmware.ovsdb.service.OvsdbClient;
 | 
					import com.vmware.ovsdb.service.OvsdbClient;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
public class OvsdbSession {
 | 
					public class OvsdbSession {
 | 
				
			||||||
@@ -7,7 +9,7 @@ public class OvsdbSession {
 | 
				
			|||||||
    private String apId;
 | 
					    private String apId;
 | 
				
			||||||
    private long routingId;
 | 
					    private long routingId;
 | 
				
			||||||
    private long equipmentId;
 | 
					    private long equipmentId;
 | 
				
			||||||
    private int customerId;
 | 
					    private long mostRecentStatsTimestamp;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public OvsdbClient getOvsdbClient() {
 | 
					    public OvsdbClient getOvsdbClient() {
 | 
				
			||||||
        return ovsdbClient;
 | 
					        return ovsdbClient;
 | 
				
			||||||
@@ -33,5 +35,34 @@ public class OvsdbSession {
 | 
				
			|||||||
    public void setEquipmentId(long equipmentId) {
 | 
					    public void setEquipmentId(long equipmentId) {
 | 
				
			||||||
        this.equipmentId = equipmentId;
 | 
					        this.equipmentId = equipmentId;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    public long getMostRecentStatsTimestamp() {
 | 
				
			||||||
 | 
					        return mostRecentStatsTimestamp;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    public void setMostRecentStatsTimestamp(long mostRecentStatsTimestamp) {
 | 
				
			||||||
 | 
					        this.mostRecentStatsTimestamp = mostRecentStatsTimestamp;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public int hashCode() {
 | 
				
			||||||
 | 
					        return Objects.hash(apId, equipmentId, mostRecentStatsTimestamp, ovsdbClient, routingId);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public boolean equals(Object obj) {
 | 
				
			||||||
 | 
					        if (this == obj)
 | 
				
			||||||
 | 
					            return true;
 | 
				
			||||||
 | 
					        if (obj == null)
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        if (getClass() != obj.getClass())
 | 
				
			||||||
 | 
					            return false;
 | 
				
			||||||
 | 
					        OvsdbSession other = (OvsdbSession) obj;
 | 
				
			||||||
 | 
					        return Objects.equals(apId, other.apId) && equipmentId == other.equipmentId && mostRecentStatsTimestamp == other.mostRecentStatsTimestamp
 | 
				
			||||||
 | 
					                && Objects.equals(ovsdbClient, other.ovsdbClient) && routingId == other.routingId;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public String toString() {
 | 
				
			||||||
 | 
					        return "OvsdbSession [ovsdbClient=" + ovsdbClient + ", apId=" + apId + ", routingId=" + routingId + ", equipmentId=" + equipmentId
 | 
				
			||||||
 | 
					                + ", mostRecentStatsTimestamp=" + mostRecentStatsTimestamp + "]";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,10 +87,6 @@
 | 
				
			|||||||
    <appender-ref ref="mqttDataFile"/>
 | 
					    <appender-ref ref="mqttDataFile"/>
 | 
				
			||||||
  </logger>
 | 
					  </logger>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <logger name="MQTT_CLIENT_TRACER" level="INFO" additivity="false">
 | 
					 | 
				
			||||||
    <appender-ref ref="mqttMsgTracer"/>
 | 
					 | 
				
			||||||
  </logger>
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
  <root level="WARN">
 | 
					  <root level="WARN">
 | 
				
			||||||
    <appender-ref ref="logfile"/>
 | 
					    <appender-ref ref="logfile"/>
 | 
				
			||||||
  </root>
 | 
					  </root>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,6 @@
 | 
				
			|||||||
  <logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/>
 | 
					  <logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/>
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  <logger name="MQTT_DATA" level="INFO"/>
 | 
					  <logger name="MQTT_DATA" level="INFO"/>
 | 
				
			||||||
  <logger name="MQTT_CLIENT_TRACER" level="DEBUG"/>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  <!--   
 | 
					  <!--   
 | 
				
			||||||
  <logger name="org.springframework.security.web.authentication.preauth" level="DEBUG"/>
 | 
					  <logger name="org.springframework.security.web.authentication.preauth" level="DEBUG"/>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,6 +36,8 @@ import com.netflix.servo.monitor.Stopwatch;
 | 
				
			|||||||
import com.netflix.servo.monitor.Timer;
 | 
					import com.netflix.servo.monitor.Timer;
 | 
				
			||||||
import com.netflix.servo.tag.TagList;
 | 
					import com.netflix.servo.tag.TagList;
 | 
				
			||||||
import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
 | 
					import com.telecominfraproject.wlan.cloudmetrics.CloudMetricsTags;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
 | 
				
			||||||
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.external.integration.utils.StatsPublisherInterface;
 | 
					import com.telecominfraproject.wlan.opensync.external.integration.utils.StatsPublisherInterface;
 | 
				
			||||||
import com.telecominfraproject.wlan.opensync.util.ZlibUtil;
 | 
					import com.telecominfraproject.wlan.opensync.util.ZlibUtil;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -46,19 +48,10 @@ import sts.OpensyncStats.Report;
 | 
				
			|||||||
@Component
 | 
					@Component
 | 
				
			||||||
public class OpensyncMqttClient implements ApplicationListener<ContextClosedEvent> {
 | 
					public class OpensyncMqttClient implements ApplicationListener<ContextClosedEvent> {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // private static final String METRICS_WKR_PFX = "metrics-wkr-";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // public static final int REPORT_PROCESSING_THRESHOLD_SEC = 30;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    private static final Logger LOG = LoggerFactory.getLogger(OpensyncMqttClient.class);
 | 
					    private static final Logger LOG = LoggerFactory.getLogger(OpensyncMqttClient.class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger MQTT_LOG = LoggerFactory.getLogger("MQTT_DATA");
 | 
					    private static final Logger MQTT_LOG = LoggerFactory.getLogger("MQTT_DATA");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static final Logger MQTT_TRACER_LOG = LoggerFactory.getLogger("MQTT_CLIENT_TRACER");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    // private static final ThreadPoolExecutor executor = (ThreadPoolExecutor) Executors.newCachedThreadPool(new
 | 
					 | 
				
			||||||
    // CustomizableThreadFactory(METRICS_WKR_PFX));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    public static Charset utf8 = Charset.forName("UTF-8");
 | 
					    public static Charset utf8 = Charset.forName("UTF-8");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final TagList tags = CloudMetricsTags.commonTags;
 | 
					    private final TagList tags = CloudMetricsTags.commonTags;
 | 
				
			||||||
@@ -72,6 +65,9 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
				
			|||||||
    @Autowired
 | 
					    @Autowired
 | 
				
			||||||
    private StatsPublisherInterface statsPublisher;
 | 
					    private StatsPublisherInterface statsPublisher;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private OvsdbSessionMapInterface ovsdbSessionMapInterface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // dtop: use anonymous constructor to ensure that the following code always
 | 
					    // dtop: use anonymous constructor to ensure that the following code always
 | 
				
			||||||
    // get executed,
 | 
					    // get executed,
 | 
				
			||||||
    // even when somebody adds another constructor in here
 | 
					    // even when somebody adds another constructor in here
 | 
				
			||||||
@@ -153,37 +149,6 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
				
			|||||||
                        mqtt.setClientId("opensync_mqtt");
 | 
					                        mqtt.setClientId("opensync_mqtt");
 | 
				
			||||||
                        mqtt.setUserName(username);
 | 
					                        mqtt.setUserName(username);
 | 
				
			||||||
                        mqtt.setPassword(password);
 | 
					                        mqtt.setPassword(password);
 | 
				
			||||||
                        mqtt.setTracer(new Tracer() {
 | 
					 | 
				
			||||||
                            @Override
 | 
					 | 
				
			||||||
                            public void onReceive(MQTTFrame frame) {
 | 
					 | 
				
			||||||
                                switch (frame.messageType()) {
 | 
					 | 
				
			||||||
                                    case PINGRESP.TYPE:
 | 
					 | 
				
			||||||
                                        // PINGs don't want to fill log
 | 
					 | 
				
			||||||
                                        MQTT_TRACER_LOG.trace("OpensyncMqttClient Rx: {}", frame);
 | 
					 | 
				
			||||||
                                        break;
 | 
					 | 
				
			||||||
                                    default:
 | 
					 | 
				
			||||||
                                        MQTT_TRACER_LOG.info("OpensyncMqttClient Rx: {}", frame);
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            @Override
 | 
					 | 
				
			||||||
                            public void onSend(MQTTFrame frame) {
 | 
					 | 
				
			||||||
                                switch (frame.messageType()) {
 | 
					 | 
				
			||||||
                                    case PINGREQ.TYPE:
 | 
					 | 
				
			||||||
                                        // PINGs don't want to fill log
 | 
					 | 
				
			||||||
                                        MQTT_TRACER_LOG.trace("OpensyncMqttClient Tx: {}", frame);
 | 
					 | 
				
			||||||
                                        break;                                
 | 
					 | 
				
			||||||
                                    default:
 | 
					 | 
				
			||||||
                                        MQTT_TRACER_LOG.info("OpensyncMqttClient Tx: {}", frame);
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                            @Override
 | 
					 | 
				
			||||||
                            public void debug(String message, Object... args) {
 | 
					 | 
				
			||||||
                                MQTT_TRACER_LOG.info(String.format(message, args));
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                        blockingConnection = mqtt.blockingConnection();
 | 
					                        blockingConnection = mqtt.blockingConnection();
 | 
				
			||||||
                        blockingConnection.connect();
 | 
					                        blockingConnection.connect();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -228,14 +193,22 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
				
			|||||||
                                // Only supported protobuf on the TIP opensync APs is Report
 | 
					                                // Only supported protobuf on the TIP opensync APs is Report
 | 
				
			||||||
                                Report statsReport = Report.parseFrom(payload);
 | 
					                                Report statsReport = Report.parseFrom(payload);
 | 
				
			||||||
                                mqttMsg.ack();
 | 
					                                mqttMsg.ack();
 | 
				
			||||||
 | 
					                                String apId = extractApIdFromTopic(mqttMsg.getTopic());
 | 
				
			||||||
 | 
					                                if (apId != null) {
 | 
				
			||||||
 | 
					                                    OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(extractApIdFromTopic(mqttMsg.getTopic()));
 | 
				
			||||||
 | 
					                                    if (ovsdbSession != null) {
 | 
				
			||||||
 | 
					                                        ovsdbSession.setMostRecentStatsTimestamp(System.currentTimeMillis());
 | 
				
			||||||
 | 
					                                        LOG.debug("Last metrics received from AP updated to {}",ovsdbSession.toString());
 | 
				
			||||||
 | 
					                                    } else {
 | 
				
			||||||
 | 
					                                        LOG.debug("No ovsdb session exists for this AP {}",apId);
 | 
				
			||||||
 | 
					                                    }
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
                                MQTT_LOG.info("Topic {}\n{}", mqttMsg.getTopic(), jsonPrinter.print(statsReport));
 | 
					                                MQTT_LOG.info("Topic {}\n{}", mqttMsg.getTopic(), jsonPrinter.print(statsReport));
 | 
				
			||||||
                                statsPublisher.processMqttMessage(mqttMsg.getTopic(), statsReport);                           
 | 
					                                statsPublisher.processMqttMessage(mqttMsg.getTopic(), statsReport);                           
 | 
				
			||||||
                                LOG.debug("Dispatched report for topic {} to backend for processing", mqttMsg.getTopic());
 | 
					                                LOG.debug("Dispatched report for topic {} to backend for processing", mqttMsg.getTopic());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                            } catch (Exception e) {
 | 
					                            } catch (Exception e) {
 | 
				
			||||||
                                String msgStr = new String(mqttMsg.getPayload(), utf8);
 | 
					                                LOG.error("Exception processing topic for message {}",mqttMsg, e);
 | 
				
			||||||
                                LOG.warn("Could not process message topic = {}\nmessage = {}", mqttMsg.getTopic(), msgStr);
 | 
					 | 
				
			||||||
                            } finally {
 | 
					                            } finally {
 | 
				
			||||||
                                stopwatchTimerMessageProcess.stop();
 | 
					                                stopwatchTimerMessageProcess.stop();
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
@@ -271,4 +244,26 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
 | 
				
			|||||||
            mqttClientThread.interrupt();
 | 
					            mqttClientThread.interrupt();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * @param topic
 | 
				
			||||||
 | 
					     * @return apId extracted from the topic name, or null if it cannot be
 | 
				
			||||||
 | 
					     *         extracted
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    static String extractApIdFromTopic(String topic) {
 | 
				
			||||||
 | 
					        // Topic is formatted as
 | 
				
			||||||
 | 
					        // "/ap/"+clientCn+"_"+ret.serialNumber+"/opensync"
 | 
				
			||||||
 | 
					        if (topic == null) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String[] parts = topic.split("/");
 | 
				
			||||||
 | 
					        if (parts.length < 3) {
 | 
				
			||||||
 | 
					            return null;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // apId is the third element in the topic
 | 
				
			||||||
 | 
					        return parts[2];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user