Compare commits

...

60 Commits

Author SHA1 Message Date
Thomas-Leung2021
7c52d06598 [WIFI-3344] remove artifact from removing ClientSessionMetricDetails() 2021-08-04 17:09:27 -04:00
Mike Hansen
8110f796c9 [WIFI-3345] If DATE from version_matrix does not contain year, upgrade to firmware specified in the track version
Signed-off-by: Mike Hansen <mike.hansen@netexperience.com>
2021-08-04 16:03:51 -04:00
Mike Hansen
2b187ed68d AP is not upgraded to target version after its provisioned for first time.
Signed-off-by: Mike Hansen <mike.hansen@netexperience.com>
2021-08-03 17:55:25 -04:00
Mike Hansen
a4559b4f37 [WIFI-3287] Some metrics show choppy behavior while the others are OK
Signed-off-by: Mike Hansen <mike.hansen@netexperience.com>
2021-07-29 11:27:24 -04:00
Mike Hansen
8105c5bc9d Some metrics show choppy behavior while the others are OK
Signed-off-by: Mike Hansen <mike.hansen@netexperience.com>
2021-07-28 15:15:12 -04:00
Thomas-Leung2021
1409d75dd9 Revert "[WIFI-3129] set createTimestamp in Channel, ActiveBSSID, Lan, and Protocol status"
This reverts commit a6cb5ae939.
2021-07-28 09:58:42 -04:00
Thomas-Leung2021
a6cb5ae939 [WIFI-3129] set createTimestamp in Channel, ActiveBSSID, Lan, and Protocol status 2021-07-23 11:38:42 -04:00
Mike Hansen
fb3963e750 Merge branch 'WIFI-3129' 2021-07-23 11:09:33 -04:00
Thomas-Leung2021
b7779f3137 fix merge conflict 2021-07-23 10:56:38 -04:00
Kareem Dabbour
9b3f6f5cb2 WIFI-3216 using 0 rather than currentMillis() 2021-07-23 08:04:38 -04:00
Kareem Dabbour
d026266bfa WIFI-3216 using currentMillis() rather than 0 2021-07-23 08:04:38 -04:00
Kareem Dabbour
27f406a615 WIFI-3216 Made the service metrics' timestamps 0 so that the CloudEventDispatcherController can assign unique TS 2021-07-23 08:04:38 -04:00
Thomas-Leung2021
b15dbc61af set createTimestamp in status 2021-07-22 18:48:01 -04:00
Mike Hansen
14adaaacbe APs running into Backoff shows as connected
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-22 15:32:21 -04:00
Mike Hansen
11f0aa8856 APs running into Backoff shows as connected.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-22 13:38:06 -04:00
Mike Hansen
cbd27b37bf APs running into Backoff shows as connected.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-21 10:56:39 -04:00
Mike Hansen
80834c0a31 Logs: Client Devices: isReassociation Flag is set to TRUE always
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-20 14:40:27 -04:00
Mike Hansen
45642464fc [WIFI-3181] check for null customer equipment when processing ovsdb table state updates
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-20 11:48:20 -04:00
Mike Hansen
be9d880bc3 [WIFI-3166] Session ID is a -ve number in opensyncgw logs and on UI logs
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-19 19:31:18 -04:00
Mike Hansen
711fea3407 [WIFI-3165] Keep last stats received timestamp in gateway client session map
Support call from portal to get metric timestamp for APs ovsdb session

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-19 14:14:59 -04:00
Mike Hansen
e5e7ac7e8b [WIFI-3165] Keep last stats received timestamp in gateway client session map
Add API call to controller to get timestamp.

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-19 12:25:56 -04:00
Mike Hansen
6264a8c490 [WIFI-3165] Keep last stats received timestamp in gateway client session map
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-19 11:40:10 -04:00
Mike Hansen
1070708b44 [WIFI-3031] Proxy_arp is set to 0 in bridge mode config
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-16 09:44:48 -04:00
Mike Hansen
80845aa800 Associated Client Rx and Unassociated Client Rx graphs are overlapping
Fix calc error for nonWifi

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-15 16:00:11 -04:00
Mike Hansen
7a646fd459 Associated Client Rx and Unassociated Client Rx graphs are overlapping
Updates needed:
AssociatedClientRx = Rx for Self

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-15 15:29:04 -04:00
Mike Hansen
905f37cc68 [WIFI-3049] Write LOG when time for received statistics is greater than Threshold from the current System time.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-15 13:30:15 -04:00
Mike Hansen
1a58b3af01 OpensyncGatewayController:
Control LED off via Equipment AP profile and Show LED status in EQUIPMENT_ADMIN status

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-14 17:33:31 -04:00
Mike Hansen
bb130e5f3e Add debug information for wifi radio configuration
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-14 12:06:56 -04:00
Mike Hansen
b8e4c404bb Improvements:
WIFI-2989: Remove dependency on customerid from ovsdb session
WIFI-2988: Ovsdb schema check for Wifi_Radio_Config and Wifi_RRM_Config

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-12 18:31:08 -04:00
Mike Hansen
42a520b7ec MQTT message delivery reliability
- MqttStatsPublisher measure time for overall and per report metrics generation

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-08 19:10:26 -04:00
Mike Hansen
90b0da4850 Add logging of mqtt trace to docker images
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-08 12:34:24 -04:00
Mike Hansen
b842c532a8 MQTT changes:
Remove MQTT message hop from OpensyncExternalIntegrationInterface
  Add separate logging for mqtt msg tracing

Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-08 09:36:19 -04:00
Mike Hansen
785dc0e6c4 MQTT Client analysis and optimization
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-07-07 13:30:32 -04:00
Thomas-Leung2021
927ce4e589 change to getByInventoryIdOrNull() with updated test 2021-07-06 18:00:34 -04:00
Mike Hansen
c287f7cdc6 Revert "change getOrNull() to getByInventoryIdOrNull() to get equipment"
This reverts commit 2aa51afe9d.
2021-07-06 16:28:29 -04:00
Thomas-Leung2021
2aa51afe9d change getOrNull() to getByInventoryIdOrNull() to get equipment 2021-07-06 16:15:07 -04:00
Norm Traxler
716e5d8129 [WIFI-2932] Change client IP event to InetAddress 2021-07-06 10:11:19 -04:00
Norm Traxler
4f462ecf70 [WIFI-2670] Change log for debugging 2021-06-28 23:17:47 -04:00
norm-traxler
fc61328fc4 Merge pull request #48 from Telecominfraproject/hotfix/netexp-2342
fix bug for cannot find alarm to be deleted exception
2021-06-28 19:43:34 -04:00
Thomas-Leung2021
18698fc188 fix bug for cannot find alarm to be deleted exception 2021-06-28 19:05:01 -04:00
Mike Hansen
34a6baf956 Merge branch 'master' of github.com:Telecominfraproject/wlan-cloud-opensync-controller 2021-06-25 13:55:13 -04:00
Mike Hansen
2e3b0c277a WIFI-1489: AP: Disable local access not working as expected
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-25 13:51:00 -04:00
Thomas-Leung2021
4370753206 add tx_power status 2021-06-25 13:25:19 -04:00
Mike Hansen
aaa584ca3c Merge pull request #46 from Telecominfraproject/mqtt_client_analysis_and_optimization
MQTT Client analysis and optimization
2021-06-24 10:22:46 -04:00
Mike Hansen
210976887f MQTT Client analysis and optimization
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-23 17:43:01 -04:00
Mike Hansen
43f53ee0be Merge pull request #45 from Telecominfraproject/disable_eq_alarms_sp
Move the raising and clearing of the threshold alarms into the gatewa…
2021-06-22 16:04:18 -04:00
Mike Hansen
1381451989 Move the raising and clearing of the threshold alarms into the gateway controller when the device information is received in the MQTT device report. Update EquipmentAdminState alarms or clear if required.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-22 15:52:14 -04:00
Mike Hansen
6124309dbb Move the raising and clearing of the threshold alarms into the gateway controller when the device information is received in the MQTT device report. Update EquipmentAdminState alarms or clear if required.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-22 14:17:12 -04:00
Mike Hansen
f2e30505e5 Move the raising and clearing of the threshold alarms into the gateway controller when the device information is received in the MQTT device report. Update EquipmentAdminState alarms or clear if required.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-22 12:46:10 -04:00
Mike Hansen
bda589e65e Move the raising and clearing of the threshold alarms into the gateway controller when the device information is received in the MQTT device report. Update EquipmentAdminState alarms or clear if required.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-22 12:31:30 -04:00
Mike Hansen
5a98d4bd83 Merge branch 'disable_eq_alarms_sp' of github.com:Telecominfraproject/wlan-cloud-opensync-controller into disable_eq_alarms_sp 2021-06-22 11:27:09 -04:00
Mike Hansen
a772cbe7fa WIFI-2697: Remove old parameter from captive portal configuration on Gateway side
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-22 11:19:18 -04:00
Mike Hansen
11adb02fd2 Move the raising and clearing of the threshold alarms into the gateway controller when the device information is received in the MQTT device report. Update EquipmentAdminState alarms or clear if required.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-22 11:12:59 -04:00
Mike Hansen
9aa4a102a5 Move the raising and clearing of the threshold alarms into the gateway controller when the device information is received in the MQTT device report. Update EquipmentAdminState alarms or clear if required.
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-22 10:23:21 -04:00
Mike Hansen
d482b4062f WIFI-2686: RADSEC: APs are running into Backoff with AP Proxy config
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-21 17:01:37 -04:00
Mike Hansen
ee49415b0a WIFI-2052: Country Code displayed in UI doesn't match AP
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-21 14:10:37 -04:00
Mike Hansen
cc035e7fe1 WIFI-2686: RADSEC: APs are running into Backoff with AP Proxy config
Signed-off-by: Mike Hansen <mike.hansen@connectus.ai>
2021-06-19 17:38:23 -04:00
Mike Hansen
d617efbcc1 Merge pull request #44 from Telecominfraproject/WPA3EAP192
[WIFI-2646] add support for WPA3-Enterprise 192-Bit
2021-06-17 14:28:16 -04:00
Thomas-Leung2021
53f19028dc add support for WPA3-Enterprise 192-Bit 2021-06-17 12:03:22 -04:00
Mike Hansen
f2b4b616ad Merge pull request #43 from Telecominfraproject/hotfix/NETEXP-2077
remove metrics from ClientSession
2021-06-15 10:20:57 -04:00
24 changed files with 1169 additions and 1130 deletions

View File

@@ -11,11 +11,11 @@
<name>opensync-ext-cloud</name> <name>opensync-ext-cloud</name>
<description>Configuration interface that provides config from the cloud services.</description> <description>Configuration interface that provides config from the cloud services.</description>
<dependencies> <dependencies>
<!-- <dependency> --> <dependency>
<!-- <groupId>com.telecominfraproject.wlan</groupId> --> <groupId>com.telecominfraproject.wlan</groupId>
<!-- <artifactId>opensync-ext-interface</artifactId> --> <artifactId>opensync-ext-interface</artifactId>
<!-- <version>0.0.1-SNAPSHOT</version> --> <version>1.2.0-SNAPSHOT</version>
<!-- </dependency> --> </dependency>
<dependency> <dependency>
<groupId>com.telecominfraproject.wlan</groupId> <groupId>com.telecominfraproject.wlan</groupId>
<artifactId>opensync-gateway</artifactId> <artifactId>opensync-gateway</artifactId>

View File

@@ -5,14 +5,23 @@ import java.net.Inet4Address;
import java.net.Inet6Address; import java.net.Inet6Address;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalField;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -37,11 +46,11 @@ import com.telecominfraproject.wlan.client.session.models.AssociationState;
import com.telecominfraproject.wlan.client.session.models.ClientDhcpDetails; import com.telecominfraproject.wlan.client.session.models.ClientDhcpDetails;
import com.telecominfraproject.wlan.client.session.models.ClientSession; import com.telecominfraproject.wlan.client.session.models.ClientSession;
import com.telecominfraproject.wlan.client.session.models.ClientSessionDetails; import com.telecominfraproject.wlan.client.session.models.ClientSessionDetails;
import com.telecominfraproject.wlan.client.session.models.ClientSessionMetricDetails;
import com.telecominfraproject.wlan.core.model.entity.CountryCode; import com.telecominfraproject.wlan.core.model.entity.CountryCode;
import com.telecominfraproject.wlan.core.model.equipment.EquipmentType; import com.telecominfraproject.wlan.core.model.equipment.EquipmentType;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress; import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.core.model.equipment.WiFiSessionUtility;
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext; import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse; import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.customer.models.Customer; import com.telecominfraproject.wlan.customer.models.Customer;
@@ -76,7 +85,7 @@ import com.telecominfraproject.wlan.opensync.external.integration.models.Opensyn
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAWLANNode; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAWLANNode;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncWifiAssociatedClients;
import com.telecominfraproject.wlan.opensync.external.integration.utils.MqttStatsPublisher; import com.telecominfraproject.wlan.opensync.external.integration.utils.StatsPublisherInterface;
import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.enumerations.DhcpFpDeviceType; import com.telecominfraproject.wlan.opensync.ovsdb.dao.models.enumerations.DhcpFpDeviceType;
import com.telecominfraproject.wlan.opensync.util.OvsdbStringConstants; import com.telecominfraproject.wlan.opensync.util.OvsdbStringConstants;
import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility; import com.telecominfraproject.wlan.opensync.util.OvsdbToWlanCloudTypeMappingUtility;
@@ -103,6 +112,7 @@ import com.telecominfraproject.wlan.status.equipment.models.EquipmentProtocolSta
import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState; import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState;
import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState.FailureReason; import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeState.FailureReason;
import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeStatusData; import com.telecominfraproject.wlan.status.equipment.models.EquipmentUpgradeStatusData;
import com.telecominfraproject.wlan.status.equipment.models.LedStatus;
import com.telecominfraproject.wlan.status.equipment.models.VLANStatusData; import com.telecominfraproject.wlan.status.equipment.models.VLANStatusData;
import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSID; import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSID;
import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSIDs; import com.telecominfraproject.wlan.status.equipment.report.models.ActiveBSSIDs;
@@ -115,17 +125,17 @@ import com.telecominfraproject.wlan.status.models.StatusCode;
import com.telecominfraproject.wlan.status.models.StatusDataType; import com.telecominfraproject.wlan.status.models.StatusDataType;
import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData; import com.telecominfraproject.wlan.status.network.models.NetworkAdminStatusData;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent; import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEventType;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent.ApcMode; import com.telecominfraproject.wlan.systemevent.equipment.realtime.ApcElectionEvent.ApcMode;
import com.telecominfraproject.wlan.systemevent.equipment.realtime.RealTimeEventType;
import sts.OpensyncStats.Report; import sts.OpensyncStats.Report;
import traffic.NetworkMetadata.FlowReport;
import wc.stats.IpDnsTelemetry.WCStatsReport;
@org.springframework.context.annotation.Profile("opensync_cloud_config") @org.springframework.context.annotation.Profile("opensync_cloud_config")
@Component @Component
public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegrationInterface { public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegrationInterface {
protected static final String standard_linux_date_format = "EEE MMM dd HH:mm:ss zzz yyyy";
private static final Logger LOG = LoggerFactory.getLogger(OpensyncExternalIntegrationCloud.class); private static final Logger LOG = LoggerFactory.getLogger(OpensyncExternalIntegrationCloud.class);
@Autowired @Autowired
@@ -147,7 +157,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
@Autowired @Autowired
private FirmwareServiceInterface firmwareServiceInterface; private FirmwareServiceInterface firmwareServiceInterface;
@Autowired @Autowired
private MqttStatsPublisher mqttMessageProcessor; private StatsPublisherInterface statsPublisherInterface;
@Autowired @Autowired
private AlarmServiceInterface alarmServiceInterface; private AlarmServiceInterface alarmServiceInterface;
@@ -182,7 +192,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
@Override @Override
public void apConnected(String apId, ConnectNodeInfo connectNodeInfo) { public void apConnected(String apId, ConnectNodeInfo connectNodeInfo) {
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
try { try {
@@ -217,14 +227,13 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
&& customer.getDetails().getAutoProvisioning().isEnabled()) { && customer.getDetails().getAutoProvisioning().isEnabled()) {
locationId = customer.getDetails().getAutoProvisioning().getLocationId(); locationId = customer.getDetails().getAutoProvisioning().getLocationId();
} }
try { try {
Location location = locationServiceInterface.get(locationId); Location location = locationServiceInterface.getOrNull(locationId);
ce.setLocationId(location.getId()); if (location != null)
ce.setLocationId(location.getId());
} 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);
@@ -253,7 +262,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);
@@ -406,21 +414,35 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
ovsdbSession.setRoutingId(equipmentRoutingRecord.getId()); ovsdbSession.setRoutingId(equipmentRoutingRecord.getId());
ovsdbSession.setEquipmentId(ce.getId()); ovsdbSession.setEquipmentId(ce.getId());
ovsdbSession.setCustomerId(ce.getCustomerId());
LOG.debug("Equipment {}", ce); LOG.debug("Equipment {}", ce);
LOG.info("AP {} got connected to the gateway", apId); LOG.info("AP {} got connected to the gateway", apId);
LOG.info("ConnectNodeInfo {}", connectNodeInfo); LOG.info("ConnectNodeInfo {}", connectNodeInfo);
if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)) { if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY) && connectNodeInfo.versionMatrix.containsKey("DATE")) {
reconcileFwVersionToTrack(ce, connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY), connectNodeInfo.model); // The AP uses standard linux date format. So the format would be:
// root@OpenAp-0498b5:~# date
// Tue Aug 3 14:55:28 UTC 2021
DateFormat dateFormat = new SimpleDateFormat(standard_linux_date_format, Locale.ENGLISH);
String dateString = connectNodeInfo.versionMatrix.get("DATE").strip();
try {
Date date = dateFormat.parse(dateString);
reconcileFwVersionToTrack(ce, connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY),
connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_INACTIVE_KEY), date.getTime(), connectNodeInfo.model,
connectNodeInfo.firmwareVersion);
} catch (java.text.ParseException p) {
LOG.info("Could not parse release date {} from AP fw, set date to EPOCH start value.", dateString, Instant.EPOCH);
reconcileFwVersionToTrack(ce, connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY),
connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_INACTIVE_KEY), Instant.EPOCH.getLong(ChronoField.INSTANT_SECONDS), connectNodeInfo.model,
connectNodeInfo.firmwareVersion);
}
} else { } else {
LOG.info("Cloud based firmware upgrade is not supported for this AP"); LOG.info("Cloud based firmware upgrade is not supported for this AP");
} }
} catch (Exception e) { } catch (Exception e) {
LOG.error("Could not process connection from AP {}", apId, e); LOG.error("Could not process connection from AP {}", apId, e);
throw e; throw new RuntimeException(e);
} }
} }
@@ -501,7 +523,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();
@@ -512,6 +533,9 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
} }
((EquipmentAdminStatusData) statusRecord.getDetails()).setStatusCode(StatusCode.normal); ((EquipmentAdminStatusData) statusRecord.getDetails()).setStatusCode(StatusCode.normal);
if (((EquipmentAdminStatusData) statusRecord.getDetails()).getLedStatus() == null) {
((EquipmentAdminStatusData) statusRecord.getDetails()).setLedStatus(LedStatus.UNKNOWN);
}
// Update the equipment admin status // Update the equipment admin status
statusRecord = statusServiceInterface.update(statusRecord); statusRecord = statusServiceInterface.update(statusRecord);
@@ -550,8 +574,12 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
protocolStatusData.setBaseMacAddress(MacAddress.valueOf(connectNodeInfo.macAddress)); protocolStatusData.setBaseMacAddress(MacAddress.valueOf(connectNodeInfo.macAddress));
protocolStatusData.setCloudCfgDataVersion(42L); protocolStatusData.setCloudCfgDataVersion(42L);
protocolStatusData.setReportedCfgDataVersion(42L); protocolStatusData.setReportedCfgDataVersion(42L);
protocolStatusData.setCountryCode("CA"); CountryCode countryCode = Location.getCountryCode(locationServiceInterface.getOrNull(ce.getLocationId()));
protocolStatusData.setReportedCC(CountryCode.CA); if (countryCode != null)
protocolStatusData.setCountryCode(countryCode.getName());
if (connectNodeInfo.country != null) {
protocolStatusData.setReportedCC(CountryCode.getByName(connectNodeInfo.country));
}
protocolStatusData.setReportedHwVersion(connectNodeInfo.platformVersion); protocolStatusData.setReportedHwVersion(connectNodeInfo.platformVersion);
if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)) { if (connectNodeInfo.versionMatrix.containsKey(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)) {
protocolStatusData.setReportedSwVersion(connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY)); protocolStatusData.setReportedSwVersion(connectNodeInfo.versionMatrix.get(OvsdbStringConstants.FW_IMAGE_ACTIVE_KEY));
@@ -725,102 +753,97 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
} }
private void reconcileFwVersionToTrack(Equipment ce, String reportedFwVersionFromAp, String model) { void reconcileFwVersionToTrack(Equipment ce, String activeFirmwareImageAp, String inactiveFirmwareImageAp, Long activeFwReleaseDate, String model,
String firmwareVersion) {
LOG.debug("reconcileFwVersionToTrack for AP {} with active firmware version {} model {}", ce.getInventoryId(), reportedFwVersionFromAp, model);
Status statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.FIRMWARE);
LOG.debug("reconcileFwVersionToTrack for AP {} with active firmware version {} model {}", ce.getInventoryId(), activeFirmwareImageAp, model);
Status statusRecord = statusServiceInterface.getOrNull(autoProvisionedCustomerId, autoProvisionedCustomerId, StatusDataType.FIRMWARE);
if (statusRecord == null) {
statusRecord = new Status();
statusRecord.setCreatedTimestamp(System.currentTimeMillis());
statusRecord.setCustomerId(ce.getCustomerId());
statusRecord.setEquipmentId(ce.getId());
statusRecord.setStatusDataType(StatusDataType.FIRMWARE);
statusRecord.setDetails(new EquipmentUpgradeStatusData());
((EquipmentUpgradeStatusData) statusRecord.getDetails()).setActiveSwVersion(activeFirmwareImageAp);
if (inactiveFirmwareImageAp != null) {
((EquipmentUpgradeStatusData) statusRecord.getDetails()).setActiveSwVersion(inactiveFirmwareImageAp);
}
}
EquipmentUpgradeStatusData fwUpgradeStatusData = (EquipmentUpgradeStatusData) statusRecord.getDetails(); EquipmentUpgradeStatusData fwUpgradeStatusData = (EquipmentUpgradeStatusData) statusRecord.getDetails();
fwUpgradeStatusData.setActiveSwVersion(firmwareVersion);
fwUpgradeStatusData.setAlternateSwVersion(inactiveFirmwareImageAp);
// default track settings for firmware // default track settings for firmware
CustomerFirmwareTrackSettings trackSettings = firmwareServiceInterface.getDefaultCustomerTrackSetting(); CustomerFirmwareTrackSettings trackSettings = firmwareServiceInterface.getDefaultCustomerTrackSetting();
// check for updated/modified track settings for this customer // check for updated/modified track settings for this customer
CustomerFirmwareTrackRecord custFwTrackRecord = firmwareServiceInterface.getCustomerFirmwareTrackRecord(ce.getCustomerId()); CustomerFirmwareTrackRecord custFwTrackRecord = firmwareServiceInterface.getCustomerFirmwareTrackRecord(ce.getCustomerId());
if (custFwTrackRecord != null)
long trackRecordId = -1;
if (custFwTrackRecord != null) {
trackSettings = custFwTrackRecord.getSettings(); trackSettings = custFwTrackRecord.getSettings();
trackRecordId = custFwTrackRecord.getTrackRecordId();
}
// determine if AP requires FW upgrade before cloud // determine if AP requires FW upgrade before cloud
// connection/provision // connection/provision
if (trackSettings.getAutoUpgradeDeprecatedOnBind().equals(TrackFlag.ALWAYS) || trackSettings.getAutoUpgradeUnknownOnBind().equals(TrackFlag.ALWAYS)) { if (trackSettings.getAutoUpgradeDeprecatedOnBind().equals(TrackFlag.ALWAYS) || trackSettings.getAutoUpgradeUnknownOnBind().equals(TrackFlag.ALWAYS)) {
LOG.debug("reconcileFwVersionToTrack for AP {} track flag for auto-upgrade {}", ce.getInventoryId(), LOG.debug("reconcileFwVersionToTrack for AP {} track flag for auto-upgrade {}", ce.getInventoryId(),
trackSettings.getAutoUpgradeDeprecatedOnBind()); trackSettings.getAutoUpgradeDeprecatedOnBind());
// check the reported fw version for the AP, if it is < than // check the reported fw version for the AP, if it is < than
// the default version for the cloud, then download and // the default version for the cloud, then download and
// flash the firmware before proceeding. // flash the firmware before proceeding.
// then return; // then return;
FirmwareTrackRecord fwTrackRecord = null; FirmwareTrackRecord fwTrackRecord = null;
if (trackRecordId == -1) { if (custFwTrackRecord == null) {
// take the default // take the default
fwTrackRecord = firmwareServiceInterface.getFirmwareTrackByName(FirmwareTrackRecord.DEFAULT_TRACK_NAME); fwTrackRecord = firmwareServiceInterface.getFirmwareTrackByName(FirmwareTrackRecord.DEFAULT_TRACK_NAME);
} else { } else {
// there must be a customer one // there must be a customer one
fwTrackRecord = firmwareServiceInterface.getFirmwareTrackById(trackRecordId); fwTrackRecord = firmwareServiceInterface.getFirmwareTrackById(custFwTrackRecord.getTrackRecordId());
} }
if (fwTrackRecord != null) { if (fwTrackRecord != null) {
LOG.debug("reconcileFwVersionToTrack for AP {} firmwareTrackRecord {}", ce.getInventoryId(), fwTrackRecord); LOG.debug("reconcileFwVersionToTrack for AP {} firmwareTrackRecord {}", ce.getInventoryId(), fwTrackRecord);
Optional<FirmwareTrackAssignmentDetails> assignmentDetails = firmwareServiceInterface.getFirmwareTrackAssignments(fwTrackRecord.getTrackName())
List<FirmwareTrackAssignmentDetails> fwTrackAssignmentDetails = .stream().filter(new Predicate<FirmwareTrackAssignmentDetails>() {
firmwareServiceInterface.getFirmwareTrackAssignments(fwTrackRecord.getTrackName()); @Override
public boolean test(FirmwareTrackAssignmentDetails t) {
String targetFwVersionNameForTrack = null; // AP may report type as UPPER case
return model.equalsIgnoreCase(t.getModelId());
if (fwTrackAssignmentDetails != null) { }
for (FirmwareTrackAssignmentDetails details : fwTrackAssignmentDetails) { }).findFirst();
if (model.equalsIgnoreCase(details.getModelId())) { if (assignmentDetails.isPresent()) {
targetFwVersionNameForTrack = details.getVersionName(); FirmwareTrackAssignmentDetails targetFirmwareForTrack = assignmentDetails.get();
break; if (activeFwReleaseDate == null) {
} LOG.info("Active FW release date is unknown, firmware upgrade required.");
} fwUpgradeStatusData.setTargetSwVersion(targetFirmwareForTrack.getVersionName());
} fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.out_of_date);
statusRecord.setDetails(fwUpgradeStatusData);
if (targetFwVersionNameForTrack == null) { statusRecord = statusServiceInterface.update(statusRecord);
LOG.info("No target FW version for this track {}", fwTrackRecord); triggerFwDownload(ce, fwUpgradeStatusData, trackSettings);
} else {
} else { Date activeReleaseDate = new Date(activeFwReleaseDate);
LOG.debug("reconcileFwVersionToTrack for AP {} targetFwVersion for track {}", ce.getInventoryId(), targetFwVersionNameForTrack); Date targetReleaseDate = new Date(targetFirmwareForTrack.getReleaseDate());
if (activeReleaseDate.after(targetReleaseDate) || activeReleaseDate.equals(targetReleaseDate)) {
if (reportedFwVersionFromAp != null) { LOG.info("Active FW release date {} is more recent than or equal to the target firmware release date {}, no upgrade required.",
if (!targetFwVersionNameForTrack.equals(reportedFwVersionFromAp)) { activeReleaseDate, targetReleaseDate);
LOG.debug( fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.up_to_date);
"reconcileFwVersionToTrack for AP {} targetFwVersion {} doesn't match reported fw version {}, triggering download and flash", fwUpgradeStatusData.setTargetSwVersion(targetFirmwareForTrack.getVersionName());
ce.getInventoryId(), targetFwVersionNameForTrack, reportedFwVersionFromAp); statusRecord.setDetails(fwUpgradeStatusData);
statusRecord = statusServiceInterface.update(statusRecord);
fwUpgradeStatusData.setTargetSwVersion(targetFwVersionNameForTrack); } else {
LOG.info("Active FW release date {} is earlier than target firmware release date {}, firmware upgrade required.", activeReleaseDate,
targetReleaseDate);
fwUpgradeStatusData.setTargetSwVersion(targetFirmwareForTrack.getVersionName());
fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.out_of_date); fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.out_of_date);
statusRecord.setDetails(fwUpgradeStatusData); statusRecord.setDetails(fwUpgradeStatusData);
statusRecord = statusServiceInterface.update(statusRecord); statusRecord = statusServiceInterface.update(statusRecord);
triggerFwDownload(ce, fwUpgradeStatusData, trackSettings); triggerFwDownload(ce, fwUpgradeStatusData, trackSettings);
} else if (targetFwVersionNameForTrack.equals(reportedFwVersionFromAp)) {
LOG.debug("reconcileFwVersionToTrack for AP {} targetFwVersion {} is active", ce.getInventoryId(), targetFwVersionNameForTrack);
fwUpgradeStatusData.setUpgradeState(EquipmentUpgradeState.up_to_date);
fwUpgradeStatusData.setActiveSwVersion(targetFwVersionNameForTrack);
fwUpgradeStatusData.setAlternateSwVersion(targetFwVersionNameForTrack);
fwUpgradeStatusData.setTargetSwVersion(targetFwVersionNameForTrack);
statusRecord.setDetails(fwUpgradeStatusData);
statusRecord = statusServiceInterface.update(statusRecord);
} }
} }
} else {
LOG.info("No firmware assignment present in track for AP model {}. Auto-upgrade of firmware is not possible for this node.", model);
} }
} }
} else {
} else LOG.info("Automatic firmware upgrade is not configured for track {}", trackSettings);
{
LOG.debug("Automatic firmware upgrade is not configured for track {}", trackSettings);
} }
} }
@@ -888,20 +911,20 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
private void updateApDisconnectedStatus(String apId, Equipment ce) { private void updateApDisconnectedStatus(String apId, Equipment ce) {
LOG.info("updateApDisconnectedStatus disconnected AP {}", apId); LOG.info("updateApDisconnectedStatus disconnected AP {}", apId);
try { try {
Alarm disconnectedAlarm = new Alarm(); Alarm disconnectedAlarm = new Alarm();
disconnectedAlarm.setCustomerId(ce.getCustomerId()); disconnectedAlarm.setCustomerId(ce.getCustomerId());
disconnectedAlarm.setEquipmentId(ce.getId()); disconnectedAlarm.setEquipmentId(ce.getId());
disconnectedAlarm.setAlarmCode(AlarmCode.Disconnected); disconnectedAlarm.setAlarmCode(AlarmCode.Disconnected);
AlarmDetails alarmDetails = new AlarmDetails(); AlarmDetails alarmDetails = new AlarmDetails();
alarmDetails.setMessage(AlarmCode.Disconnected.getDescription()); alarmDetails.setMessage(AlarmCode.Disconnected.getDescription());
alarmDetails.setAffectedEquipmentIds(List.of(ce.getId())); alarmDetails.setAffectedEquipmentIds(List.of(ce.getId()));
alarmDetails.setGeneratedBy(apId); alarmDetails.setGeneratedBy(apId);
disconnectedAlarm.setDetails(alarmDetails); disconnectedAlarm.setDetails(alarmDetails);
alarmServiceInterface.create(disconnectedAlarm); alarmServiceInterface.create(disconnectedAlarm);
Status statusRecord = new Status(); Status statusRecord = new Status();
statusRecord.setCustomerId(ce.getCustomerId()); statusRecord.setCustomerId(ce.getCustomerId());
statusRecord.setEquipmentId(ce.getId()); statusRecord.setEquipmentId(ce.getId());
@@ -966,11 +989,11 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (ovsdbSession == null) { if (ovsdbSession == null) {
throw new IllegalStateException("AP is not connected " + apId); throw new IllegalStateException("AP is not connected " + apId);
} }
int customerId = ovsdbSession.getCustomerId();
Equipment equipmentConfig = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment equipmentConfig = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (equipmentConfig == null) { if (equipmentConfig == null) {
throw new IllegalStateException("Cannot retrieve configuration for " + apId); throw new IllegalStateException("Cannot retrieve configuration for " + apId);
} }
int customerId = equipmentConfig.getCustomerId();
ret = new OpensyncAPConfig(); ret = new OpensyncAPConfig();
@@ -1059,21 +1082,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return ret; return ret;
} }
@Override
public void processMqttMessage(String topic, Report report) {
mqttMessageProcessor.processMqttMessage(topic, report);
}
@Override
public void processMqttMessage(String topic, FlowReport flowReport) {
mqttMessageProcessor.processMqttMessage(topic, flowReport);
}
@Override
public void processMqttMessage(String topic, WCStatsReport wcStatsReport) {
mqttMessageProcessor.processMqttMessage(topic, wcStatsReport);
}
@Override @Override
public void wifiVIFStateDbTableUpdate(List<OpensyncAPVIFState> vifStateTables, String apId) { public void wifiVIFStateDbTableUpdate(List<OpensyncAPVIFState> vifStateTables, String apId) {
LOG.debug("Received Wifi_VIF_State table update for AP {}", apId); LOG.debug("Received Wifi_VIF_State table update for AP {}", apId);
@@ -1085,20 +1093,22 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiVIFStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment apNode = equipmentServiceInterface.getOrNull(equipmentId); Equipment apNode = equipmentServiceInterface.getOrNull(equipmentId);
if (apNode == null) { if (apNode == null) {
LOG.debug("wifiVIFStateDbTableUpdate::Cannot get EquipmentId for AP {}", apId); LOG.debug("wifiVIFStateDbTableUpdate::Cannot get EquipmentId for AP {}", apId);
return; // we don't have the required info to get the return; // we don't have the required info to get the
// radio type yet // radio type yet
} }
int customerId = apNode.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiVIFStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
ApElementConfiguration apElementConfig = (ApElementConfiguration) apNode.getDetails(); ApElementConfiguration apElementConfig = (ApElementConfiguration) apNode.getDetails();
ProfileContainer profileContainer = new ProfileContainer(profileServiceInterface.getProfileWithChildren(apNode.getProfileId())); ProfileContainer profileContainer = new ProfileContainer(profileServiceInterface.getProfileWithChildren(apNode.getProfileId()));
@@ -1222,20 +1232,19 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiRadioStatusDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) { if (ce == null) {
LOG.debug("wifiRadioStatusDbTableUpdate::Cannot get Equipment for AP {}", apId); LOG.debug("wifiRadioStatusDbTableUpdate::Cannot get Equipment for AP {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiRadioStatusDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
ApElementConfiguration apElementConfiguration = ((ApElementConfiguration) ce.getDetails()); ApElementConfiguration apElementConfiguration = ((ApElementConfiguration) ce.getDetails());
boolean configStateMismatch = false; boolean configStateMismatch = false;
@@ -1309,6 +1318,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.debug("Protocol Status reportedCC {} radioStatus.getCountry {} radioStatus CountryCode fromName {}", protocolStatusData.getReportedCC(), LOG.debug("Protocol Status reportedCC {} radioStatus.getCountry {} radioStatus CountryCode fromName {}", protocolStatusData.getReportedCC(),
radioState.getCountry(), CountryCode.getByName((radioState.getCountry()))); radioState.getCountry(), CountryCode.getByName((radioState.getCountry())));
protocolStatusData.setReportedCC(CountryCode.getByName((radioState.getCountry()))); protocolStatusData.setReportedCC(CountryCode.getByName((radioState.getCountry())));
protocolStatusData.setCountryCode(radioState.getCountry());
protocolStatus.setDetails(protocolStatusData); protocolStatus.setDetails(protocolStatusData);
} else { } else {
@@ -1329,6 +1339,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
channelStatus.setDetails(channelStatusData); channelStatus.setDetails(channelStatusData);
} }
((EquipmentChannelStatusData) channelStatus.getDetails()).getChannelNumberStatusDataMap().put(radioState.getFreqBand(), radioState.getChannel()); ((EquipmentChannelStatusData) channelStatus.getDetails()).getChannelNumberStatusDataMap().put(radioState.getFreqBand(), radioState.getChannel());
((EquipmentChannelStatusData) channelStatus.getDetails()).getTxPowerDataMap().put(radioState.getFreqBand(), radioState.getTxPower());
return channelStatus; return channelStatus;
} }
@@ -1446,20 +1457,17 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiInetStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId); Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) { if (ce == null) {
LOG.debug("wifiInetStateDbTableUpdate Cannot get customer Equipment for {}", apId); LOG.debug("wifiInetStateDbTableUpdate Cannot get customer Equipment for {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiInetStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Status lanStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.LANINFO); Status lanStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.LANINFO);
if (lanStatus == null) { if (lanStatus == null) {
@@ -1575,21 +1583,17 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.debug("wifiAssociatedClientsDbTableUpdate::Cannot get Session for AP {}", apId); LOG.debug("wifiAssociatedClientsDbTableUpdate::Cannot get Session for AP {}", apId);
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiAssociatedClientsDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId); Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) { if (ce == null) {
LOG.debug("wifiAssociatedClientsDbTableUpdate Cannot get customer Equipment for {}", apId); LOG.debug("wifiAssociatedClientsDbTableUpdate Cannot get customer Equipment for {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiAssociatedClientsDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
if ((wifiAssociatedClients == null) || wifiAssociatedClients.isEmpty()) { if ((wifiAssociatedClients == null) || wifiAssociatedClients.isEmpty()) {
return; return;
@@ -1607,17 +1611,13 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
MacAddress macAddress = MacAddress.valueOf(mMac); MacAddress macAddress = MacAddress.valueOf(mMac);
Client clientInstance = clientServiceInterface.getOrNull(customerId, macAddress); Client clientInstance = clientServiceInterface.getOrNull(customerId, macAddress);
boolean isReassociation = true;
if (clientInstance == null) { if (clientInstance == null) {
isReassociation = false; // new client
clientInstance = new Client(); clientInstance = new Client();
clientInstance.setCustomerId(customerId); clientInstance.setCustomerId(customerId);
clientInstance.setMacAddress(MacAddress.valueOf(mMac)); clientInstance.setMacAddress(MacAddress.valueOf(mMac));
clientInstance.setCreatedTimestamp(System.currentTimeMillis());
clientInstance.setDetails(new ClientInfoDetails()); clientInstance.setDetails(new ClientInfoDetails());
clientInstance = clientServiceInterface.create(clientInstance); clientInstance = clientServiceInterface.create(clientInstance);
LOG.info("Created client from Wifi_Associated_Clients ovsdb table change {}", clientInstance); LOG.info("Created client from Wifi_Associated_Clients ovsdb table change {}", clientInstance);
} }
@@ -1629,30 +1629,20 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
clientSession.setMacAddress(clientInstance.getMacAddress()); clientSession.setMacAddress(clientInstance.getMacAddress());
clientSession.setLocationId(ce.getLocationId()); clientSession.setLocationId(ce.getLocationId());
clientSession.setDetails(new ClientSessionDetails()); clientSession.setDetails(new ClientSessionDetails());
clientSession.getDetails().setSessionId(clientInstance.getMacAddress().getAddressAsLong()); long derivedSessionId = WiFiSessionUtility.encodeWiFiAssociationId(timestamp / 1000, clientInstance.getMacAddress().getAddressAsLong());
clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(clientInstance.getMacAddress().getAddressAsLong())); clientSession.getDetails().setSessionId(Long.toUnsignedString(derivedSessionId));
clientSession.getDetails().setMetricDetails(new ClientSessionMetricDetails()); clientSession.getDetails().setDhcpDetails(new ClientDhcpDetails(Long.toUnsignedString(derivedSessionId)));
clientSession.getDetails().setAssociationState(AssociationState._802_11_Associated); clientSession.getDetails().setAssociationState(AssociationState._802_11_Associated);
clientSession.getDetails().setIsReassociation(false);
clientSession.getDetails().setAssocTimestamp(timestamp); clientSession.getDetails().setAssocTimestamp(timestamp);
clientSessions.add(clientSession);
} else { } else {
if (clientSession.getDetails().getPriorEquipmentId() == null) {
clientSession.getDetails().setPriorEquipmentId(clientSession.getEquipmentId());
}
if (clientSession.getDetails().getPriorSessionId() == null) {
clientSession.getDetails().setPriorSessionId(clientSession.getDetails().getSessionId());
}
if (clientSession.getDetails().getLastEventTimestamp() == null || clientSession.getDetails().getLastEventTimestamp() < timestamp) {
clientSession.getDetails().setLastEventTimestamp(timestamp);
}
if (!clientSession.getDetails().getAssociationState().equals(AssociationState._802_11_Associated)) { if (!clientSession.getDetails().getAssociationState().equals(AssociationState._802_11_Associated)) {
clientSession.getDetails().setAssociationState(AssociationState._802_11_Associated); clientSession.getDetails().setAssociationState(AssociationState._802_11_Associated);
clientSession.getDetails().setAssocTimestamp(timestamp); clientSession.getDetails().setAssocTimestamp(timestamp);
clientSessions.add(clientSession);
} }
} }
clientSession.getDetails().setIsReassociation(isReassociation);
clientSessions.add(clientSession);
} }
if (clientSessions.size() > 0) { if (clientSessions.size() > 0) {
@@ -1672,19 +1662,17 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.info("awlanNodeDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) { if (ce == null) {
LOG.info("awlanNodeDbTableUpdate::Cannot find AP {}", apId); LOG.info("awlanNodeDbTableUpdate::Cannot find AP {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.info("awlanNodeDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
int upgradeStatusFromAp = node.getUpgradeStatus(); int upgradeStatusFromAp = node.getUpgradeStatus();
EquipmentUpgradeState fwUpgradeState = null; EquipmentUpgradeState fwUpgradeState = null;
@@ -1899,32 +1887,29 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.info("wifiVIFStateDbTableDelete for AP {} rows {}", apId, vifStateTables); LOG.info("wifiVIFStateDbTableDelete for AP {} rows {}", apId, vifStateTables);
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
if (ovsdbSession == null) { if (ovsdbSession == null) {
LOG.debug("wifiVIFStateDbTableDelete::Cannot get Session for AP {}", apId); LOG.debug("wifiVIFStateDbTableDelete::Cannot get Session for AP {}", apId);
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("wifiVIFStateDbTableDelete Cannot get customer Equipment for {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiVIFStateDbTableDelete::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("wifiVIFStateDbTableDelete::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
Status activeBssidsStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.ACTIVE_BSSIDS); Status activeBssidsStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.ACTIVE_BSSIDS);
if (activeBssidsStatus == null) { if (activeBssidsStatus == null) {
return; // nothing to delete return; // nothing to delete
} }
ActiveBSSIDs statusDetails = (ActiveBSSIDs) activeBssidsStatus.getDetails(); ActiveBSSIDs statusDetails = (ActiveBSSIDs) activeBssidsStatus.getDetails();
List<ActiveBSSID> bssidList = statusDetails.getActiveBSSIDs(); List<ActiveBSSID> bssidList = statusDetails.getActiveBSSIDs();
List<ActiveBSSID> toBeDeleted = new ArrayList<>(); List<ActiveBSSID> toBeDeleted = new ArrayList<>();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
List<ClientSession> clientSessionsForCustomerAndEquipment = new ArrayList<>(); List<ClientSession> clientSessionsForCustomerAndEquipment = new ArrayList<>();
if (ce != null) { if (ce != null) {
PaginationResponse<ClientSession> clientSessions = clientServiceInterface.getSessionsForCustomer(customerId, ImmutableSet.of(equipmentId), PaginationResponse<ClientSession> clientSessions = clientServiceInterface.getSessionsForCustomer(customerId, ImmutableSet.of(equipmentId),
@@ -1967,15 +1952,17 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
LOG.debug("wifiAssociatedClientsDbTableDelete::Cannot get Session for AP {}", apId); LOG.debug("wifiAssociatedClientsDbTableDelete::Cannot get Session for AP {}", apId);
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) {
LOG.debug("wifiAssociatedClientsDbTableDelete Cannot get customer Equipment for {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) { if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("wifiAssociatedClientsDbTableDelete::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId); LOG.debug("wifiAssociatedClientsDbTableDelete::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return; return;
} }
Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(deletedClientMac)); Client client = clientServiceInterface.getOrNull(customerId, MacAddress.valueOf(deletedClientMac));
ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(deletedClientMac)); ClientSession clientSession = clientServiceInterface.getSessionOrNull(customerId, equipmentId, MacAddress.valueOf(deletedClientMac));
@@ -2009,20 +1996,17 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("updateDhcpIpClientFingerprints::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) { if (ce == null) {
LOG.debug("updateDhcpIpClientFingerprints::Cannot get Equipment for AP {}", apId); LOG.debug("updateDhcpIpClientFingerprints::Cannot get Equipment for AP {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("updateDhcpIpClientFingerprints::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
long locationId = ce.getLocationId(); long locationId = ce.getLocationId();
@@ -2111,15 +2095,6 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (clientServiceInterface.getOrNull(customerId, clientMacAddress) != null) { if (clientServiceInterface.getOrNull(customerId, clientMacAddress) != null) {
LOG.info("Deleting invalid client {}", clientServiceInterface.delete(customerId, clientMacAddress)); LOG.info("Deleting invalid client {}", clientServiceInterface.delete(customerId, clientMacAddress));
} }
} else {
LOG.info("Client {} already exists on the cloud, delete the session for the client if it exists", dhcpLeasedIps);
// In this case, we might have a session, as the client
// already exists on the cloud, update if required
ClientSession session = clientServiceInterface.getSessionOrNull(customerId, equipmentId, clientMacAddress);
if (session != null) {
LOG.info("Delete clientSession that was removed from the Dhcp_Leased_IP table {}",
clientServiceInterface.deleteSession(customerId, equipmentId, clientMacAddress));
}
} }
} }
} }
@@ -2134,21 +2109,8 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (session == null) { if (session == null) {
LOG.info("No session for client {} with for customer {} equipment {}", clientMacAddress, customerId, equipmentId); LOG.info("No session for client {} with for customer {} equipment {}", clientMacAddress, customerId, equipmentId);
return null; return null;
} else {
if (session.getDetails().getPriorEquipmentId() == null) {
session.getDetails().setPriorEquipmentId(session.getEquipmentId());
}
if (session.getDetails().getPriorSessionId() == null) {
session.getDetails().setPriorSessionId(session.getDetails().getSessionId());
}
if (session.getDetails().getLastEventTimestamp() == null || session.getDetails().getLastEventTimestamp() < timestamp) {
session.getDetails().setLastEventTimestamp(timestamp);
}
if (!session.getDetails().getAssociationState().equals(AssociationState._802_11_Associated)) {
session.getDetails().setAssociationState(AssociationState._802_11_Associated);
session.getDetails().setAssocTimestamp(timestamp);
}
} }
if (dhcpLeasedIps.containsKey("fingerprint")) { if (dhcpLeasedIps.containsKey("fingerprint")) {
session.getDetails().setApFingerprint(dhcpLeasedIps.get("fingerprint")); session.getDetails().setApFingerprint(dhcpLeasedIps.get("fingerprint"));
} }
@@ -2203,6 +2165,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
if (dhcpLeasedIps.containsKey("lease_time")) { if (dhcpLeasedIps.containsKey("lease_time")) {
Integer leaseTime = Integer.valueOf(dhcpLeasedIps.get("lease_time")); Integer leaseTime = Integer.valueOf(dhcpLeasedIps.get("lease_time"));
session.getDetails().getDhcpDetails().setLeaseTimeInSeconds(leaseTime); session.getDetails().getDhcpDetails().setLeaseTimeInSeconds(leaseTime);
session.getDetails().getDhcpDetails().setLeaseStartTimestamp(session.getDetails().getAssocTimestamp());
} }
if (dhcpLeasedIps.containsKey("gateway")) { if (dhcpLeasedIps.containsKey("gateway")) {
@@ -2316,20 +2279,17 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("clearEquipmentStatus::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getOrNull(equipmentId); Equipment ce = equipmentServiceInterface.getOrNull(equipmentId);
if (ce == null) { if (ce == null) {
LOG.debug("clearEquipmentStatus Cannot get customer Equipment for {}", apId); LOG.debug("clearEquipmentStatus Cannot get customer Equipment for {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.debug("clearEquipmentStatus::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
List<Status> statusList = new ArrayList<>(); List<Status> statusList = new ArrayList<>();
@@ -2396,22 +2356,26 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
@Override @Override
public void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId, RowUpdateOperation rowUpdateOperation) { public void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId, RowUpdateOperation rowUpdateOperation) {
LOG.info("apcStateDbTableUpdate {} operations on AP {} with values {} ", rowUpdateOperation, apId, apcStateAttributes); LOG.info("apcStateDbTableUpdate {} operations on AP {} with values {} ", rowUpdateOperation, apId, apcStateAttributes);
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
if (ovsdbSession == null) { if (ovsdbSession == null) {
LOG.info("apcStateDbTableUpdate::Cannot get Session for AP {}", apId); LOG.info("apcStateDbTableUpdate::Cannot get Session for AP {}", apId);
return; return;
} }
int customerId = ovsdbSession.getCustomerId();
long equipmentId = ovsdbSession.getEquipmentId(); long equipmentId = ovsdbSession.getEquipmentId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.info("apcStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId); Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) { if (ce == null) {
LOG.info("apcStateDbTableUpdate::Cannot get Equipment for AP {}", apId); LOG.info("apcStateDbTableUpdate::Cannot get Equipment for AP {}", apId);
return; return;
} }
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.info("apcStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
InetAddress drIpAddr = null; InetAddress drIpAddr = null;
InetAddress bdrIpAddr = null; InetAddress bdrIpAddr = null;
try { try {
@@ -2444,6 +2408,66 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
ApcElectionEvent electionEvent = ApcElectionEvent electionEvent =
new ApcElectionEvent(drIpAddr, bdrIpAddr, localIpV4Addr, drIpAddr, mode, Boolean.valueOf(apcStateAttributes.get("enabled")), new ApcElectionEvent(drIpAddr, bdrIpAddr, localIpV4Addr, drIpAddr, mode, Boolean.valueOf(apcStateAttributes.get("enabled")),
RealTimeEventType.APC_Election_event, customerId, ce.getLocationId(), equipmentId, System.currentTimeMillis()); RealTimeEventType.APC_Election_event, customerId, ce.getLocationId(), equipmentId, System.currentTimeMillis());
mqttMessageProcessor.publishSystemEventFromTableStateMonitor(electionEvent); statsPublisherInterface.publishSystemEventFromTableStateMonitor(electionEvent);
}
@Override
public void nodeStateDbTableUpdate(List<Map<String, String>> nodeStateAttributes, String apId) {
LOG.debug("start nodeStateDbTableUpdate for {}", apId);
if (LOG.isTraceEnabled())
LOG.trace("nodeStateDbTableUpdate tableAttributes {}", nodeStateAttributes);
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
if (ovsdbSession == null) {
LOG.warn("nodeStateDbTableUpdate::Cannot get Session for AP {}", apId);
return;
}
long equipmentId = ovsdbSession.getEquipmentId();
Equipment ce = equipmentServiceInterface.getByInventoryIdOrNull(apId);
if (ce == null) {
LOG.warn("nodeStateDbTableUpdate::Cannot get Equipment for AP {}", apId);
return;
}
int customerId = ce.getCustomerId();
if ((customerId < 0) || (equipmentId < 0)) {
LOG.warn("nodeStateDbTableUpdate::Cannot get valid CustomerId {} or EquipmentId {} for AP {}", customerId, equipmentId, apId);
return;
}
Status eqAdminStatus = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.EQUIPMENT_ADMIN);
LedStatus ledStatus = null;
for (Map<String, String> nsa : nodeStateAttributes) {
if (nsa.get("module").equals("led")) {
if (nsa.get("key").equals("led_blink") && nsa.get("value").equals("on")) {
ledStatus = LedStatus.led_blink;
} else if (nsa.get("key").equals("led_off") && nsa.get("value").equals("off")) {
ledStatus = LedStatus.led_off;
} else {
ledStatus = LedStatus.UNKNOWN;
}
}
}
if (ledStatus != null) {
if (eqAdminStatus != null) {
if (((EquipmentAdminStatusData) eqAdminStatus.getDetails()).getLedStatus() == null
|| !((EquipmentAdminStatusData) eqAdminStatus.getDetails()).getLedStatus().equals(ledStatus)) {
((EquipmentAdminStatusData) eqAdminStatus.getDetails()).setLedStatus(ledStatus);
eqAdminStatus = statusServiceInterface.update(eqAdminStatus);
LOG.debug("nodeStateDbTableUpdate updated status {}", eqAdminStatus);
}
}
}
LOG.debug("finished nodeStateDbTableUpdate for {}", apId);
}
@Override
public void processMqttMessage(String topic, Report report) {
statsPublisherInterface.processMqttMessage(topic, report);
} }
} }

View File

@@ -25,6 +25,7 @@ import org.springframework.security.web.bind.annotation.AuthenticationPrincipal;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import com.telecominfraproject.wlan.core.client.PingClient; import com.telecominfraproject.wlan.core.client.PingClient;
@@ -50,6 +51,7 @@ import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRebootRequest;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRouteCheck; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWRouteCheck;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWStartDebugEngine; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWStartDebugEngine;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGWStopDebugEngine; import com.telecominfraproject.wlan.equipmentgateway.models.CEGWStopDebugEngine;
import com.telecominfraproject.wlan.equipmentgateway.models.CEGatewayCommand;
import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommand; import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommand;
import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommandResponse; import com.telecominfraproject.wlan.equipmentgateway.models.EquipmentCommandResponse;
import com.telecominfraproject.wlan.equipmentgateway.models.GatewayDefaults; import com.telecominfraproject.wlan.equipmentgateway.models.GatewayDefaults;
@@ -207,6 +209,9 @@ public class OpensyncCloudGatewayController {
case CellSizeAttributesRequest: case CellSizeAttributesRequest:
ret.add(sendCellSizeRequest(session, (CEGWCellSizeAttributesRequest) command)); ret.add(sendCellSizeRequest(session, (CEGWCellSizeAttributesRequest) command));
break; break;
// case MostRecentStatsTimestamp:
// ret.add(sendGetMostRecentStatsTimestampRequest(command, inventoryId));
// break;
default: default:
LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command); LOG.warn("[{}] Failed to deliver command {}, unsupported command type", inventoryId, command);
ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand, ret.add(new EquipmentCommandResponse(CEGWCommandResultCode.UnsupportedCommand,
@@ -217,6 +222,8 @@ public class OpensyncCloudGatewayController {
} }
}); });
return ret; return ret;
@@ -242,6 +249,8 @@ public class OpensyncCloudGatewayController {
public GatewayDefaults retrieveGatewayDefaults() { public GatewayDefaults retrieveGatewayDefaults() {
return new GatewayDefaults(); return new GatewayDefaults();
} }
/** /**
* Verify a route to customer equipment * Verify a route to customer equipment
@@ -254,7 +263,7 @@ public class OpensyncCloudGatewayController {
if (null != command.getRoutingId()) { if (null != command.getRoutingId()) {
if (!command.getRoutingId().equals(session.getRoutingId())) { if (!command.getRoutingId().equals(session.getRoutingId())) {
LOG.info("[C:{} E:{} R:{}] Stale routing entry ({}) detected", session.getCustomerId(), command.getInventoryId(), session.getRoutingId(), LOG.info("[E:{} R:{}] Stale routing entry ({}) detected", command.getInventoryId(), session.getRoutingId(),
command.getRoutingId()); command.getRoutingId());
return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer", command, return new EquipmentCommandResponse(CEGWCommandResultCode.NoRouteToCE, "Inactive Route Identifer", command,

View File

@@ -8,6 +8,7 @@ import java.util.List;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.client.models.events.realtime.ClientConnectSuccessEvent; import com.telecominfraproject.wlan.client.models.events.realtime.ClientConnectSuccessEvent;
@@ -84,12 +85,13 @@ public class RealtimeEventPublisher {
@Autowired @Autowired
private EquipmentServiceInterface equipmentServiceInterface; private EquipmentServiceInterface equipmentServiceInterface;
@Autowired @Autowired
private ProfileServiceInterface profileServiceInterface; private ProfileServiceInterface profileServiceInterface;
private static final Logger LOG = LoggerFactory.getLogger(RealtimeEventPublisher.class); private static final Logger LOG = LoggerFactory.getLogger(RealtimeEventPublisher.class);
@Async
void publishChannelHopEvents(int customerId, long equipmentId, long locationId, EventReport e) { void publishChannelHopEvents(int customerId, long equipmentId, long locationId, EventReport e) {
LOG.info("publishChannelHopEvents for customerId {} equipmentId {}"); LOG.info("publishChannelHopEvents for customerId {} equipmentId {}");
@@ -178,6 +180,7 @@ public class RealtimeEventPublisher {
} }
} }
@Async
void publishClientConnectSuccessEvent(int customerId, long equipmentId, long locationId, ClientConnectEvent clientConnectEvent) { void publishClientConnectSuccessEvent(int customerId, long equipmentId, long locationId, ClientConnectEvent clientConnectEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientConnectEvent, customerId, LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientConnectEvent, customerId,
@@ -187,7 +190,7 @@ public class RealtimeEventPublisher {
clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility
.getRadioTypeFromOpensyncStatsRadioBandType(clientConnectEvent.getBand())); .getRadioTypeFromOpensyncStatsRadioBandType(clientConnectEvent.getBand()));
clientEvent.setSsid(clientConnectEvent.getSsid()); clientEvent.setSsid(clientConnectEvent.getSsid());
clientEvent.setSessionId(clientConnectEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientConnectEvent.getSessionId()));
if (clientConnectEvent.hasFbtUsed()) { if (clientConnectEvent.hasFbtUsed()) {
clientEvent.setFbtUsed(clientConnectEvent.getFbtUsed()); clientEvent.setFbtUsed(clientConnectEvent.getFbtUsed());
@@ -262,11 +265,11 @@ public class RealtimeEventPublisher {
clientEvent.setEquipmentId(equipmentId); clientEvent.setEquipmentId(equipmentId);
clientEvent.setLocationId(locationId); clientEvent.setLocationId(locationId);
LOG.info("publishing client event {} to cloud", clientEvent); LOG.info("Publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
@Async
void publishClientDisconnectEvent(int customerId, long equipmentId, long locationId, ClientDisconnectEvent clientDisconnectEvent) { void publishClientDisconnectEvent(int customerId, long equipmentId, long locationId, ClientDisconnectEvent clientDisconnectEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientDisconnectEvent, customerId, LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientDisconnectEvent, customerId,
@@ -275,7 +278,7 @@ public class RealtimeEventPublisher {
com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientDisconnectEvent(
clientDisconnectEvent.getTimestampMs()); clientDisconnectEvent.getTimestampMs());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientDisconnectEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientDisconnectEvent.getStaMac()));
clientEvent.setSessionId(clientDisconnectEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientDisconnectEvent.getSessionId()));
clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility
.getRadioTypeFromOpensyncStatsRadioBandType(clientDisconnectEvent.getBand())); .getRadioTypeFromOpensyncStatsRadioBandType(clientDisconnectEvent.getBand()));
clientEvent.setSsid(clientDisconnectEvent.getSsid()); clientEvent.setSsid(clientDisconnectEvent.getSsid());
@@ -316,13 +319,14 @@ public class RealtimeEventPublisher {
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
@Async
void publishClientAuthSystemEvent(int customerId, long equipmentId, long locationId, ClientAuthEvent clientAuthEvent) { void publishClientAuthSystemEvent(int customerId, long equipmentId, long locationId, ClientAuthEvent clientAuthEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientAuthEvent, customerId, equipmentId); LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientAuthEvent, customerId, equipmentId);
com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientAuthEvent(
clientAuthEvent.getTimestampMs()); clientAuthEvent.getTimestampMs());
clientEvent.setSessionId(clientAuthEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientAuthEvent.getSessionId()));
clientEvent.setSsid(clientAuthEvent.getSsid()); clientEvent.setSsid(clientAuthEvent.getSsid());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientAuthEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientAuthEvent.getStaMac()));
clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility
@@ -340,14 +344,15 @@ public class RealtimeEventPublisher {
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
@Async
void publishClientAssocEvent(int customerId, long equipmentId, long locationId, ClientAssocEvent clientAssocEvent) { void publishClientAssocEvent(int customerId, long equipmentId, long locationId, ClientAssocEvent clientAssocEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientAssocEvent, customerId, equipmentId); LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientAssocEvent, customerId, equipmentId);
com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientAssocEvent(
clientAssocEvent.getTimestampMs()); clientAssocEvent.getTimestampMs());
clientEvent.setSessionId(clientAssocEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientAssocEvent.getSessionId()));
clientEvent.setSsid(clientAssocEvent.getSsid()); clientEvent.setSsid(clientAssocEvent.getSsid());
clientEvent.setClientMacAddress(MacAddress.valueOf(clientAssocEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientAssocEvent.getStaMac()));
clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility clientEvent.setRadioType(OvsdbToWlanCloudTypeMappingUtility
@@ -380,7 +385,7 @@ public class RealtimeEventPublisher {
if (clientAssocEvent.hasUsing11V()) { if (clientAssocEvent.hasUsing11V()) {
clientEvent.setUsing11v(clientAssocEvent.getUsing11V()); clientEvent.setUsing11v(clientAssocEvent.getUsing11V());
} }
clientEvent.setEventTimestamp(clientAssocEvent.getTimestampMs()); clientEvent.setEventTimestamp(clientAssocEvent.getTimestampMs());
clientEvent.setCustomerId(customerId); clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId); clientEvent.setEquipmentId(equipmentId);
@@ -390,7 +395,7 @@ public class RealtimeEventPublisher {
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
@Async
void publishClientFailureEvent(int customerId, long equipmentId, long locationId, ClientFailureEvent clientFailureEvent) { void publishClientFailureEvent(int customerId, long equipmentId, long locationId, ClientFailureEvent clientFailureEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientFailureEvent, customerId, LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientFailureEvent, customerId,
equipmentId); equipmentId);
@@ -398,7 +403,7 @@ public class RealtimeEventPublisher {
com.telecominfraproject.wlan.client.models.events.realtime.ClientFailureEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientFailureEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientFailureEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientFailureEvent(
clientFailureEvent.getTimestampMs()); clientFailureEvent.getTimestampMs());
clientEvent.setSessionId(clientFailureEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientFailureEvent.getSessionId()));
clientEvent.setClientMacAddress(MacAddress.valueOf(clientFailureEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientFailureEvent.getStaMac()));
clientEvent.setSsid(clientFailureEvent.getSsid()); clientEvent.setSsid(clientFailureEvent.getSsid());
@@ -417,7 +422,7 @@ public class RealtimeEventPublisher {
LOG.info("publishing client event {} to cloud", clientEvent); LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
@Async
void publishClientFirstDataEvent(int customerId, long equipmentId, long locationId, ClientFirstDataEvent clientFirstDataEvent) { void publishClientFirstDataEvent(int customerId, long equipmentId, long locationId, ClientFirstDataEvent clientFirstDataEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientFirstDataEvent, customerId, LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientFirstDataEvent, customerId,
equipmentId); equipmentId);
@@ -425,7 +430,7 @@ public class RealtimeEventPublisher {
com.telecominfraproject.wlan.client.models.events.realtime.ClientFirstDataEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientFirstDataEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientFirstDataEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientFirstDataEvent(
clientFirstDataEvent.getTimestampMs()); clientFirstDataEvent.getTimestampMs());
clientEvent.setSessionId(clientFirstDataEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientFirstDataEvent.getSessionId()));
clientEvent.setClientMacAddress(MacAddress.valueOf(clientFirstDataEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientFirstDataEvent.getStaMac()));
if (clientFirstDataEvent.hasFdataTxUpTsInUs()) { if (clientFirstDataEvent.hasFdataTxUpTsInUs()) {
@@ -444,7 +449,7 @@ public class RealtimeEventPublisher {
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
@Async
void publishClientIdEvent(int customerId, long equipmentId, long locationId, ClientIdEvent clientIdEvent) { void publishClientIdEvent(int customerId, long equipmentId, long locationId, ClientIdEvent clientIdEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientIdEvent, customerId, equipmentId); LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientIdEvent, customerId, equipmentId);
@@ -452,7 +457,7 @@ public class RealtimeEventPublisher {
com.telecominfraproject.wlan.client.models.events.realtime.ClientIdEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientIdEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientIdEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientIdEvent(
clientIdEvent.getTimestampMs()); clientIdEvent.getTimestampMs());
clientEvent.setSessionId(clientIdEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientIdEvent.getSessionId()));
clientEvent.setClientMacAddress(MacAddress.valueOf(clientIdEvent.getCltMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientIdEvent.getCltMac()));
if (clientIdEvent.hasCltId()) { if (clientIdEvent.hasCltId()) {
clientEvent.setUserId(clientIdEvent.getCltId()); clientEvent.setUserId(clientIdEvent.getCltId());
@@ -465,7 +470,7 @@ public class RealtimeEventPublisher {
LOG.info("publishing client event {} to cloud", clientEvent); LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
@Async
void publishClientIpEvent(int customerId, long equipmentId, long locationId, ClientIpEvent clientIpEvent) { void publishClientIpEvent(int customerId, long equipmentId, long locationId, ClientIpEvent clientIpEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientIpEvent, customerId, equipmentId); LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientIpEvent, customerId, equipmentId);
@@ -473,11 +478,16 @@ public class RealtimeEventPublisher {
com.telecominfraproject.wlan.client.models.events.realtime.ClientIpAddressEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientIpAddressEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientIpAddressEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientIpAddressEvent(
clientIpEvent.getTimestampMs()); clientIpEvent.getTimestampMs());
clientEvent.setSessionId(clientIpEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientIpEvent.getSessionId()));
clientEvent.setClientMacAddress(MacAddress.valueOf(clientIpEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientIpEvent.getStaMac()));
if (clientIpEvent.hasIpAddr()) { if (clientIpEvent.hasIpAddr()) {
clientEvent.setIpAddr(clientIpEvent.getIpAddr().toByteArray()); try {
clientEvent.setIpAddr(InetAddress.getByAddress(clientIpEvent.getIpAddr().toByteArray()));
} catch (UnknownHostException e1) {
LOG.error("Invalid Client IP Address for equipmentId {}, clientIpEvent {}", equipmentId, clientIpEvent);
}
} }
clientEvent.setEventTimestamp(clientIpEvent.getTimestampMs()); clientEvent.setEventTimestamp(clientIpEvent.getTimestampMs());
clientEvent.setCustomerId(customerId); clientEvent.setCustomerId(customerId);
clientEvent.setEquipmentId(equipmentId); clientEvent.setEquipmentId(equipmentId);
@@ -486,7 +496,7 @@ public class RealtimeEventPublisher {
LOG.info("publishing client event {} to cloud", clientEvent); LOG.info("publishing client event {} to cloud", clientEvent);
cloudEventDispatcherInterface.publishEvent(clientEvent); cloudEventDispatcherInterface.publishEvent(clientEvent);
} }
@Async
void publishClientTimeoutEvent(int customerId, long equipmentId, long locationId, ClientTimeoutEvent clientTimeoutEvent) { void publishClientTimeoutEvent(int customerId, long equipmentId, long locationId, ClientTimeoutEvent clientTimeoutEvent) {
LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientTimeoutEvent, customerId, LOG.info("Received ClientEvent {} for customerId {} equipmentId {}", clientTimeoutEvent, customerId,
@@ -495,7 +505,7 @@ public class RealtimeEventPublisher {
com.telecominfraproject.wlan.client.models.events.realtime.ClientTimeoutEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientTimeoutEvent( com.telecominfraproject.wlan.client.models.events.realtime.ClientTimeoutEvent clientEvent = new com.telecominfraproject.wlan.client.models.events.realtime.ClientTimeoutEvent(
clientTimeoutEvent.getTimestampMs()); clientTimeoutEvent.getTimestampMs());
clientEvent.setSessionId(clientTimeoutEvent.getSessionId()); clientEvent.setSessionId(Long.toUnsignedString( clientTimeoutEvent.getSessionId()));
clientEvent.setClientMacAddress(MacAddress.valueOf(clientTimeoutEvent.getStaMac())); clientEvent.setClientMacAddress(MacAddress.valueOf(clientTimeoutEvent.getStaMac()));
if (clientTimeoutEvent.hasRCode()) { if (clientTimeoutEvent.hasRCode()) {
clientEvent.setTimeoutReason(clientTimeoutEvent.getRCode().equals(CTReasonType.CTR_IDLE_TOO_LONG) clientEvent.setTimeoutReason(clientTimeoutEvent.getRCode().equals(CTReasonType.CTR_IDLE_TOO_LONG)
@@ -518,6 +528,7 @@ public class RealtimeEventPublisher {
} }
@Async
void publishDhcpTransactionEvents(int customerId, long equipmentId, long locationId, List<DhcpTransaction> dhcpTransactionList) { void publishDhcpTransactionEvents(int customerId, long equipmentId, long locationId, List<DhcpTransaction> dhcpTransactionList) {
LOG.info("Publish Dhcp Transaction Events for customer {} equipmentId {}", customerId, equipmentId); LOG.info("Publish Dhcp Transaction Events for customer {} equipmentId {}", customerId, equipmentId);
List<SystemEvent> dhcpEventsList = new ArrayList<>(); List<SystemEvent> dhcpEventsList = new ArrayList<>();
@@ -798,6 +809,7 @@ public class RealtimeEventPublisher {
return cloudDhcpEvent; return cloudDhcpEvent;
} }
@Async
void publishSipCallEvents(int customerId, long equipmentId, long locationId, List<VideoVoiceReport> sipCallReportList) { void publishSipCallEvents(int customerId, long equipmentId, long locationId, List<VideoVoiceReport> sipCallReportList) {
// only in case it is not there, we will just use the time when we // only in case it is not there, we will just use the time when we
// received the report/event // received the report/event
@@ -849,7 +861,7 @@ public class RealtimeEventPublisher {
cloudSipCallReportEvent.setEventType(RealTimeEventType.SipCallReport); cloudSipCallReportEvent.setEventType(RealTimeEventType.SipCallReport);
cloudSipCallReportEvent.setSipCallId(callReport.getWifiSessionId()); cloudSipCallReportEvent.setSipCallId(callReport.getWifiSessionId());
cloudSipCallReportEvent.setAssociationId(callReport.getSessionId()); cloudSipCallReportEvent.setAssociationId(Long.toUnsignedString( callReport.getSessionId()));
if (callReport.hasReason()) { if (callReport.hasReason()) {
cloudSipCallReportEvent.setReportReason(getCallReportReason(callReport.getReason())); cloudSipCallReportEvent.setReportReason(getCallReportReason(callReport.getReason()));
@@ -915,11 +927,11 @@ public class RealtimeEventPublisher {
} }
if (apCallStart.hasSessionId()) { if (apCallStart.hasSessionId()) {
cloudSipCallStartEvent.setAssociationId(apCallStart.getSessionId()); cloudSipCallStartEvent.setAssociationId(Long.toUnsignedString( apCallStart.getSessionId()));
} }
if (apCallStart.hasWifiSessionId()) { if (apCallStart.hasWifiSessionId()) {
cloudSipCallStartEvent.setAssociationId(apCallStart.getWifiSessionId()); cloudSipCallStartEvent.setAssociationId(Long.toUnsignedString( apCallStart.getWifiSessionId()));
} }
if (apCallStart.getCodecsCount() > 0) { if (apCallStart.getCodecsCount() > 0) {
@@ -979,7 +991,7 @@ public class RealtimeEventPublisher {
if (apCallStop.hasSessionId()) { if (apCallStop.hasSessionId()) {
cloudSipCallStopEvent.setAssociationId(apCallStop.getSessionId()); cloudSipCallStopEvent.setAssociationId(Long.toUnsignedString( apCallStop.getSessionId()));
} }
@@ -1043,11 +1055,11 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoServer.hasSessionId()) { if (apStreamVideoServer.hasSessionId()) {
rtsStartEvent.setSessionId(apStreamVideoServer.getSessionId()); rtsStartEvent.setSessionId(Long.toUnsignedString( apStreamVideoServer.getSessionId()));
} }
if (apStreamVideoServer.hasVideoSessionId()) { if (apStreamVideoServer.hasVideoSessionId()) {
rtsStartEvent.setVideoSessionId(apStreamVideoServer.getVideoSessionId()); rtsStartEvent.setVideoSessionId(Long.toUnsignedString( apStreamVideoServer.getVideoSessionId()));
} }
eventsList.add(rtsStartEvent); eventsList.add(rtsStartEvent);
@@ -1167,7 +1179,7 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoSessionStart.hasSessionId()) { if (apStreamVideoSessionStart.hasSessionId()) {
rtsStartSessionEvent.setSessionId(apStreamVideoSessionStart.getSessionId()); rtsStartSessionEvent.setSessionId(Long.toUnsignedString( apStreamVideoSessionStart.getSessionId()));
} }
@@ -1178,7 +1190,7 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoSessionStart.hasVideoSessionId()) { if (apStreamVideoSessionStart.hasVideoSessionId()) {
rtsStartSessionEvent.setVideoSessionId(apStreamVideoSessionStart.getVideoSessionId()); rtsStartSessionEvent.setVideoSessionId(Long.toUnsignedString( apStreamVideoSessionStart.getVideoSessionId()));
} }
eventsList.add(rtsStartSessionEvent); eventsList.add(rtsStartSessionEvent);
} }
@@ -1208,7 +1220,7 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoStop.hasSessionId()) { if (apStreamVideoStop.hasSessionId()) {
rtsStopEvent.setSessionId(apStreamVideoStop.getSessionId()); rtsStopEvent.setSessionId(Long.toUnsignedString( apStreamVideoStop.getSessionId()));
} }
if (apStreamVideoStop.hasStreamingVideoType()) { if (apStreamVideoStop.hasStreamingVideoType()) {
@@ -1223,7 +1235,7 @@ public class RealtimeEventPublisher {
} }
if (apStreamVideoStop.hasVideoSessionId()) { if (apStreamVideoStop.hasVideoSessionId()) {
rtsStopEvent.setVideoSessionId(apStreamVideoStop.getVideoSessionId()); rtsStopEvent.setVideoSessionId(Long.toUnsignedString( apStreamVideoStop.getVideoSessionId()));
} }
eventsList.add(rtsStopEvent); eventsList.add(rtsStopEvent);

View File

@@ -1,3 +1,4 @@
package com.telecominfraproject.wlan.opensync.external.integration; package com.telecominfraproject.wlan.opensync.external.integration;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
@@ -49,6 +50,8 @@ import com.telecominfraproject.wlan.core.model.entity.CountryCode;
import com.telecominfraproject.wlan.core.model.equipment.EquipmentType; import com.telecominfraproject.wlan.core.model.equipment.EquipmentType;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress; import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.core.model.pagination.PaginationContext;
import com.telecominfraproject.wlan.core.model.pagination.PaginationResponse;
import com.telecominfraproject.wlan.customer.models.Customer; import com.telecominfraproject.wlan.customer.models.Customer;
import com.telecominfraproject.wlan.customer.models.CustomerDetails; import com.telecominfraproject.wlan.customer.models.CustomerDetails;
import com.telecominfraproject.wlan.customer.models.EquipmentAutoProvisioningSettings; import com.telecominfraproject.wlan.customer.models.EquipmentAutoProvisioningSettings;
@@ -95,10 +98,9 @@ import sts.OpensyncStats.RadioBandType;
import sts.OpensyncStats.Report; import sts.OpensyncStats.Report;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@ActiveProfiles(profiles = { "integration_test", }) @ActiveProfiles(profiles = {"integration_test",})
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = OpensyncExternalIntegrationCloudTest.class) @SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = OpensyncExternalIntegrationCloudTest.class)
@Import(value = { AlarmServiceInterface.class, OpensyncExternalIntegrationCloud.class, @Import(value = {AlarmServiceInterface.class, OpensyncExternalIntegrationCloud.class, OpensyncExternalIntegrationCloudTest.Config.class,
OpensyncExternalIntegrationCloudTest.Config.class,
}) })
public class OpensyncExternalIntegrationCloudTest { public class OpensyncExternalIntegrationCloudTest {
@@ -133,7 +135,6 @@ public class OpensyncExternalIntegrationCloudTest {
@Autowired @Autowired
OpensyncExternalIntegrationCloud opensyncExternalIntegrationCloud; OpensyncExternalIntegrationCloud opensyncExternalIntegrationCloud;
MockitoSession mockito; MockitoSession mockito;
@Configuration @Configuration
@@ -170,10 +171,12 @@ public class OpensyncExternalIntegrationCloudTest {
Location location = new Location(); Location location = new Location();
location.setId(8L); location.setId(8L);
location.setCustomerId(2); location.setCustomerId(2);
location.setDetails(LocationDetails.createWithDefaults()); LocationDetails details = LocationDetails.createWithDefaults();
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setName("Location-UT"); location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING); location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.getOrNull(Mockito.anyLong())).thenReturn(location);
Customer customer = new Customer(); Customer customer = new Customer();
customer.setId(2); customer.setId(2);
CustomerDetails customerDetails = new CustomerDetails(); CustomerDetails customerDetails = new CustomerDetails();
@@ -192,25 +195,21 @@ public class OpensyncExternalIntegrationCloudTest {
ssidProfile.setDetails(SsidConfiguration.createWithDefaults()); ssidProfile.setDetails(SsidConfiguration.createWithDefaults());
apProfile.setChildProfileIds(ImmutableSet.of(ssidProfile.getId())); apProfile.setChildProfileIds(ImmutableSet.of(ssidProfile.getId()));
Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))) Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))).thenAnswer(i -> i.getArguments()[0]);
.thenAnswer(i -> i.getArguments()[0]);
// .thenReturn(ssidProfile); // .thenReturn(ssidProfile);
Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))) Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))).thenAnswer(i -> i.getArguments()[0]);
.thenAnswer(i -> i.getArguments()[0]);
Status fwStatus = new Status(); Status fwStatus = new Status();
fwStatus.setDetails(new EquipmentUpgradeStatusData()); fwStatus.setDetails(new EquipmentUpgradeStatusData());
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.FIRMWARE)))
ArgumentMatchers.eq(StatusDataType.FIRMWARE))).thenReturn(fwStatus); .thenReturn(fwStatus);
Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()) Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()).thenReturn(new CustomerFirmwareTrackSettings());
.thenReturn(new CustomerFirmwareTrackSettings());
CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord(); CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord();
fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings()); fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings());
fwTrackRecord.setTrackRecordId(3); fwTrackRecord.setTrackRecordId(3);
fwTrackRecord.setCustomerId(2); fwTrackRecord.setCustomerId(2);
Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())) Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())).thenReturn(fwTrackRecord);
.thenReturn(fwTrackRecord);
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
equipment.setCustomerId(2); equipment.setCustomerId(2);
@@ -222,24 +221,18 @@ public class OpensyncExternalIntegrationCloudTest {
equipment.setDetails(ApElementConfiguration.createWithDefaults()); equipment.setDetails(ApElementConfiguration.createWithDefaults());
Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
Mockito.when( Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))).thenReturn(equipment);
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
.thenReturn(equipment);
Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))) Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]);
.thenAnswer(i -> i.getArguments()[0]); Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]);
Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class)))
.thenAnswer(i -> i.getArguments()[0]);
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session);
opensyncExternalIntegrationCloud.apConnected("Test_Client_21P10C68818122", createConnectNodeInfo()); opensyncExternalIntegrationCloud.apConnected("Test_Client_21P10C68818122", createConnectNodeInfo());
Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting(); Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting();
Mockito.verifyNoInteractions(locationServiceInterface); Mockito.verify(locationServiceInterface).getOrNull(ArgumentMatchers.anyLong());
} }
@@ -248,11 +241,12 @@ public class OpensyncExternalIntegrationCloudTest {
Location location = new Location(); Location location = new Location();
location.setId(8L); location.setId(8L);
location.setCustomerId(2); location.setCustomerId(2);
location.setDetails(LocationDetails.createWithDefaults()); LocationDetails details = LocationDetails.createWithDefaults();
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setName("Location-UT"); location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING); location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.getOrNull(8L)).thenReturn(location);
Mockito.when(locationServiceInterface.get(8L)).thenReturn(location);
Customer customer = new Customer(); Customer customer = new Customer();
customer.setId(2); customer.setId(2);
@@ -264,7 +258,7 @@ public class OpensyncExternalIntegrationCloudTest {
customer.setDetails(customerDetails); customer.setDetails(customerDetails);
Mockito.when(customerServiceInterface.getOrNull(ArgumentMatchers.anyInt())).thenReturn(customer); Mockito.when(customerServiceInterface.getOrNull(ArgumentMatchers.anyInt())).thenReturn(customer);
Profile rfProfile = new Profile(); Profile rfProfile = new Profile();
rfProfile.setId(1); rfProfile.setId(1);
rfProfile.setName("testRfProfile"); rfProfile.setName("testRfProfile");
@@ -279,21 +273,20 @@ public class OpensyncExternalIntegrationCloudTest {
Profile ssidProfile = new Profile(); Profile ssidProfile = new Profile();
ssidProfile.setId(2); ssidProfile.setId(2);
ssidProfile.setDetails(SsidConfiguration.createWithDefaults()); ssidProfile.setDetails(SsidConfiguration.createWithDefaults());
Set<Long> childProfileIds = new HashSet<>(); Set<Long> childProfileIds = new HashSet<>();
childProfileIds.add(rfProfile.getId()); childProfileIds.add(rfProfile.getId());
childProfileIds.add(ssidProfile.getId()); childProfileIds.add(ssidProfile.getId());
apProfile.setChildProfileIds(childProfileIds); apProfile.setChildProfileIds(childProfileIds);
Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))).thenReturn(apProfile) Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))).thenReturn(apProfile).thenReturn(ssidProfile).thenReturn(rfProfile);
.thenReturn(ssidProfile).thenReturn(rfProfile);
Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))).thenReturn(apProfile); Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))).thenReturn(apProfile);
List<Profile> profileList = new ArrayList<>(); List<Profile> profileList = new ArrayList<>();
profileList.add(apProfile); profileList.add(apProfile);
profileList.add(rfProfile); profileList.add(rfProfile);
profileList.add(ssidProfile); profileList.add(ssidProfile);
Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileList); Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileList);
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
@@ -307,27 +300,21 @@ public class OpensyncExternalIntegrationCloudTest {
Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))) Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]);
.thenAnswer(i -> i.getArguments()[0]); Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]);
Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class))) Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))).thenReturn(null);
.thenAnswer(i -> i.getArguments()[0]);
Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
.thenReturn(null);
Status fwStatus = new Status(); Status fwStatus = new Status();
fwStatus.setDetails(new EquipmentUpgradeStatusData()); fwStatus.setDetails(new EquipmentUpgradeStatusData());
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.FIRMWARE)))
ArgumentMatchers.eq(StatusDataType.FIRMWARE))).thenReturn(fwStatus); .thenReturn(fwStatus);
Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()) Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()).thenReturn(new CustomerFirmwareTrackSettings());
.thenReturn(new CustomerFirmwareTrackSettings());
CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord(); CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord();
fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings()); fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings());
fwTrackRecord.setTrackRecordId(3); fwTrackRecord.setTrackRecordId(3);
fwTrackRecord.setCustomerId(2); fwTrackRecord.setCustomerId(2);
Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())) Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())).thenReturn(fwTrackRecord);
.thenReturn(fwTrackRecord);
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
@@ -339,7 +326,7 @@ public class OpensyncExternalIntegrationCloudTest {
Mockito.verify(customerServiceInterface).getOrNull(ArgumentMatchers.anyInt()); Mockito.verify(customerServiceInterface).getOrNull(ArgumentMatchers.anyInt());
Mockito.verify(equipmentServiceInterface).getByInventoryIdOrNull("Test_Client_21P10C68818122"); Mockito.verify(equipmentServiceInterface).getByInventoryIdOrNull("Test_Client_21P10C68818122");
Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting(); Mockito.verify(firmwareServiceInterface).getDefaultCustomerTrackSetting();
Mockito.verify(locationServiceInterface).get(ArgumentMatchers.anyLong()); Mockito.verify(locationServiceInterface, Mockito.times(2)).getOrNull(ArgumentMatchers.anyLong());
} }
@@ -352,18 +339,19 @@ public class OpensyncExternalIntegrationCloudTest {
ssidProfile.setDetails(SsidConfiguration.createWithDefaults()); ssidProfile.setDetails(SsidConfiguration.createWithDefaults());
apProfile.setChildProfileIds(ImmutableSet.of(ssidProfile.getId())); apProfile.setChildProfileIds(ImmutableSet.of(ssidProfile.getId()));
Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))) Mockito.when(profileServiceInterface.create(ArgumentMatchers.any(Profile.class))).thenAnswer(i -> i.getArguments()[0]);
.thenAnswer(i -> i.getArguments()[0]);
// .thenReturn(ssidProfile); // .thenReturn(ssidProfile);
Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))) Mockito.when(profileServiceInterface.update(ArgumentMatchers.any(Profile.class))).thenAnswer(i -> i.getArguments()[0]);
.thenAnswer(i -> i.getArguments()[0]);
Location location = new Location(); Location location = new Location();
location.setId(8L); location.setId(8L);
location.setCustomerId(2); location.setCustomerId(2);
location.setDetails(LocationDetails.createWithDefaults()); LocationDetails details = LocationDetails.createWithDefaults();
details.setCountryCode(CountryCode.CA);
location.setDetails(details);
location.setName("Location-UT"); location.setName("Location-UT");
location.setLocationType(LocationType.BUILDING); location.setLocationType(LocationType.BUILDING);
Mockito.when(locationServiceInterface.get(8L)).thenReturn(location);
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
equipment.setCustomerId(2); equipment.setCustomerId(2);
@@ -375,26 +363,20 @@ public class OpensyncExternalIntegrationCloudTest {
equipment.setDetails(ApElementConfiguration.createWithDefaults()); equipment.setDetails(ApElementConfiguration.createWithDefaults());
Status fwStatus = new Status(); Status fwStatus = new Status();
fwStatus.setDetails(new EquipmentUpgradeStatusData()); fwStatus.setDetails(new EquipmentUpgradeStatusData());
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.FIRMWARE)))
ArgumentMatchers.eq(StatusDataType.FIRMWARE))).thenReturn(fwStatus); .thenReturn(fwStatus);
Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()) Mockito.when(firmwareServiceInterface.getDefaultCustomerTrackSetting()).thenReturn(new CustomerFirmwareTrackSettings());
.thenReturn(new CustomerFirmwareTrackSettings());
CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord(); CustomerFirmwareTrackRecord fwTrackRecord = new CustomerFirmwareTrackRecord();
fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings()); fwTrackRecord.setSettings(new CustomerFirmwareTrackSettings());
fwTrackRecord.setTrackRecordId(3); fwTrackRecord.setTrackRecordId(3);
fwTrackRecord.setCustomerId(2); fwTrackRecord.setCustomerId(2);
Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())) Mockito.when(firmwareServiceInterface.getCustomerFirmwareTrackRecord(ArgumentMatchers.anyInt())).thenReturn(fwTrackRecord);
.thenReturn(fwTrackRecord);
Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.get(1L)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))) Mockito.when(equipmentServiceInterface.create(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]);
.thenAnswer(i -> i.getArguments()[0]); Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class))).thenAnswer(i -> i.getArguments()[0]);
Mockito.when(equipmentServiceInterface.update(ArgumentMatchers.any(Equipment.class))) Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))).thenReturn(equipment);
.thenAnswer(i -> i.getArguments()[0]);
Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
.thenReturn(equipment);
Customer customer = new Customer(); Customer customer = new Customer();
customer.setId(2); customer.setId(2);
@@ -440,8 +422,7 @@ public class OpensyncExternalIntegrationCloudTest {
ssidProfile.setDetails(SsidConfiguration.createWithDefaults()); ssidProfile.setDetails(SsidConfiguration.createWithDefaults());
List<Profile> profileWithChildren = ImmutableList.of(apProfile, ssidProfile); List<Profile> profileWithChildren = ImmutableList.of(apProfile, ssidProfile);
Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())) Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileWithChildren);
.thenReturn(profileWithChildren);
assertNotNull(opensyncExternalIntegrationCloud.getApConfig("Test_Client_21P10C68818122")); assertNotNull(opensyncExternalIntegrationCloud.getApConfig("Test_Client_21P10C68818122"));
@@ -467,8 +448,7 @@ public class OpensyncExternalIntegrationCloudTest {
@Test @Test
public void testProcessMqttMessageStringReport() { public void testProcessMqttMessageStringReport() {
Report report = Report.newBuilder().setNodeID("21P10C68818122") Report report = Report.newBuilder().setNodeID("21P10C68818122").addAllClients(getOpensyncStatsClientReportsList())
.addAllClients(getOpensyncStatsClientReportsList())
.addAllEventReport(getOpensyncStatsEventReportsList()).build(); .addAllEventReport(getOpensyncStatsEventReportsList()).build();
String topic = "/ap/Test_Client_21P10C68818122/opensync"; String topic = "/ap/Test_Client_21P10C68818122/opensync";
@@ -481,8 +461,8 @@ public class OpensyncExternalIntegrationCloudTest {
activeBssidsDetails.setActiveBSSIDs(getActiveBssidList()); activeBssidsDetails.setActiveBSSIDs(getActiveBssidList());
bssidStatus.setDetails(activeBssidsDetails); bssidStatus.setDetails(activeBssidsDetails);
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.ACTIVE_BSSIDS)))
ArgumentMatchers.eq(StatusDataType.ACTIVE_BSSIDS))).thenReturn(bssidStatus); .thenReturn(bssidStatus);
Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus); Mockito.when(statusServiceInterface.update(ArgumentMatchers.any(Status.class))).thenReturn(bssidStatus);
com.telecominfraproject.wlan.client.models.Client clientInstance = new com.telecominfraproject.wlan.client.models.Client(); com.telecominfraproject.wlan.client.models.Client clientInstance = new com.telecominfraproject.wlan.client.models.Client();
@@ -491,12 +471,10 @@ public class OpensyncExternalIntegrationCloudTest {
com.telecominfraproject.wlan.client.models.Client clientInstance2 = new com.telecominfraproject.wlan.client.models.Client(); com.telecominfraproject.wlan.client.models.Client clientInstance2 = new com.telecominfraproject.wlan.client.models.Client();
clientInstance2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69")); clientInstance2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69"));
clientInstance2.setDetails(new ClientInfoDetails()); clientInstance2.setDetails(new ClientInfoDetails());
Mockito.when( Mockito.when(clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class))).thenReturn(clientInstance)
clientServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.any(MacAddress.class))) .thenReturn(clientInstance2);
.thenReturn(clientInstance).thenReturn(clientInstance2); Mockito.when(clientServiceInterface.update(ArgumentMatchers.any(com.telecominfraproject.wlan.client.models.Client.class))).thenReturn(clientInstance)
Mockito.when(clientServiceInterface .thenReturn(clientInstance2);
.update(ArgumentMatchers.any(com.telecominfraproject.wlan.client.models.Client.class)))
.thenReturn(clientInstance).thenReturn(clientInstance2);
ClientSession clientSession = new ClientSession(); ClientSession clientSession = new ClientSession();
clientSession.setMacAddress(MacAddress.valueOf("7C:AB:60:E6:EA:4D")); clientSession.setMacAddress(MacAddress.valueOf("7C:AB:60:E6:EA:4D"));
@@ -504,16 +482,10 @@ public class OpensyncExternalIntegrationCloudTest {
ClientSession clientSession2 = new ClientSession(); ClientSession clientSession2 = new ClientSession();
clientSession2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69")); clientSession2.setMacAddress(MacAddress.valueOf("C0:9A:D0:76:A9:69"));
clientSession2.setDetails(new ClientSessionDetails()); clientSession2.setDetails(new ClientSessionDetails());
Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), Mockito.when(clientServiceInterface.getSessionOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.any(MacAddress.class)))
ArgumentMatchers.any(MacAddress.class))).thenReturn(clientSession).thenReturn(clientSession2);
Mockito.when(clientServiceInterface.updateSession(ArgumentMatchers.any(ClientSession.class)))
.thenReturn(clientSession).thenReturn(clientSession2); .thenReturn(clientSession).thenReturn(clientSession2);
opensyncExternalIntegrationCloud.processMqttMessage(topic, report); Mockito.when(clientServiceInterface.updateSession(ArgumentMatchers.any(ClientSession.class))).thenReturn(clientSession).thenReturn(clientSession2);
Mockito.verify(opensyncExternalIntegrationMqttProcessor, Mockito.times(1)).processMqttMessage(topic, report);
} }
@Ignore @Ignore
@@ -581,10 +553,10 @@ public class OpensyncExternalIntegrationCloudTest {
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(session.getEquipmentId()).thenReturn(1L); Mockito.when(session.getEquipmentId()).thenReturn(1L);
Mockito.when(session.getCustomerId()).thenReturn(2);
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
equipment.setCustomerId(1); equipment.setCustomerId(2);
equipment.setId(1L);
equipment.setEquipmentType(EquipmentType.AP); equipment.setEquipmentType(EquipmentType.AP);
equipment.setInventoryId(apId); equipment.setInventoryId(apId);
equipment.setProfileId(1); equipment.setProfileId(1);
@@ -593,7 +565,7 @@ public class OpensyncExternalIntegrationCloudTest {
Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.get(equipment.getId())).thenReturn(equipment); Mockito.when(equipmentServiceInterface.get(equipment.getId())).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.update(equipment)).thenReturn(equipment); Mockito.when(equipmentServiceInterface.update(equipment)).thenReturn(equipment);
Profile rfProfile = new Profile(); Profile rfProfile = new Profile();
rfProfile.setName("testRfProfile"); rfProfile.setName("testRfProfile");
rfProfile.setId(2); rfProfile.setId(2);
@@ -601,30 +573,28 @@ public class OpensyncExternalIntegrationCloudTest {
rfProfile.setProfileType(ProfileType.rf); rfProfile.setProfileType(ProfileType.rf);
Set<Long> childProfileIds = new HashSet<>(); Set<Long> childProfileIds = new HashSet<>();
childProfileIds.add(rfProfile.getId()); childProfileIds.add(rfProfile.getId());
Profile apProfile = new Profile(); Profile apProfile = new Profile();
apProfile.setName("testApProfile"); apProfile.setName("testApProfile");
apProfile.setId(1); apProfile.setId(1);
apProfile.setProfileType(ProfileType.equipment_ap); apProfile.setProfileType(ProfileType.equipment_ap);
apProfile.setChildProfileIds(childProfileIds); apProfile.setChildProfileIds(childProfileIds);
List<Profile> profileList = new ArrayList<>(); List<Profile> profileList = new ArrayList<>();
profileList.add(apProfile); profileList.add(apProfile);
profileList.add(rfProfile); profileList.add(rfProfile);
Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileList); Mockito.when(profileServiceInterface.getProfileWithChildren(ArgumentMatchers.anyLong())).thenReturn(profileList);
Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session);
opensyncExternalIntegrationCloud.wifiVIFStateDbTableUpdate(ImmutableList.of(vifState1, vifState2, vifState3), opensyncExternalIntegrationCloud.wifiVIFStateDbTableUpdate(ImmutableList.of(vifState1, vifState2, vifState3), apId);
apId);
Mockito.verify(session).getCustomerId();
Mockito.verify(session).getEquipmentId(); Mockito.verify(session).getEquipmentId();
Mockito.verify(ovsdbSessionMapInterface).getSession(apId); Mockito.verify(ovsdbSessionMapInterface).getSession(apId);
Mockito.verify(equipmentServiceInterface).getOrNull(1L); Mockito.verify(equipmentServiceInterface).getOrNull(1L);
Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.CLIENT_DETAILS); Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.CLIENT_DETAILS);
Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS); Mockito.verify(statusServiceInterface).getOrNull(2, 1L, StatusDataType.ACTIVE_BSSIDS);
Mockito.verify(statusServiceInterface).update(clientStatus); Mockito.verify(statusServiceInterface).update(clientStatus);
@@ -656,8 +626,7 @@ public class OpensyncExternalIntegrationCloudTest {
radioState3.setChannel(149); radioState3.setChannel(149);
radioState3.setVifStates(ImmutableSet.of(new Uuid(UUID.randomUUID()))); radioState3.setVifStates(ImmutableSet.of(new Uuid(UUID.randomUUID())));
radioState3.setFreqBand(RadioType.is5GHzL); radioState3.setFreqBand(RadioType.is5GHzL);
radioState3.setAllowedChannels( radioState3.setAllowedChannels(ImmutableSet.of(00, 104, 108, 112, 116, 132, 136, 140, 144, 149, 153, 157, 161, 165));
ImmutableSet.of(00, 104, 108, 112, 116, 132, 136, 140, 144, 149, 153, 157, 161, 165));
radioState3.setTxPower(32); radioState3.setTxPower(32);
radioState3.setEnabled(true); radioState3.setEnabled(true);
radioState3.setCountry("CA"); radioState3.setCountry("CA");
@@ -680,7 +649,7 @@ public class OpensyncExternalIntegrationCloudTest {
protocolStatus.setStatusDataType(StatusDataType.PROTOCOL); protocolStatus.setStatusDataType(StatusDataType.PROTOCOL);
Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.PROTOCOL)).thenReturn(protocolStatus); Mockito.when(statusServiceInterface.getOrNull(2, 1L, StatusDataType.PROTOCOL)).thenReturn(protocolStatus);
Status channelStatus = new Status(); Status channelStatus = new Status();
channelStatus.setCustomerId(2); channelStatus.setCustomerId(2);
channelStatus.setEquipmentId(1L); channelStatus.setEquipmentId(1L);
@@ -718,20 +687,18 @@ public class OpensyncExternalIntegrationCloudTest {
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(session.getEquipmentId()).thenReturn(1L); Mockito.when(session.getEquipmentId()).thenReturn(1L);
Mockito.when(session.getCustomerId()).thenReturn(2);
Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session);
opensyncExternalIntegrationCloud opensyncExternalIntegrationCloud.wifiRadioStatusDbTableUpdate(ImmutableList.of(radioState1, radioState2, radioState3), apId);
.wifiRadioStatusDbTableUpdate(ImmutableList.of(radioState1, radioState2, radioState3), apId);
Mockito.verify(session).getCustomerId();
Mockito.verify(session).getEquipmentId(); Mockito.verify(session).getEquipmentId();
Mockito.verify(ovsdbSessionMapInterface).getSession(apId); Mockito.verify(ovsdbSessionMapInterface).getSession(apId);
Mockito.verify(equipmentServiceInterface, Mockito.times(1)).getByInventoryIdOrNull(apId); Mockito.verify(equipmentServiceInterface, Mockito.times(1)).getByInventoryIdOrNull(apId);
Mockito.verify(statusServiceInterface, Mockito.times(1)).getOrNull(1, 1L, StatusDataType.RADIO_CHANNEL);
Mockito.verify(statusServiceInterface, Mockito.times(3)).getOrNull(2, 1L, StatusDataType.PROTOCOL); Mockito.verify(statusServiceInterface, Mockito.times(3)).getOrNull(1, 1L, StatusDataType.PROTOCOL);
Mockito.verify(statusServiceInterface, Mockito.never()).update(bssidStatus); Mockito.verify(statusServiceInterface, Mockito.never()).update(bssidStatus);
} }
@@ -753,6 +720,23 @@ public class OpensyncExternalIntegrationCloudTest {
@Test @Test
public void testWifiVIFStateDbTableDelete() { public void testWifiVIFStateDbTableDelete() {
String apId = "Test_Client_21P10C68818122";
Equipment equipment = new Equipment();
equipment.setCustomerId(2);
equipment.setId(1L);
equipment.setEquipmentType(EquipmentType.AP);
equipment.setInventoryId(apId);
equipment.setProfileId(1);
equipment.setDetails(ApElementConfiguration.createWithDefaults());
Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(apId)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
OvsdbSession session = new OvsdbSession();
session.setApId(apId);
session.setEquipmentId(1L);
Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session);
Status bssidStatus = new Status(); Status bssidStatus = new Status();
bssidStatus.setStatusDataType(StatusDataType.ACTIVE_BSSIDS); bssidStatus.setStatusDataType(StatusDataType.ACTIVE_BSSIDS);
@@ -762,16 +746,36 @@ public class OpensyncExternalIntegrationCloudTest {
activeBssidsDetails.setActiveBSSIDs(getActiveBssidList()); activeBssidsDetails.setActiveBSSIDs(getActiveBssidList());
bssidStatus.setDetails(activeBssidsDetails); bssidStatus.setDetails(activeBssidsDetails);
Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), Mockito.when(statusServiceInterface.getOrNull(ArgumentMatchers.anyInt(), ArgumentMatchers.anyLong(), ArgumentMatchers.eq(StatusDataType.ACTIVE_BSSIDS)))
ArgumentMatchers.eq(StatusDataType.ACTIVE_BSSIDS))).thenReturn(bssidStatus); .thenReturn(bssidStatus);
PaginationResponse<ClientSession> pr = Mockito.mock(PaginationResponse.class,Mockito.RETURNS_MOCKS);
Mockito.when(clientServiceInterface.getSessionsForCustomer(Mockito.anyInt(), Mockito.anySet(),
Mockito.anySet(), Mockito.isNull(), Mockito.isNull(), Mockito.any())).thenReturn(pr);
opensyncExternalIntegrationCloud.wifiVIFStateDbTableDelete(ImmutableList.of(new OpensyncAPVIFState()), "apId");
opensyncExternalIntegrationCloud.wifiVIFStateDbTableDelete(ImmutableList.of(new OpensyncAPVIFState()), "Test_Client_21P10C68818122");
} }
@Test @Test
public void testWifiAssociatedClientsDbTableDelete() { public void testWifiAssociatedClientsDbTableDelete() {
String apId = "Test_Client_21P10C68818122";
opensyncExternalIntegrationCloud.wifiAssociatedClientsDbTableDelete("7C:AB:60:E6:EA:4D", "apId"); Equipment equipment = new Equipment();
equipment.setCustomerId(2);
equipment.setId(1L);
equipment.setEquipmentType(EquipmentType.AP);
equipment.setInventoryId(apId);
equipment.setProfileId(1);
equipment.setDetails(ApElementConfiguration.createWithDefaults());
Mockito.when(equipmentServiceInterface.getByInventoryIdOrNull(apId)).thenReturn(equipment);
Mockito.when(equipmentServiceInterface.getOrNull(1L)).thenReturn(equipment);
OvsdbSession session = new OvsdbSession();
session.setApId(apId);
session.setEquipmentId(1L);
Mockito.when(ovsdbSessionMapInterface.getSession(apId)).thenReturn(session);
opensyncExternalIntegrationCloud.wifiAssociatedClientsDbTableDelete("7C:AB:60:E6:EA:4D", "Test_Client_21P10C68818122");
} }
// Helper methods // Helper methods
@@ -799,11 +803,9 @@ public class OpensyncExternalIntegrationCloudTest {
return bssidList; return bssidList;
} }
private List<EventReport> getOpensyncStatsEventReportsList() { private List<EventReport> getOpensyncStatsEventReportsList() {
sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent sts.OpensyncStats.EventReport.ClientAssocEvent.Builder clientAssocBuilder = EventReport.ClientAssocEvent.getDefaultInstance().toBuilder();
.getDefaultInstance().toBuilder();
clientAssocBuilder.setAssocType(AssocType.ASSOC); clientAssocBuilder.setAssocType(AssocType.ASSOC);
clientAssocBuilder.setBand(RadioBandType.BAND5GU); clientAssocBuilder.setBand(RadioBandType.BAND5GU);
clientAssocBuilder.setRssi(-65); clientAssocBuilder.setRssi(-65);
@@ -831,29 +833,26 @@ public class OpensyncExternalIntegrationCloudTest {
eventReportList.add(eventReportBuilder.build()); eventReportList.add(eventReportBuilder.build());
return eventReportList; return eventReportList;
} }
private List<ClientReport> getOpensyncStatsClientReportsList() { private List<ClientReport> getOpensyncStatsClientReportsList() {
int rssi = Long.valueOf(4294967239L).intValue(); int rssi = Long.valueOf(4294967239L).intValue();
Client.Stats clientStats = Client.Stats.getDefaultInstance().toBuilder().setRssi(rssi).setRxBytes(225554786) Client.Stats clientStats = Client.Stats.getDefaultInstance().toBuilder().setRssi(rssi).setRxBytes(225554786).setRxRate(24000.0).setTxBytes(1208133026)
.setRxRate(24000.0).setTxBytes(1208133026).setTxRate(433300.0).setRssi(758722570).setRxFrames(10000) .setTxRate(433300.0).setRssi(758722570).setRxFrames(10000).setTxFrames(10000).setTxRate(24000.0).build();
.setTxFrames(10000).setTxRate(24000.0).build(); Client client2g = Client.getDefaultInstance().toBuilder().setMacAddress("7C:AB:60:E6:EA:4D").setSsid("ssid-1").setConnected(true).setDurationMs(59977)
Client client2g = Client.getDefaultInstance().toBuilder().setMacAddress("7C:AB:60:E6:EA:4D").setSsid("ssid-1") .setStats(clientStats).build();
.setConnected(true).setDurationMs(59977).setStats(clientStats).build(); Client client5gu = Client.getDefaultInstance().toBuilder().setMacAddress("C0:9A:D0:76:A9:69").setSsid("ssid-3").setConnected(true).setDurationMs(298127)
Client client5gu = Client.getDefaultInstance().toBuilder().setMacAddress("C0:9A:D0:76:A9:69").setSsid("ssid-3") .setStats(clientStats).build();
.setConnected(true).setDurationMs(298127).setStats(clientStats).build();
ClientReport clientReport2g = ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND2G) ClientReport clientReport2g =
.setChannel(6).addAllClientList(ImmutableList.of(client2g)).build(); ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND2G).setChannel(6).addAllClientList(ImmutableList.of(client2g)).build();
ClientReport clientReport5gl = ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND5GL) ClientReport clientReport5gl =
.setChannel(36).addAllClientList(new ArrayList<Client>()).build(); ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND5GL).setChannel(36).addAllClientList(new ArrayList<Client>()).build();
ClientReport clientReport5gu = ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND5GU) ClientReport clientReport5gu = ClientReport.getDefaultInstance().toBuilder().setBand(RadioBandType.BAND5GU).setChannel(157)
.setChannel(157).addAllClientList(ImmutableList.of(client5gu)).build(); .addAllClientList(ImmutableList.of(client5gu)).build();
List<ClientReport> clients = new ArrayList<>(); List<ClientReport> clients = new ArrayList<>();
clients.add(clientReport2g); clients.add(clientReport2g);
@@ -882,8 +881,7 @@ public class OpensyncExternalIntegrationCloudTest {
connectNodeInfo.skuNumber = "connectus.ai_21P10C68818122"; connectNodeInfo.skuNumber = "connectus.ai_21P10C68818122";
connectNodeInfo.redirectorAddr = "ssl:opensync.zone1.art2wave.com:6643"; connectNodeInfo.redirectorAddr = "ssl:opensync.zone1.art2wave.com:6643";
connectNodeInfo.platformVersion = "OPENWRT_EA8300"; connectNodeInfo.platformVersion = "OPENWRT_EA8300";
connectNodeInfo.wifiRadioStates = ImmutableMap.of("2.4G", "home-ap-24", "5GL", "home-ap-l50", "5GU", connectNodeInfo.wifiRadioStates = ImmutableMap.of("2.4G", "home-ap-24", "5GL", "home-ap-l50", "5GU", "home-ap-u50");
"home-ap-u50");
Map<String, String> versionMatrix = new HashMap<>(); Map<String, String> versionMatrix = new HashMap<>();
versionMatrix.put("DATE", "Thu Jul 16 18:52:06 UTC 2020"); versionMatrix.put("DATE", "Thu Jul 16 18:52:06 UTC 2020");

View File

@@ -116,7 +116,7 @@ public class MqttStatsPublisherTest {
static class Config { static class Config {
@Bean @Bean
public MqttStatsPublisher mqttStatsPublisher() { public StatsPublisherInterface mqttStatsPublisher() {
return new MqttStatsPublisher(); return new MqttStatsPublisher();
} }
@@ -125,7 +125,7 @@ public class MqttStatsPublisherTest {
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
mockito = Mockito.mockitoSession().initMocks(this).strictness(Strictness.STRICT_STUBS).startMocking(); mockito = Mockito.mockitoSession().initMocks(this).strictness(Strictness.LENIENT).startMocking();
} }
@@ -148,8 +148,12 @@ public class MqttStatsPublisherTest {
public void testExtractCustomerIdFromTopic() { public void testExtractCustomerIdFromTopic() {
String topic = "/ap/Test_Client_21P10C68818122/opensync"; String topic = "/ap/Test_Client_21P10C68818122/opensync";
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(session.getCustomerId()).thenReturn(2); Equipment ce = Mockito.mock(Equipment.class);
Mockito.when(ce.getCustomerId()).thenReturn(2);
Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
.thenReturn(ce);
Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session);
assertEquals(2, opensyncExternalIntegrationMqttProcessor.extractCustomerIdFromTopic(topic)); assertEquals(2, opensyncExternalIntegrationMqttProcessor.extractCustomerIdFromTopic(topic));
@@ -173,8 +177,7 @@ public class MqttStatsPublisherTest {
Equipment equipment = new Equipment(); Equipment equipment = new Equipment();
equipment.setDetails(ApElementConfiguration.createWithDefaults()); equipment.setDetails(ApElementConfiguration.createWithDefaults());
equipment.setId(1L); equipment.setCustomerId(2);
equipment.setId(1L);
Mockito.when( Mockito.when(
equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122"))) equipmentServiceInterface.getByInventoryIdOrNull(ArgumentMatchers.eq("Test_Client_21P10C68818122")))
@@ -193,7 +196,6 @@ public class MqttStatsPublisherTest {
OvsdbSession session = Mockito.mock(OvsdbSession.class); OvsdbSession session = Mockito.mock(OvsdbSession.class);
Mockito.when(session.getEquipmentId()).thenReturn(1L); Mockito.when(session.getEquipmentId()).thenReturn(1L);
Mockito.when(session.getCustomerId()).thenReturn(2);
Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session); Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(session);

View File

@@ -36,12 +36,6 @@ public interface OpensyncExternalIntegrationInterface {
void wifiInetStateDbTableDelete(List<OpensyncAPInetState> inetStateTables, String apId); void wifiInetStateDbTableDelete(List<OpensyncAPInetState> inetStateTables, String apId);
void processMqttMessage(String topic, Report report);
void processMqttMessage(String topic, FlowReport flowReport);
void processMqttMessage(String topic, WCStatsReport wcStatsReport);
void wifiAssociatedClientsDbTableUpdate(List<OpensyncWifiAssociatedClients> wifiAssociatedClients, String apId); void wifiAssociatedClientsDbTableUpdate(List<OpensyncWifiAssociatedClients> wifiAssociatedClients, String apId);
void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId); void wifiAssociatedClientsDbTableDelete(String deletedClientMac, String apId);
@@ -56,6 +50,10 @@ public interface OpensyncExternalIntegrationInterface {
void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId, void apcStateDbTableUpdate(Map<String, String> apcStateAttributes, String apId,
RowUpdateOperation rowUpdateOperation); RowUpdateOperation rowUpdateOperation);
void nodeStateDbTableUpdate(List<Map<String, String>> nodeStateAttributes, String apId);
void clearEquipmentStatus(String apId); void clearEquipmentStatus(String apId);
void processMqttMessage(String topic, Report report);
} }

View File

@@ -7,7 +7,6 @@ public class OvsdbSession {
private String apId; private String apId;
private long routingId; private long routingId;
private long equipmentId; private long equipmentId;
private int customerId;
public OvsdbClient getOvsdbClient() { public OvsdbClient getOvsdbClient() {
return ovsdbClient; return ovsdbClient;
@@ -33,12 +32,5 @@ public class OvsdbSession {
public void setEquipmentId(long equipmentId) { public void setEquipmentId(long equipmentId) {
this.equipmentId = equipmentId; this.equipmentId = equipmentId;
} }
public int getCustomerId() {
return customerId;
}
public void setCustomerId(int customerId) {
this.customerId = customerId;
}
} }

View File

@@ -0,0 +1,14 @@
package com.telecominfraproject.wlan.opensync.external.integration.utils;
import com.telecominfraproject.wlan.systemevent.models.SystemEvent;
import sts.OpensyncStats.Report;
public interface StatsPublisherInterface {
void processMqttMessage(String topic, Report report);
void publishSystemEventFromTableStateMonitor(SystemEvent event);
}

View File

@@ -207,4 +207,9 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
} }
@Override
public void nodeStateDbTableUpdate(List<Map<String, String>> nodeStateAttributes, String apId) {
LOG.info("nodeStateDbTableUpdate for AP {}", apId);
}
} }

View File

@@ -30,6 +30,22 @@
</triggeringPolicy> </triggeringPolicy>
</appender> </appender>
<appender name="mqttMsgTracer" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/app/logs/mqttMsgTracer.log</file>
<append>true</append>
<encoder>
<pattern>%date %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>/app/logs/mqttMsgTracer.%i.log.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>20MB</maxFileSize>
</triggeringPolicy>
</appender>
<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/app/logs/opensyncgw.log</file> <file>/app/logs/opensyncgw.log</file>
<append>true</append> <append>true</append>
@@ -67,7 +83,7 @@
<logger name="com.vmware.ovsdb.service.OvsdbConnectionInfo" level="OFF"/> <logger name="com.vmware.ovsdb.service.OvsdbConnectionInfo" level="OFF"/>
<logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/> <logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/>
<logger name="MQTT_DATA" level="DEBUG" additivity="false"> <logger name="MQTT_DATA" level="INFO" additivity="false">
<appender-ref ref="mqttDataFile"/> <appender-ref ref="mqttDataFile"/>
</logger> </logger>

View File

@@ -63,7 +63,7 @@
<logger name="com.vmware.ovsdb.service.OvsdbConnectionInfo" level="OFF"/> <logger name="com.vmware.ovsdb.service.OvsdbConnectionInfo" level="OFF"/>
<logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/> <logger name="com.vmware.ovsdb.netty.OvsdbConnectionHandler" level="ERROR"/>
<logger name="MQTT_DATA" level="DEBUG"/> <logger name="MQTT_DATA" level="INFO"/>
<!-- <!--
<logger name="org.springframework.security.web.authentication.preauth" level="DEBUG"/> <logger name="org.springframework.security.web.authentication.preauth" level="DEBUG"/>

View File

@@ -1,3 +1,4 @@
package com.telecominfraproject.wlan.opensync.mqtt; package com.telecominfraproject.wlan.opensync.mqtt;
import java.nio.charset.Charset; import java.nio.charset.Charset;
@@ -5,7 +6,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.fusesource.mqtt.client.FutureConnection; import org.fusesource.mqtt.client.BlockingConnection;
import org.fusesource.mqtt.client.MQTT; import org.fusesource.mqtt.client.MQTT;
import org.fusesource.mqtt.client.Message; import org.fusesource.mqtt.client.Message;
import org.fusesource.mqtt.client.QoS; import org.fusesource.mqtt.client.QoS;
@@ -20,9 +21,8 @@ import org.springframework.context.event.ContextClosedEvent;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.google.protobuf.Descriptors; import com.google.protobuf.Descriptors;
import com.google.protobuf.MessageOrBuilder; import com.google.protobuf.TypeRegistry;
import com.google.protobuf.util.JsonFormat; import com.google.protobuf.util.JsonFormat;
import com.google.protobuf.util.JsonFormat.TypeRegistry;
import com.netflix.servo.DefaultMonitorRegistry; import com.netflix.servo.DefaultMonitorRegistry;
import com.netflix.servo.monitor.BasicCounter; import com.netflix.servo.monitor.BasicCounter;
import com.netflix.servo.monitor.BasicTimer; import com.netflix.servo.monitor.BasicTimer;
@@ -33,14 +33,11 @@ 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.OpensyncExternalIntegrationInterface; import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface;
import com.telecominfraproject.wlan.opensync.external.integration.utils.StatsPublisherInterface;
import com.telecominfraproject.wlan.opensync.util.ZlibUtil; import com.telecominfraproject.wlan.opensync.util.ZlibUtil;
import sts.OpensyncStats; import sts.OpensyncStats;
import sts.OpensyncStats.Report; import sts.OpensyncStats.Report;
import traffic.NetworkMetadata;
import traffic.NetworkMetadata.FlowReport;
import wc.stats.IpDnsTelemetry;
import wc.stats.IpDnsTelemetry.WCStatsReport;
@Profile("mqtt_receiver") @Profile("mqtt_receiver")
@Component @Component
@@ -54,18 +51,14 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
private final TagList tags = CloudMetricsTags.commonTags; private final TagList tags = CloudMetricsTags.commonTags;
private final Counter messagesReceived = new BasicCounter( private final Counter messagesReceived = new BasicCounter(MonitorConfig.builder("osgw-mqtt-messagesReceived").withTags(tags).build());
MonitorConfig.builder("osgw-mqtt-messagesReceived").withTags(tags).build());
private final Counter messageBytesReceived = new BasicCounter( private final Counter messageBytesReceived = new BasicCounter(MonitorConfig.builder("osgw-mqtt-messageBytesReceived").withTags(tags).build());
MonitorConfig.builder("osgw-mqtt-messageBytesReceived").withTags(tags).build());
private final Timer timerMessageProcess = new BasicTimer(
MonitorConfig.builder("osgw-mqtt-messageProcessTimer").withTags(tags).build());
private final Timer timerMessageProcess = new BasicTimer(MonitorConfig.builder("osgw-mqtt-messageProcessTimer").withTags(tags).build());
@Autowired @Autowired
private OpensyncExternalIntegrationInterface extIntegrationInterface; private OpensyncExternalIntegrationInterface opensyncExternalIntegrationInterface;
// 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,
@@ -85,8 +78,7 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
public OpensyncMqttClient(@Autowired io.netty.handler.ssl.SslContext sslContext, public OpensyncMqttClient(@Autowired io.netty.handler.ssl.SslContext sslContext,
@Value("${tip.wlan.mqttBroker.address.internal:testportal.123wlan.com}") String mqttBrokerAddress, @Value("${tip.wlan.mqttBroker.address.internal:testportal.123wlan.com}") String mqttBrokerAddress,
@Value("${tip.wlan.mqttBroker.listenPort:1883}") int mqttBrokerListenPort, @Value("${tip.wlan.mqttBroker.listenPort:1883}") int mqttBrokerListenPort, @Value("${tip.wlan.mqttBroker.user:admin}") String username,
@Value("${tip.wlan.mqttBroker.user:admin}") String username,
@Value("${tip.wlan.mqttBroker.password:admin}") String password, @Value("${tip.wlan.mqttBroker.password:admin}") String password,
@Value("${mqtt.javax.net.ssl.keyStore:/opt/tip-wlan/certs/client_keystore.jks}") String jdkKeyStoreLocation, @Value("${mqtt.javax.net.ssl.keyStore:/opt/tip-wlan/certs/client_keystore.jks}") String jdkKeyStoreLocation,
@Value("${mqtt.javax.net.ssl.keyStorePassword:mypassword}") String jdkKeyStorePassword, @Value("${mqtt.javax.net.ssl.keyStorePassword:mypassword}") String jdkKeyStorePassword,
@@ -114,9 +106,9 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
@Override @Override
public void run() { public void run() {
while (keepReconnecting) { while (keepReconnecting) {
FutureConnection futureConnection = null; BlockingConnection blockingConnection = null;
try { try {
Thread.sleep(5000); // Thread.sleep(5000);
// Create a new MQTT connection to the broker. // Create a new MQTT connection to the broker.
/* /*
@@ -144,139 +136,71 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
*/ */
MQTT mqtt = new MQTT(); MQTT mqtt = new MQTT();
// mqtt.setHost("tcp://192.168.0.137:61616");
mqtt.setHost("tls://" + mqttBrokerAddress + ":" + mqttBrokerListenPort); mqtt.setHost("tls://" + mqttBrokerAddress + ":" + mqttBrokerListenPort);
LOG.info("Connecting to MQTT broker at {}", mqtt.getHost()); LOG.info("Connecting to MQTT broker at {}", mqtt.getHost());
mqtt.setClientId("opensync_mqtt"); mqtt.setClientId("opensync_mqtt");
mqtt.setUserName(username); mqtt.setUserName(username);
mqtt.setPassword(password); mqtt.setPassword(password);
// Note: the following does not work with the blockingConnection = mqtt.blockingConnection();
// serverContext, blockingConnection.connect();
// it has to be the
// clientContext
// mqtt.setSslContext(((JdkSslContext)
// sslContext).context());
// For now we'll rely on regular SSLContext from the JDK
// TODO: revisit this blocking connection, change it to LOG.debug("Connected to MQTT broker at {}", mqtt.getHost());
// futureConnection
futureConnection = mqtt.futureConnection();
futureConnection.connect();
LOG.info("Connected to MQTT broker at {}", mqtt.getHost()); // NB. setting to AT_MOST_ONCE to match the APs message level
Topic[] topics = {new Topic("/ap/#", QoS.AT_MOST_ONCE),};
// Subscribe to topics: blockingConnection.subscribe(topics);
//
// new Topic("mqtt/example/publish", QoS.AT_LEAST_ONCE),
// new Topic("#", QoS.AT_LEAST_ONCE),
// new Topic("test/#", QoS.EXACTLY_ONCE),
// new Topic("foo/+/bar", QoS.AT_LEAST_ONCE)
Topic[] topics = { new Topic("#", QoS.AT_LEAST_ONCE), };
futureConnection.subscribe(topics);
LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics)); LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics));
// prepare a JSONPrinter to format protobuf messages as // prepare a JSONPrinter to format protobuf messages as
// json // json
List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>(); List<Descriptors.Descriptor> protobufDescriptors = new ArrayList<>();
protobufDescriptors.addAll(OpensyncStats.getDescriptor().getMessageTypes()); protobufDescriptors.addAll(OpensyncStats.getDescriptor().getMessageTypes());
protobufDescriptors.addAll(IpDnsTelemetry.getDescriptor().getMessageTypes());
protobufDescriptors.addAll(NetworkMetadata.getDescriptor().getMessageTypes());
TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build(); TypeRegistry oldRegistry = TypeRegistry.newBuilder().add(protobufDescriptors).build();
JsonFormat.Printer jsonPrinter = JsonFormat.printer().includingDefaultValueFields() JsonFormat.Printer jsonPrinter =
.omittingInsignificantWhitespace().usingTypeRegistry(oldRegistry); JsonFormat.printer().includingDefaultValueFields().omittingInsignificantWhitespace().usingTypeRegistry(oldRegistry);
// main loop - receive messages // main loop - receive messages
while (true) { while (true) {
Message mqttMsg = futureConnection.receive().await(); LOG.debug("{} awaiting mqtt message from broker",mqttClientThread.getName());
Message mqttMsg = blockingConnection.receive();
if (mqttMsg == null) { if (mqttMsg == null) {
if (LOG.isTraceEnabled())
LOG.trace("NULL message received for blocking connection");
continue; continue;
} }
LOG.debug("MQTT Topic {}", mqttMsg.getTopic());
byte payload[] = mqttMsg.getPayload();
// we acknowledge right after receive because:
// a. none of the stats messages are so important
// that
// we cannot skip one
// b. if there's some kind of problem with the
// message
// (decoding or processing)
// - we want to move on as quickly as possible and
// not
// let it get stuck in the
// queue
mqttMsg.ack();
messagesReceived.increment();
messageBytesReceived.increment(payload.length);
Stopwatch stopwatchTimerMessageProcess = timerMessageProcess.start(); Stopwatch stopwatchTimerMessageProcess = timerMessageProcess.start();
LOG.trace("received message on topic {} size {}", mqttMsg.getTopic(), payload.length);
if (payload[0] == 0x78) {
// looks like zlib-compressed data, let's
// decompress
// it before deserializing
payload = ZlibUtil.decompress(payload);
}
// attempt to parse the message as protobuf
MessageOrBuilder encodedMsg = null;
try { try {
byte payload[] = mqttMsg.getPayload();
messagesReceived.increment();
messageBytesReceived.increment(payload.length);
encodedMsg = Report.parseFrom(payload); if (payload[0] == 0x78) {
// looks like zlib-compressed data, let's
MQTT_LOG.info("topic = {} Report = {}", mqttMsg.getTopic(), // decompress
jsonPrinter.print(encodedMsg)); // it before deserializing
payload = ZlibUtil.decompress(payload);
extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), (Report) encodedMsg); }
// Only supported protobuf on the TIP opensync APs is Report
Report statsReport = Report.parseFrom(payload);
mqttMsg.ack();
MQTT_LOG.info("Topic {}\n{}", mqttMsg.getTopic(), jsonPrinter.print(statsReport));
opensyncExternalIntegrationInterface.processMqttMessage(mqttMsg.getTopic(), statsReport);
LOG.debug("Dispatched report for topic {} to backend for processing", mqttMsg.getTopic());
} catch (Exception e) { } catch (Exception e) {
try { LOG.error("Exception processing topic for message {}",mqttMsg, e);
// not a opensync_stats report, attempt to
// deserialize as network_metadata
encodedMsg = FlowReport.parseFrom(payload);
MQTT_LOG.info("topic = {} FlowReport = {}", mqttMsg.getTopic(),
jsonPrinter.print(encodedMsg));
extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(),
(FlowReport) encodedMsg);
} catch (Exception e1) {
try {
// not a opensync_stats report and not
// network_metadata report, attempt to
// deserialize as WCStatsReport
encodedMsg = WCStatsReport.parseFrom(payload);
MQTT_LOG.info("topic = {} IpDnsTelemetry = {}", mqttMsg.getTopic(),
jsonPrinter.print(encodedMsg));
extIntegrationInterface.processMqttMessage(mqttMsg.getTopic(),
(WCStatsReport) encodedMsg);
} catch (Exception e2) {
String msgStr = new String(mqttMsg.getPayload(), utf8);
MQTT_LOG.info("topic = {} message = {}", mqttMsg.getTopic(), msgStr);
}
}
} finally { } finally {
stopwatchTimerMessageProcess.stop(); stopwatchTimerMessageProcess.stop();
} }
} }
} catch (Exception e) { } catch (Exception e) {
LOG.error("Exception in MQTT receiver", e); LOG.error("Exception in MQTT receiver", e);
} finally { } finally {
try { try {
if (futureConnection != null) { if (blockingConnection != null) {
futureConnection.disconnect(); blockingConnection.disconnect();
} }
} catch (Exception e1) { } catch (Exception e1) {
// do nothing // do nothing
@@ -302,4 +226,5 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
mqttClientThread.interrupt(); mqttClientThread.interrupt();
} }
} }
} }

View File

@@ -28,6 +28,7 @@ import com.vmware.ovsdb.callback.ConnectionCallback;
import com.vmware.ovsdb.exception.OvsdbClientException; import com.vmware.ovsdb.exception.OvsdbClientException;
import com.vmware.ovsdb.protocol.methods.*; import com.vmware.ovsdb.protocol.methods.*;
import com.vmware.ovsdb.protocol.operation.notation.Row; import com.vmware.ovsdb.protocol.operation.notation.Row;
import com.vmware.ovsdb.protocol.operation.notation.Value;
import com.vmware.ovsdb.service.OvsdbClient; import com.vmware.ovsdb.service.OvsdbClient;
import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener; import com.vmware.ovsdb.service.OvsdbPassiveConnectionListener;
import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContext;
@@ -259,6 +260,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) { if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) {
ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats); ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats);
} }
ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient);
ovsdbDao.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent); ovsdbDao.updateEventReportingInterval(ovsdbClient, collectionIntervalSecEvent);
} else { } else {
@@ -287,7 +289,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress); return ovsdbDao.changeRedirectorAddress(ovsdbSession.getOvsdbClient(), apId, newRedirectorAddress);
} }
public String processBlinkRequest(String apId, boolean blinkAllLEDs) { public String processBlinkRequest(String apId, boolean blinkAllLEDs) {
OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId); OvsdbSession ovsdbSession = ovsdbSessionMapInterface.getSession(apId);
if (ovsdbSession == null) { if (ovsdbSession == null) {
@@ -716,20 +718,35 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.nodeStateTable + "_" + key, CompletableFuture<TableUpdates> nsCf = ovsdbClient.monitor(OvsdbDao.ovsdbName, OvsdbDao.nodeStateTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.nodeStateTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))), tableUpdates -> { new MonitorRequests(ImmutableMap.of(OvsdbDao.nodeStateTable, new MonitorRequest(new MonitorSelect(true, true, true, true)))), tableUpdates -> {
LOG.info(OvsdbDao.nodeStateTable + "_" + key + " monitor callback received {}"); LOG.info(OvsdbDao.nodeStateTable + "_" + key + " monitor callback received {}");
tableUpdates.getTableUpdates().forEach((key1, value) -> { extIntegrationInterface.nodeStateDbTableUpdate(processNodeStateTableUpdate(key, tableUpdates), key);
LOG.info("TableUpdate for {}", key1);
value.getRowUpdates().values().forEach(r -> {
if (r.getOld() != null) {
LOG.info("Node_State old row {}", r.getOld().getColumns());
}
if (r.getNew() != null) {
LOG.info("Node_State new row {}", r.getNew().getColumns());
}
});
});
}); });
nsCf.join(); extIntegrationInterface.nodeStateDbTableUpdate(processNodeStateTableUpdate(key, nsCf.join()), key);
}
private List<Map<String,String>> processNodeStateTableUpdate(String key, TableUpdates tableUpdates) {
List<Map<String, String>> updates = new ArrayList<>();
tableUpdates.getTableUpdates().forEach((key1, value) -> {
LOG.info("TableUpdate for {}", key1);
value.getRowUpdates().values().forEach(r -> {
if (r.getOld() != null) {
LOG.info("Node_State old row {}", r.getOld().getColumns());
}
if (r.getNew() != null) {
LOG.info("Node_State new row {}", r.getNew().getColumns());
Map<String, Value> columns = r.getNew().getColumns();
Map<String, String> update = new HashMap<>();
update.put("key", columns.get("key").toString());
update.put("module", columns.get("module").toString());
update.put("persist", columns.get("persist").toString());
update.put("value", columns.get("value").toString());
updates.add(update);
}
});
});
return updates;
} }
private void monitorAPCStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException { private void monitorAPCStateTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {

View File

@@ -9,6 +9,7 @@ import org.springframework.stereotype.Component;
import com.telecominfraproject.wlan.core.model.equipment.MacAddress; import com.telecominfraproject.wlan.core.model.equipment.MacAddress;
import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.core.model.equipment.RadioType;
import com.telecominfraproject.wlan.equipment.models.ApElementConfiguration;
import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes; import com.telecominfraproject.wlan.equipment.models.CellSizeAttributes;
import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo; import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo;
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
@@ -86,7 +87,10 @@ public class OvsdbDao extends OvsdbDaoBase {
} }
public void configureNode(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { public void configureNode(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {
configureNtpServer(ovsdbClient,opensyncAPConfig);configureSyslog(ovsdbClient, opensyncAPConfig); configureNtpServer(ovsdbClient, opensyncAPConfig);
configureSyslog(ovsdbClient, opensyncAPConfig);
processBlinkRequest(ovsdbClient, opensyncAPConfig.getCustomerEquipment().getInventoryId(),
((ApElementConfiguration) opensyncAPConfig.getCustomerEquipment().getDetails()).isBlinkAllLEDs());
} }
void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) { void configureNtpServer(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncAPConfig) {

View File

@@ -265,7 +265,7 @@ public class OvsdbDaoBase {
} }
} }
void fillInRadioInterfaceNames(OvsdbClient ovsdbClient, ConnectNodeInfo ret) { void fillInRadioInterfaceNamesAndCountry(OvsdbClient ovsdbClient, ConnectNodeInfo ret) {
try { try {
List<Operation> operations = new ArrayList<>(); List<Operation> operations = new ArrayList<>();
List<Condition> conditions = new ArrayList<>(); List<Condition> conditions = new ArrayList<>();
@@ -273,6 +273,7 @@ public class OvsdbDaoBase {
columns.add("freq_band"); columns.add("freq_band");
columns.add("if_name"); columns.add("if_name");
columns.add("country");
operations.add(new Select(wifiRadioStateDbTable, conditions, columns)); operations.add(new Select(wifiRadioStateDbTable, conditions, columns));
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations); CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
@@ -292,6 +293,7 @@ public class OvsdbDaoBase {
for (Row row : ((SelectResult) result[0]).getRows()) { for (Row row : ((SelectResult) result[0]).getRows()) {
ret.wifiRadioStates.put(getSingleValueFromSet(row, "freq_band"), ret.wifiRadioStates.put(getSingleValueFromSet(row, "freq_band"),
getSingleValueFromSet(row, "if_name")); getSingleValueFromSet(row, "if_name"));
ret.country = getSingleValueFromSet(row, "country");
} }

View File

@@ -238,7 +238,7 @@ public class OvsdbNode extends OvsdbDaoBase {
} }
fillInLanIpAddressAndMac(ovsdbClient, ret, defaultLanInterfaceType); fillInLanIpAddressAndMac(ovsdbClient, ret, defaultLanInterfaceType);
fillInRadioInterfaceNames(ovsdbClient, ret); fillInRadioInterfaceNamesAndCountry(ovsdbClient, ret);
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);

View File

@@ -14,6 +14,7 @@ import com.vmware.ovsdb.protocol.operation.Operation;
import com.vmware.ovsdb.protocol.operation.Update; import com.vmware.ovsdb.protocol.operation.Update;
import com.vmware.ovsdb.protocol.operation.notation.*; import com.vmware.ovsdb.protocol.operation.notation.*;
import com.vmware.ovsdb.protocol.operation.result.OperationResult; import com.vmware.ovsdb.protocol.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
import com.vmware.ovsdb.service.OvsdbClient; import com.vmware.ovsdb.service.OvsdbClient;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -39,88 +40,100 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
Map<String, WifiRadioConfigInfo> provisionedRadioConfigs = ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient); Map<String, WifiRadioConfigInfo> provisionedRadioConfigs = ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient);
Map<String, WifiVifConfigInfo> vifConfigs = ovsdbGet.getProvisionedWifiVifConfigs(ovsdbClient); Map<String, WifiVifConfigInfo> vifConfigs = ovsdbGet.getProvisionedWifiVifConfigs(ovsdbClient);
List<Operation> operations = new ArrayList<>(); List<Operation> operations = new ArrayList<>();
for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) {
Map<String, String> hwConfig = new HashMap<>();
ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
if (elementRadioConfig == null || rfElementConfig == null) {
continue;
}
boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
LOG.debug("configureWifiRadios autoChannelSelection {} activeChannel {} getChannelNumber {} ", autoChannelSelection, channel,
elementRadioConfig.getChannelNumber());
ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth();
String ht_mode = getBandwidth(bandwidth);
RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
int beaconInterval = rfElementConfig.getBeaconInterval();
boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
boolean autoCellSizeSelection = rfElementConfig.getAutoCellSizeSelection();
int txPower = 0;
if (autoCellSizeSelection) {
if (elementRadioConfig.getEirpTxPower() != null) {
txPower = elementRadioConfig.getEirpTxPower().getValue();
}
} else {
txPower = rfElementConfig.getEirpTxPower();
}
String hwMode = getHwMode(rfElementConfig);
String freqBand = getHwConfigAndFreq(radioType, hwConfig);
String radioName = null;
for (String key : provisionedRadioConfigs.keySet()) {
if (provisionedRadioConfigs.get(key).freqBand.equals(freqBand)) {
radioName = key;
break;
}
}
if (radioName == null)
continue;
String ifName = null; // for vifConfigs
if (radioName.equals(radio0)) {
ifName = defaultRadio0;
} else if (radioName.equals(radio1)) {
ifName = defaultRadio1;
} else if (radioName.equals(radio2)) {
ifName = defaultRadio2;
}
if (ifName == null)
continue;
Set<Uuid> vifUuidsForRadio = new HashSet<>();
for (String key : vifConfigs.keySet()) {
if (key.contains(ifName))
vifUuidsForRadio.add(vifConfigs.get(key).uuid);
}
int mimoMode = MimoMode.none.getId();
if (rfElementConfig.getMimoMode() != null) {
mimoMode = rfElementConfig.getMimoMode().getId();
}
int maxNumClients = 0;
if (rfElementConfig.getMaxNumClients() != null) {
maxNumClients = rfElementConfig.getMaxNumClients();
}
try {
configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval, enabled, hwMode, ht_mode, txPower, mimoMode,
vifUuidsForRadio, operations, maxNumClients);
} catch (OvsdbClientException e) {
LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
throw new RuntimeException(e);
} catch (TimeoutException e) {
LOG.error("ConfigureWifiRadios failed with Timeout.", e);
throw new RuntimeException(e);
} catch (ExecutionException e) {
LOG.error("ConfigureWifiRadios excecution failed.", e);
throw new RuntimeException(e);
} catch (InterruptedException e) {
LOG.error("ConfigureWifiRadios interrupted.", e);
throw new RuntimeException(e);
}
}
try { try {
CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
DatabaseSchema databaseSchema = cfDatabaseSchema.get();
Set<String> columnNames = databaseSchema.getTables().get(wifiRadioConfigDbTable).getColumns().keySet();
for (RadioType radioType : apElementConfiguration.getRadioMap().keySet()) {
Map<String, String> hwConfig = new HashMap<>();
ElementRadioConfiguration elementRadioConfig = apElementConfiguration.getRadioMap().get(radioType);
RfElementConfiguration rfElementConfig = rfConfig.getRfConfig(radioType);
if (elementRadioConfig == null || rfElementConfig == null) {
continue;
}
boolean autoChannelSelection = rfElementConfig.getAutoChannelSelection();
int channel = elementRadioConfig.getActiveChannel(autoChannelSelection);
ChannelBandwidth bandwidth = rfElementConfig.getChannelBandwidth();
String ht_mode = getBandwidth(bandwidth);
RadioConfiguration radioConfig = apElementConfiguration.getAdvancedRadioMap().get(radioType);
int beaconInterval = rfElementConfig.getBeaconInterval();
boolean enabled = radioConfig.getRadioAdminState().equals(StateSetting.enabled);
boolean autoCellSizeSelection = rfElementConfig.getAutoCellSizeSelection();
int txPower = 0;
if (autoCellSizeSelection) {
if (elementRadioConfig.getEirpTxPower() != null) {
txPower = elementRadioConfig.getEirpTxPower().getValue();
}
} else {
txPower = rfElementConfig.getEirpTxPower();
}
String hwMode = getHwMode(rfElementConfig);
String freqBand = getHwConfigAndFreq(radioType, hwConfig);
String radioName = null;
for (String key : provisionedRadioConfigs.keySet()) {
if (provisionedRadioConfigs.get(key).freqBand.equals(freqBand)) {
radioName = key;
break;
}
}
LOG.debug(
"configureWifiRadios for AP {} autoChannelSelection={} activeChannel={} getChannelNumber={} radioName={} freqBand={} hwMode={} txPower={} enabled={} adminStateSetting={} autoCellSizeSelection={}",
opensyncAPConfig.getCustomerEquipment().getInventoryId(), autoChannelSelection, channel, elementRadioConfig.getChannelNumber(), radioName, freqBand, hwMode, txPower,
enabled, radioConfig.getRadioAdminState(), autoCellSizeSelection);
if (radioName == null)
continue;
String ifName = null; // for vifConfigs
if (radioName.equals(radio0)) {
ifName = defaultRadio0;
} else if (radioName.equals(radio1)) {
ifName = defaultRadio1;
} else if (radioName.equals(radio2)) {
ifName = defaultRadio2;
}
if (ifName == null)
continue;
Set<Uuid> vifUuidsForRadio = new HashSet<>();
for (String key : vifConfigs.keySet()) {
if (key.contains(ifName))
vifUuidsForRadio.add(vifConfigs.get(key).uuid);
}
int mimoMode = MimoMode.none.getId();
if (rfElementConfig.getMimoMode() != null) {
mimoMode = rfElementConfig.getMimoMode().getId();
}
int maxNumClients = 0;
if (rfElementConfig.getMaxNumClients() != null) {
maxNumClients = rfElementConfig.getMaxNumClients();
}
try {
configureWifiRadios(freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval, enabled, hwMode, ht_mode, txPower, mimoMode,
vifUuidsForRadio, operations, maxNumClients,columnNames);
} catch (OvsdbClientException e) {
LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
throw new RuntimeException(e);
} catch (TimeoutException e) {
LOG.error("ConfigureWifiRadios failed with Timeout.", e);
throw new RuntimeException(e);
} catch (ExecutionException e) {
LOG.error("ConfigureWifiRadios excecution failed.", e);
throw new RuntimeException(e);
} catch (InterruptedException e) {
LOG.error("ConfigureWifiRadios interrupted.", e);
throw new RuntimeException(e);
}
}
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations); CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
for (OperationResult res : result) { for (OperationResult res : result) {
LOG.debug("Op Result {}", res); LOG.trace("configureWifiRadios Op Result {}", res);
} }
ovsdbGet.getProvisionedWifiRadioConfigs(ovsdbClient).entrySet().forEach(r -> {
LOG.debug("configureWifiRadios for AP {} Wifi_Radio_Config for if_name:{}\n{}", opensyncAPConfig.getCustomerEquipment().getInventoryId(), r.getKey(),r.getValue());
});
} catch (OvsdbClientException | ExecutionException | InterruptedException | TimeoutException e) { } catch (OvsdbClientException | ExecutionException | InterruptedException | TimeoutException e) {
LOG.error("configureWifiRadios error", e); LOG.error("configureWifiRadios error", e);
throw new RuntimeException(e); throw new RuntimeException(e);
@@ -227,7 +240,7 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
} }
void configureWifiRadios(String freqBand, int channel, Map<String, String> hwConfig, String country, int beaconInterval, boolean enabled, String hwMode, void configureWifiRadios(String freqBand, int channel, Map<String, String> hwConfig, String country, int beaconInterval, boolean enabled, String hwMode,
String ht_mode, int txPower, int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients) String ht_mode, int txPower, int mimoMode, Set<Uuid> vifUuidsForRadio, List<Operation> operations, int maxNumClients, Set<String> tableColumns)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
Map<String, Value> updateColumns = new HashMap<>(); Map<String, Value> updateColumns = new HashMap<>();
List<Condition> conditions = new ArrayList<>(); List<Condition> conditions = new ArrayList<>();
@@ -253,7 +266,7 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
updateColumns.put("hw_mode", new Atom<>(hwMode)); updateColumns.put("hw_mode", new Atom<>(hwMode));
} }
configureCustomOptionsMap(maxNumClients, updateColumns); configureCustomOptionsMap(maxNumClients, updateColumns);
setTxAndRxChainmask(mimoMode, updateColumns); setTxAndRxChainmask(mimoMode, updateColumns,tableColumns);
if (vifUuidsForRadio.size() > 0) { if (vifUuidsForRadio.size() > 0) {
com.vmware.ovsdb.protocol.operation.notation.Set vifConfigUuids = com.vmware.ovsdb.protocol.operation.notation.Set.of(vifUuidsForRadio); com.vmware.ovsdb.protocol.operation.notation.Set vifConfigUuids = com.vmware.ovsdb.protocol.operation.notation.Set.of(vifUuidsForRadio);
updateColumns.put("vif_configs", vifConfigUuids); updateColumns.put("vif_configs", vifConfigUuids);
@@ -270,7 +283,7 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
updateColumns.put("custom_options", customOptionsMap); updateColumns.put("custom_options", customOptionsMap);
} }
void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns) { void setTxAndRxChainmask(int mimoMode, Map<String, Value> updateColumns, Set<String> tableColumns) {
/* /*
* Chainmask is a bitmask, so map mimo mode values accordingly * Chainmask is a bitmask, so map mimo mode values accordingly
* Note values 0, 1 remain unchanged * Note values 0, 1 remain unchanged
@@ -314,7 +327,9 @@ public class OvsdbRadioConfig extends OvsdbDaoBase {
break; break;
} }
updateColumns.put("tx_chainmask", new Atom<>(mimoMode)); updateColumns.put("tx_chainmask", new Atom<>(mimoMode));
updateColumns.put("rx_chainmask", new Atom<>(mimoMode)); if (tableColumns.contains("rx_chainmask")) {
updateColumns.put("rx_chainmask", new Atom<>(mimoMode));
}
} }
} }

View File

@@ -97,26 +97,34 @@ public class OvsdbRadiusProxyConfig extends OvsdbDaoBase {
for (RadiusProxyConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails()).getRadiusProxyConfigurations()) { for (RadiusProxyConfiguration rsc : ((ApNetworkConfiguration) apConfig.getApProfile().getDetails()).getRadiusProxyConfigurations()) {
Map<String, Value> updateColumns = new HashMap<>(); Map<String, Value> updateColumns = new HashMap<>();
updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress())); if (rsc.getServer() != null)
getCertificateUrls(rsc, updateColumns); updateColumns.put("server", new Atom<>(rsc.getServer().getHostAddress()));
updateColumns.put("radius_config_name", new Atom<>(rsc.getName())); if (rsc.getName() != null)
updateColumns.put("passphrase", new Atom<>(rsc.getPassphrase())); updateColumns.put("radius_config_name", new Atom<>(rsc.getName()));
updateColumns.put("port", new Atom<>(rsc.getPort())); if (rsc.getPort() != null)
updateColumns.put("realm", Set.of(rsc.getRealm())); updateColumns.put("port", new Atom<>(rsc.getPort()));
updateColumns.put("radsec", new Atom<>(rsc.getUseRadSec())); if (rsc.getRealm() != null)
updateColumns.put("secret", new Atom<>(rsc.getSharedSecret())); updateColumns.put("realm", Set.of(rsc.getRealm()));
if (rsc.getUseRadSec() != null) {
updateColumns.put("radsec", new Atom<>(rsc.getUseRadSec()));
if (rsc.getUseRadSec()) {
getCertificateUrls(rsc, updateColumns);
updateColumns.put("passphrase", new Atom<>(rsc.getPassphrase()));
}
}
if (rsc.getSharedSecret() != null)
updateColumns.put("secret", new Atom<>(rsc.getSharedSecret()));
if (rsc.getAcctServer() != null) { if (rsc.getAcctServer() != null) {
updateColumns.put("acct_server", new Atom<>(rsc.getAcctServer().getHostAddress())); updateColumns.put("acct_server", new Atom<>(rsc.getAcctServer().getHostAddress()));
} }
if (rsc.getSharedSecret() != null) { if (rsc.getSharedSecret() != null) {
updateColumns.put("acct_secret", new Atom<>(rsc.getSharedSecret())); updateColumns.put("acct_secret", new Atom<>(rsc.getSharedSecret()));
} }
if (rsc.getAcctPort() != null) { if (rsc.getAcctPort() != null) {
updateColumns.put("acct_port", new Atom<>(rsc.getAcctPort())); updateColumns.put("acct_port", new Atom<>(rsc.getAcctPort()));
} }
if (databaseSchema.getTables().get(radiusConfigDbTable).getColumns().containsKey("auto_discover")) {
if( databaseSchema.getTables().get(radiusConfigDbTable).getColumns().containsKey("auto_discover") ){ if (rsc.getUseRadSec() != null && rsc.getUseRadSec() && rsc.getDynamicDiscovery() != null && rsc.getDynamicDiscovery()) {
if (rsc.getUseRadSec() && rsc.getDynamicDiscovery()) {
// if useRadSec && dynamicDiscovery enabled, do not send server information // if useRadSec && dynamicDiscovery enabled, do not send server information
updateColumns.put("auto_discover", new Atom<>(true)); updateColumns.put("auto_discover", new Atom<>(true));
updateColumns.remove("acct_server"); updateColumns.remove("acct_server");
@@ -131,7 +139,6 @@ public class OvsdbRadiusProxyConfig extends OvsdbDaoBase {
updateColumns.put("auto_discover", new Atom<>(false)); updateColumns.put("auto_discover", new Atom<>(false));
} }
} }
Row row = new Row(updateColumns); Row row = new Row(updateColumns);
operations.add(new Insert(radiusConfigDbTable, row)); operations.add(new Insert(radiusConfigDbTable, row));
} }

View File

@@ -5,6 +5,7 @@ import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@@ -41,6 +42,7 @@ import com.vmware.ovsdb.protocol.operation.result.ErrorResult;
import com.vmware.ovsdb.protocol.operation.result.InsertResult; import com.vmware.ovsdb.protocol.operation.result.InsertResult;
import com.vmware.ovsdb.protocol.operation.result.OperationResult; import com.vmware.ovsdb.protocol.operation.result.OperationResult;
import com.vmware.ovsdb.protocol.operation.result.UpdateResult; import com.vmware.ovsdb.protocol.operation.result.UpdateResult;
import com.vmware.ovsdb.protocol.schema.DatabaseSchema;
import com.vmware.ovsdb.service.OvsdbClient; import com.vmware.ovsdb.service.OvsdbClient;
@Component @Component
@@ -49,6 +51,7 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
ApElementConfiguration apElementConfig = (ApElementConfiguration) opensyncApConfig.getCustomerEquipment().getDetails(); ApElementConfiguration apElementConfig = (ApElementConfiguration) opensyncApConfig.getCustomerEquipment().getDetails();
RfConfiguration rfConfig = (RfConfiguration) opensyncApConfig.getRfProfile().getDetails(); RfConfiguration rfConfig = (RfConfiguration) opensyncApConfig.getRfProfile().getDetails();
for (RadioType radioType : apElementConfig.getRadioMap().keySet()) { for (RadioType radioType : apElementConfig.getRadioMap().keySet()) {
String freqBand = null; String freqBand = null;
if (radioType == RadioType.is2dot4GHz) { if (radioType == RadioType.is2dot4GHz) {
@@ -138,60 +141,76 @@ public class OvsdbRrmConfig extends OvsdbDaoBase {
int noiseFloorThresholdInDB, int noiseFloorThresholdTimeInSeconds, int nonWifiThresholdInPercentage, int nonWifiThresholdTimeInSeconds) int noiseFloorThresholdInDB, int noiseFloorThresholdTimeInSeconds, int nonWifiThresholdInPercentage, int nonWifiThresholdTimeInSeconds)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException { throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
CompletableFuture<DatabaseSchema> cfDatabaseSchema = ovsdbClient.getSchema(ovsdbName);
DatabaseSchema databaseSchema = cfDatabaseSchema.get();
Set<String> columnNames = databaseSchema.getTables().get(wifiRrmConfigDbTable).getColumns().keySet();
List<Operation> operations = new ArrayList<>(); List<Operation> operations = new ArrayList<>();
Map<String, Value> updateColumns = new HashMap<>(); Map<String, Value> updateColumns = new HashMap<>();
updateColumns.put("freq_band", new Atom<>(freqBand)); if (columnNames.contains("freq_band")) updateColumns.put("freq_band", new Atom<>(freqBand));
updateColumns.put("backup_channel", new Atom<>(backupChannel)); if (columnNames.contains("backup_channel")) updateColumns.put("backup_channel", new Atom<>(backupChannel));
if (columnNames.contains("mcast_rate")) {
if (multicastRate == null || multicastRate == MulticastRate.auto) { if (multicastRate == null || multicastRate == MulticastRate.auto) {
updateColumns.put("mcast_rate", new Atom<>(0)); updateColumns.put("mcast_rate", new Atom<>(0));
} else { } else {
updateColumns.put("mcast_rate", new Atom<>(multicastRate.getId())); updateColumns.put("mcast_rate", new Atom<>(multicastRate.getId()));
}
} }
if (probeResponseThreshold == null) { if (columnNames.contains("probe_resp_threshold")) {
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set()); if (probeResponseThreshold == null) {
} else { updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue())); } else {
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.intValue()));
}
}
if (columnNames.contains("client_disconnect_threshold")) {
if (clientDisconnectThreshold == null) {
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.intValue()));
}
}
if (columnNames.contains("beacon_rate")) {
if (managementRate == null || managementRate == ManagementRate.auto) {
updateColumns.put("beacon_rate", new Atom<>(0));
} else {
updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
}
} }
if (clientDisconnectThreshold == null) { if (columnNames.contains("min_load") && columnNames.contains("snr_percentage_drop")) {
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set()); if (bestApSettings == null) {
} else { updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.intValue()));
}
if (managementRate == null || managementRate == ManagementRate.auto) {
updateColumns.put("beacon_rate", new Atom<>(0));
} else {
updateColumns.put("beacon_rate", new Atom<>(managementRate.getId() * 10));
}
if (bestApSettings == null) {
updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
if (bestApSettings.getDropInSnrPercentage() == null) {
updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set()); updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else { } else {
updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage())); if (bestApSettings.getDropInSnrPercentage() == null) {
} updateColumns.put("snr_percentage_drop", new com.vmware.ovsdb.protocol.operation.notation.Set());
if (bestApSettings.getMinLoadFactor() == null) { } else {
updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set()); updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage()));
} else { }
updateColumns.put("min_load", new Atom<>(bestApSettings.getMinLoadFactor())); if (bestApSettings.getMinLoadFactor() == null) {
updateColumns.put("min_load", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("min_load", new Atom<>(bestApSettings.getMinLoadFactor()));
}
} }
} }
if (obssHopMode != null) { if (obssHopMode != null && columnNames.contains("obss_hop_mode"))
{
updateColumns.put("obss_hop_mode", new Atom<>(obssHopMode.equals(OBSSHopMode.NON_WIFI) ? 1 : 2)); updateColumns.put("obss_hop_mode", new Atom<>(obssHopMode.equals(OBSSHopMode.NON_WIFI) ? 1 : 2));
} }
updateColumns.put("noise_floor_thresh", new Atom<>(noiseFloorThresholdInDB)); if (columnNames.contains("noise_floor_thresh"))
updateColumns.put("noise_floor_time", new Atom<>(noiseFloorThresholdTimeInSeconds)); updateColumns.put("noise_floor_thresh", new Atom<>(noiseFloorThresholdInDB));
updateColumns.put("non_wifi_thresh", new Atom<>(nonWifiThresholdInPercentage)); if (columnNames.contains("noise_floor_time"))
updateColumns.put("non_wifi_time", new Atom<>(nonWifiThresholdTimeInSeconds)); updateColumns.put("noise_floor_time", new Atom<>(noiseFloorThresholdTimeInSeconds));
if (columnNames.contains("non_wifi_thresh"))
updateColumns.put("non_wifi_thresh", new Atom<>(nonWifiThresholdInPercentage));
if (columnNames.contains("non_wifi_time"))
updateColumns.put("non_wifi_time", new Atom<>(nonWifiThresholdTimeInSeconds));
Row row = new Row(updateColumns); Row row = new Row(updateColumns);
operations.add(new Insert(wifiRrmConfigDbTable, row)); operations.add(new Insert(wifiRrmConfigDbTable, row));

View File

@@ -445,7 +445,7 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
if (radioConfiguration != null) { if (radioConfiguration != null) {
dtimPeriod = radioConfiguration.getDtimPeriod(); dtimPeriod = radioConfiguration.getDtimPeriod();
uapsdEnabled = radioConfiguration.getUapsdState() == StateSetting.enabled; uapsdEnabled = radioConfiguration.getUapsdState() == StateSetting.enabled;
apBridge = radioConfiguration.getStationIsolation() == StateSetting.disabled; // stationIsolation if (ssidConfig.getNoLocalSubnets()) apBridge = false; // no local access
} }
String minHwMode = "11n"; // min_hw_mode is 11n String minHwMode = "11n"; // min_hw_mode is 11n
@@ -554,7 +554,7 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
} }
boolean enableProxyArpForHotspot = false; boolean enableProxyArpForHotspot = false;
if (ssidConfig.getEnableProxyArpForHotspot() != null) { if (ssidConfig.getEnableProxyArpForHotspot() != null) {
enableProxyArpForHotspot = false; enableProxyArpForHotspot = ssidConfig.getEnableProxyArpForHotspot();
} }
try { try {
configureSingleSsid(ovsdbClient, ifName, ssidConfig.getSsid(), ssidBroadcast, security, vlanId, rrmEnabled, enable80211r, mobilityDomain, configureSingleSsid(ovsdbClient, ifName, ssidConfig.getSsid(), ssidBroadcast, security, vlanId, rrmEnabled, enable80211r, mobilityDomain,
@@ -643,10 +643,8 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
if ((ssidConfig.getCaptivePortalId() == profileCaptive.getId()) && (profileCaptive.getDetails() != null)) { if ((ssidConfig.getCaptivePortalId() == profileCaptive.getId()) && (profileCaptive.getDetails() != null)) {
CaptivePortalConfiguration captiveProfileDetails = ((CaptivePortalConfiguration) profileCaptive.getDetails()); CaptivePortalConfiguration captiveProfileDetails = ((CaptivePortalConfiguration) profileCaptive.getDetails());
// +#define SCHEMA_CONSTS_PAGE_TITLE "page_title"
if (captiveProfileDetails.getBrowserTitle() != null) { if (captiveProfileDetails.getBrowserTitle() != null) {
captiveMap.put("session_timeout", String.valueOf(captiveProfileDetails.getSessionTimeoutInMinutes())); captiveMap.put("session_timeout", String.valueOf(captiveProfileDetails.getSessionTimeoutInMinutes()));
captiveMap.put("page_title", captiveProfileDetails.getBrowserTitle());
} }
if (captiveProfileDetails.getAuthenticationType().equals(CaptivePortalAuthenticationType.radius)) { if (captiveProfileDetails.getAuthenticationType().equals(CaptivePortalAuthenticationType.radius)) {
Optional<Profile> optional = Optional<Profile> optional =
@@ -763,6 +761,9 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
case "wpa3MixedEAP": case "wpa3MixedEAP":
opensyncSecurityMode = "WPA3-EAP"; opensyncSecurityMode = "WPA3-EAP";
break; break;
case "wpa3OnlyEAP192":
opensyncSecurityMode = "WPA3-EAP-192";
break;
} }
return opensyncSecurityMode; return opensyncSecurityMode;
} }
@@ -876,6 +877,13 @@ public class OvsdbSsidConfig extends OvsdbDaoBase {
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security); getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
} }
break; break;
case "wpa3OnlyEAP192":
security.put("mode", "3");
if (!ssidConfig.getUseRadiusProxy()) {
getRadiusConfiguration(opensyncApConfig, ssidConfig, security);
getRadiusAccountingConfiguration(opensyncApConfig, ssidConfig, security);
}
break;
case "wpa2EAP": case "wpa2EAP":
case "wpa2Radius": case "wpa2Radius":
case "wpa3MixedEAP": case "wpa3MixedEAP":

View File

@@ -63,7 +63,6 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
provisionWifiStatsConfigClient(radioConfigs, ovsdbGet.getProvisionedWifiStatsConfigs(ovsdbClient), provisionWifiStatsConfigClient(radioConfigs, ovsdbGet.getProvisionedWifiStatsConfigs(ovsdbClient),
operations); operations);
if (!operations.isEmpty()) { if (!operations.isEmpty()) {
LOG.debug("Sending batch of operations : {} ", operations); LOG.debug("Sending batch of operations : {} ", operations);
@@ -78,11 +77,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
} }
} }
} }
// TODO: when schema support is added, these should be part of the
// bulk provisioning operation above.
provisionVideoVoiceStats(ovsdbClient); provisionVideoVoiceStats(ovsdbClient);
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) { } catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
@@ -248,7 +243,6 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("report_type", new Atom<>("raw")); rowColumns.put("report_type", new Atom<>("raw"));
rowColumns.put("sampling_interval", new Atom<>(10)); rowColumns.put("sampling_interval", new Atom<>(10));
rowColumns.put("stats_type", new Atom<>("client")); rowColumns.put("stats_type", new Atom<>("client"));
rowColumns.put("survey_interval_ms", new Atom<>(65));
Row updateRow = new Row(rowColumns); Row updateRow = new Row(rowColumns);
operations.add(new Insert(wifiStatsConfigDbTable, updateRow)); operations.add(new Insert(wifiStatsConfigDbTable, updateRow));
@@ -258,6 +252,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
} }
void provisionWifiStatsConfigNeighbor(Map<String, Set<Integer>> allowedChannels, void provisionWifiStatsConfigNeighbor(Map<String, Set<Integer>> allowedChannels,
Map<String, WifiRadioConfigInfo> radioConfigs, Map<String, WifiStatsConfigInfo> provisionedWifiStatsConfigs, Map<String, WifiRadioConfigInfo> radioConfigs, Map<String, WifiStatsConfigInfo> provisionedWifiStatsConfigs,
List<Operation> operations) { List<Operation> operations) {
@@ -280,6 +275,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("reporting_interval", new Atom<>(defaultOffChannelReportingIntervalSeconds)); rowColumns.put("reporting_interval", new Atom<>(defaultOffChannelReportingIntervalSeconds));
rowColumns.put("stats_type", new Atom<>("neighbor")); rowColumns.put("stats_type", new Atom<>("neighbor"));
rowColumns.put("survey_type", new Atom<>("off-chan")); rowColumns.put("survey_type", new Atom<>("off-chan"));
rowColumns.put("survey_interval_ms", new Atom<>(10));
Row updateRow = new Row(rowColumns); Row updateRow = new Row(rowColumns);
operations.add(new Insert(wifiStatsConfigDbTable, updateRow)); operations.add(new Insert(wifiStatsConfigDbTable, updateRow));
@@ -299,6 +295,7 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds)); rowColumns.put("reporting_interval", new Atom<>(defaultReportingIntervalSeconds));
rowColumns.put("stats_type", new Atom<>("neighbor")); rowColumns.put("stats_type", new Atom<>("neighbor"));
rowColumns.put("survey_type", new Atom<>("on-chan")); rowColumns.put("survey_type", new Atom<>("on-chan"));
rowColumns.put("survey_interval_ms", new Atom<>(0));
Row updateRow = new Row(rowColumns); Row updateRow = new Row(rowColumns);
operations.add(new Insert(wifiStatsConfigDbTable, updateRow)); operations.add(new Insert(wifiStatsConfigDbTable, updateRow));
@@ -354,8 +351,8 @@ public class OvsdbStatsConfig extends OvsdbDaoBase {
rowColumns.put("report_type", new Atom<>("raw")); rowColumns.put("report_type", new Atom<>("raw"));
rowColumns.put("stats_type", new Atom<>("survey")); rowColumns.put("stats_type", new Atom<>("survey"));
rowColumns.put("survey_type", new Atom<>("off-chan")); rowColumns.put("survey_type", new Atom<>("off-chan"));
rowColumns.put("sampling_interval", new Atom<>(10)); rowColumns.put("sampling_interval", new Atom<>(0));
rowColumns.put("survey_interval_ms", new Atom<>(50)); rowColumns.put("survey_interval_ms", new Atom<>(10));
rowColumns.put("threshold", thresholds); rowColumns.put("threshold", thresholds);
Row updateRow = new Row(rowColumns); Row updateRow = new Row(rowColumns);
operations.add(new Insert(wifiStatsConfigDbTable, updateRow)); operations.add(new Insert(wifiStatsConfigDbTable, updateRow));

View File

@@ -13,6 +13,7 @@ public class OvsdbStringConstants {
public static final String FW_IMAGE_NAME_KEY = "FW_IMAGE_NAME"; public static final String FW_IMAGE_NAME_KEY = "FW_IMAGE_NAME";
public static final String FW_IMAGE_ACTIVE_KEY = "FW_IMAGE_ACTIVE"; public static final String FW_IMAGE_ACTIVE_KEY = "FW_IMAGE_ACTIVE";
public static final String FW_IMAGE_INACTIVE_KEY = "FW_IMAGE_INACTIVE"; public static final String FW_IMAGE_INACTIVE_KEY = "FW_IMAGE_INACTIVE";
public static final String FW_IMAGE_DATE = "DATE";
// AWLAN_Node values which can be placed in firmware_url column to trigger // AWLAN_Node values which can be placed in firmware_url column to trigger
// behavior other than firmware download/flash // behavior other than firmware download/flash