refactoring Client and Dao

This commit is contained in:
Mike Hansen
2020-08-10 09:05:18 -04:00
parent 01521b879a
commit 5fa57005a1
4 changed files with 154 additions and 120 deletions

View File

@@ -2143,7 +2143,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
String bssid = vifState.getMac();
if ((bssid == null) || bssid.equals("")) {
LOG.warn("BSSID from AP {} interface {} is null or empty", apId, vifState.getIfName());
LOG.warn("BSSID from AP {} for vif {} is null or empty", apId, vifState.getIfName());
continue;
}
String ssid = vifState.getSsid();

View File

@@ -7,6 +7,7 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import org.fusesource.mqtt.client.BlockingConnection;
import org.fusesource.mqtt.client.FutureConnection;
import org.fusesource.mqtt.client.MQTT;
import org.fusesource.mqtt.client.Message;
import org.fusesource.mqtt.client.QoS;
@@ -130,8 +131,10 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
// TODO: revisit this blocking connection, change it to
// futureConnection
connection = mqtt.blockingConnection();
connection.connect();
FutureConnection futureConnection = mqtt.futureConnection();
futureConnection.connect();
// connection = mqtt.blockingConnection();
// connection.connect();
LOG.info("Connected to MQTT broker at {}", mqtt.getHost());
// Subscribe to topics:
@@ -140,9 +143,9 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
// 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), };
Topic[] topics = { new Topic("/ap/+/opensync", QoS.AT_LEAST_ONCE), };
connection.subscribe(topics);
futureConnection.subscribe(topics);
LOG.info("Subscribed to mqtt topics {}", Arrays.asList(topics));
// prepare a JSONPrinter to format protobuf messages as
@@ -157,11 +160,14 @@ public class OpensyncMqttClient implements ApplicationListener<ContextClosedEven
// main loop - receive messages
while (true) {
Message mqttMsg = connection.receive(5, TimeUnit.SECONDS);
Message mqttMsg = futureConnection.receive().await();
// Message mqttMsg = connection.receive(5, TimeUnit.SECONDS);
if (mqttMsg == null) {
continue;
}
LOG.debug("MQTT Topic {}", mqttMsg.getTopic());
byte payload[] = mqttMsg.getPayload();
// we acknowledge right after receive because:

View File

@@ -317,23 +317,23 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
} catch (OvsdbClientException e) {
LOG.debug("Could not enable monitor for Wifi_Radio_State table. {}", e.getMessage());
}
try {
monitorWifiInetStateDbTable(ovsdbClient, key);
} catch (OvsdbClientException e) {
LOG.debug("Could not enable monitor for Wifi_Inet_State table. {}", e.getMessage());
}
// try {
// monitorWifiInetStateDbTable(ovsdbClient, key);
// } catch (OvsdbClientException e) {
// LOG.debug("Could not enable monitor for Wifi_Inet_State table. {}", e.getMessage());
// }
try {
monitorWifiVifStateDbTable(ovsdbClient, key);
} catch (OvsdbClientException e) {
LOG.debug("Could not enable monitor for Wifi_VIF_State table. {}", e.getMessage());
}
try {
monitorWifiVifStateDbTableDeletion(ovsdbClient, key);
} catch (OvsdbClientException e) {
LOG.debug("Could not enable monitor for deletions to Wifi_VIF_State table. {}", e.getMessage());
}
// try {
// monitorWifiVifStateDbTableDeletion(ovsdbClient, key);
// } catch (OvsdbClientException e) {
// LOG.debug("Could not enable monitor for deletions to Wifi_VIF_State table. {}", e.getMessage());
//
// }
try {
monitorWifiAssociatedClientsDbTable(ovsdbClient, key);
} catch (OvsdbClientException e) {
@@ -401,34 +401,45 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
}
private void monitorWifiInetStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
CompletableFuture<TableUpdates> isCf = ovsdbClient
.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiInetStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable,
new MonitorRequest(new MonitorSelect(false, true, true, true)))),
new MonitorCallback() {
@Override
public void update(TableUpdates tableUpdates) {
LOG.info(OvsdbDao.ovsdbName,
OvsdbDao.wifiInetStateDbTable + "_" + key + " monitor callback received {}",
tableUpdates);
extIntegrationInterface.wifiInetStateDbTableUpdate(
ovsdbDao.getOpensyncAPInetState(tableUpdates, key, ovsdbClient), key);
}
});
isCf.join();
}
// private void monitorWifiInetStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
// CompletableFuture<TableUpdates> isCf = ovsdbClient
// .monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiInetStateDbTable + "_" + key,
// new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiInetStateDbTable,
// new MonitorRequest(new MonitorSelect(false, true, true, true)))),
// new MonitorCallback() {
//
// @Override
// public void update(TableUpdates tableUpdates) {
// LOG.info(OvsdbDao.ovsdbName,
// OvsdbDao.wifiInetStateDbTable + "_" + key + " monitor callback received {}",
// tableUpdates);
//
// extIntegrationInterface.wifiInetStateDbTableUpdate(
// ovsdbDao.getOpensyncAPInetState(tableUpdates, key, ovsdbClient), key);
//
// }
//
// });
// isCf.join();
//
// }
private void monitorWifiRadioStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
List<String> columns = new ArrayList<>();
columns.add("vif_states");
columns.add("allowed_channels");
columns.add("channel");
columns.add("enabled");
columns.add("freq_band");
columns.add("tx_power");
columns.add("country");
columns.add("mac");
CompletableFuture<TableUpdates> rsCf = ovsdbClient
.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiRadioStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiRadioStateDbTable,
new MonitorRequest(new MonitorSelect(false, false, false, true)))),
new MonitorRequest(columns))),
new MonitorCallback() {
@Override
@@ -541,10 +552,18 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
}
private void monitorWifiVifStateDbTable(OvsdbClient ovsdbClient, String key) throws OvsdbClientException {
List<String> columns = new ArrayList<>();
columns.add("associated_clients");
columns.add("mac");
columns.add("if_name");
columns.add("ssid");
columns.add("channel");
CompletableFuture<TableUpdates> vsCf = ovsdbClient
.monitor(OvsdbDao.ovsdbName, OvsdbDao.wifiVifStateDbTable + "_" + key,
new MonitorRequests(ImmutableMap.of(OvsdbDao.wifiVifStateDbTable,
new MonitorRequest(new MonitorSelect(false, true, false, true)))),
new MonitorRequest(columns,new MonitorSelect(true, true, false, true)))),
new MonitorCallback() {
@Override
public void update(TableUpdates tableUpdates) {

View File

@@ -1610,28 +1610,6 @@ public class OvsdbDao {
}
}
// Now clean up references in the vif_configs columns
operations = new ArrayList<>();
Map<String, Value> updateColumns = new HashMap<>();
Set<Uuid> vifConfigsSet = new HashSet<>();
com.vmware.ovsdb.protocol.operation.notation.Set vifConfigs = com.vmware.ovsdb.protocol.operation.notation.Set
.of(vifConfigsSet);
updateColumns.put("vif_configs", vifConfigs);
Row row = new Row(updateColumns);
operations.add(new Update(wifiRadioConfigDbTable, row));
fResult = ovsdbClient.transact(ovsdbName, operations);
result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
if (LOG.isDebugEnabled()) {
LOG.debug("Updated WifiRadioConfig ");
for (OperationResult res : result) {
LOG.debug("Op Result {}", res);
}
}
LOG.info("Removed all ssids");
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
@@ -1687,6 +1665,32 @@ public class OvsdbDao {
if (!elementRadioConfig.getEirpTxPower().isAuto()) {
txPower = elementRadioConfig.getEirpTxPower().getValue();
}
String hwMode = null;
switch (radioConfig.getRadioMode()) {
case modeA:
hwMode = "11a";
break;
case modeAB:
hwMode = "11ab";
break;
case modeAC:
hwMode = "11ac";
break;
case modeB:
hwMode = "11b";
break;
case modeG:
hwMode = "11g";
break;
case modeX:
hwMode = "11ax";
break;
case modeN:
hwMode = "11n";
break;
default:
}
String freqBand = null;
switch (radioType) {
case is2dot4GHz:
@@ -1736,7 +1740,7 @@ public class OvsdbDao {
if (freqBand != null) {
try {
configureWifiRadios(ovsdbClient, freqBand, channel, hwConfig, country.toUpperCase(), beaconInterval,
enabled, ht_mode, txPower);
enabled, hwMode, ht_mode, txPower);
} catch (OvsdbClientException e) {
LOG.error("ConfigureWifiRadios failed with OvsdbClient exception.", e);
throw new RuntimeException(e);
@@ -2178,7 +2182,7 @@ public class OvsdbDao {
}
public void configureWifiRadios(OvsdbClient ovsdbClient, String freqBand, int channel, Map<String, String> hwConfig,
String country, int beaconInterval, boolean enabled, String ht_mode, int txPower)
String country, int beaconInterval, boolean enabled, String hwMode, String ht_mode, int txPower)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
List<Operation> operations = new ArrayList<>();
@@ -2204,6 +2208,9 @@ public class OvsdbDao {
} else {
updateColumns.put("tx_power", new com.vmware.ovsdb.protocol.operation.notation.Set());
}
if (hwMode != null) {
updateColumns.put("hw_mode", new Atom<>(hwMode));
}
Row row = new Row(updateColumns);
operations.add(new Update(wifiRadioConfigDbTable, conditions, row));
@@ -2231,9 +2238,9 @@ public class OvsdbDao {
try {
// If we are doing a NAT SSID, no bridge, else yes
if (networkForwardMode == NetworkForwardMode.NAT) {
updateColumns.put("bridge", new Atom<>("lan"));
updateColumns.put("bridge", new Atom<>(defaultLanInterfaceName));
} else {
updateColumns.put("bridge", new Atom<>("wan"));
updateColumns.put("bridge", new Atom<>(defaultWanInterfaceName));
}
if (enable80211v) {
updateColumns.put("btm", new Atom<>(1));
@@ -2253,9 +2260,8 @@ public class OvsdbDao {
updateColumns.put("rrm", new Atom<>(rrmEnabled ? 1 : 0));
updateColumns.put("ssid", new Atom<>(ssid));
updateColumns.put("ssid_broadcast", new Atom<>(ssidBroadcast ? "enabled" : "disabled"));
updateColumns.put("uapsd_enable", new Atom<>(true));
// updateColumns.put("vif_radio_idx", new
// Atom<Integer>(vifRadioIdx));
updateColumns.put("uapsd_enable", new Atom<>(uapsdEnabled));
updateColumns.put("min_hw_mode", new Atom<>(minHwMode));
if (vlanId > 0) {
updateColumns.put("vlan_id", new Atom<>(vlanId));
@@ -2654,6 +2660,8 @@ public class OvsdbDao {
throw new IllegalStateException(
"Cannot provision more than " + maxInterfacesPerRadio + " interfaces per Wifi Radio");
}
if (numberOfInterfaces > 0) {
// 1st interface has no number, 2nd has '-1', 3rd has
// '-2' etc.
@@ -2714,12 +2722,17 @@ public class OvsdbDao {
captiveMap.put("redirect_url", captiveProfileDetails.getRedirectURL());
captiveMap.put("browser_title", captiveProfileDetails.getBrowserTitle());
captiveMap.put("splash_page_title", captiveProfileDetails.getHeaderContent());
// captiveMap.put("userAcceptancePolicy", captiveProfileDetails.getUserAcceptancePolicy());
// captiveMap.put("successPageMarkdownText", captiveProfileDetails.getSuccessPageMarkdownText());
// captiveMap.put("externalCaptivePortalURL", captiveProfileDetails.getExternalCaptivePortalURL());
// captiveMap.put("backgroundPosition", captiveProfileDetails.getBackgroundPosition().toString());
// captiveMap.put("backgroundRepeat", captiveProfileDetails.getBackgroundRepeat().toString());
// captiveMap.put("userAcceptancePolicy",
// captiveProfileDetails.getUserAcceptancePolicy());
// captiveMap.put("successPageMarkdownText",
// captiveProfileDetails.getSuccessPageMarkdownText());
// captiveMap.put("externalCaptivePortalURL",
// captiveProfileDetails.getExternalCaptivePortalURL());
// captiveMap.put("backgroundPosition",
// captiveProfileDetails.getBackgroundPosition().toString());
// captiveMap.put("backgroundRepeat",
// captiveProfileDetails.getBackgroundRepeat().toString());
walledGardenAllowlist.addAll(captiveProfileDetails.getWalledGardenAllowlist());
captiveMap.put("splash_page_logo",
@@ -3215,20 +3228,20 @@ public class OvsdbDao {
if (elementRadioConfig == null) {
continue; // don't have a radio of this kind in the map
}
RadioConfiguration radioConfig = apElementConfig.getAdvancedRadioMap().get(radioType);
ManagementRate managementRate = null;
RadioBestApSettings bestApSettings = null;
if (radioConfig != null) {
managementRate = radioConfig.getManagementRate();
bestApSettings = radioConfig.getBestApSettings();
managementRate = radioConfig.getManagementRate();
bestApSettings = radioConfig.getBestApSettings();
}
if (freqBand != null) {
try {
configureWifiRrm(ovsdbClient, freqBand, elementRadioConfig.getBackupChannelNumber(), elementRadioConfig.getRxCellSizeDb(),
elementRadioConfig.getProbeResponseThresholdDb(), elementRadioConfig.getClientDisconnectThresholdDb(),
managementRate, bestApSettings);
configureWifiRrm(ovsdbClient, freqBand, elementRadioConfig.getBackupChannelNumber(),
elementRadioConfig.getRxCellSizeDb(), elementRadioConfig.getProbeResponseThresholdDb(),
elementRadioConfig.getClientDisconnectThresholdDb(), managementRate, bestApSettings);
} catch (OvsdbClientException e) {
LOG.error("configureRrm failed with OvsdbClient exception.", e);
throw new RuntimeException(e);
@@ -3250,60 +3263,56 @@ public class OvsdbDao {
}
}
private void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel, AutoOrManualValue rxCellSize,
AutoOrManualValue probeResponseThreshold, AutoOrManualValue clientDisconnectThreshold, ManagementRate managementRate,
RadioBestApSettings bestApSettings)
private void configureWifiRrm(OvsdbClient ovsdbClient, String freqBand, int backupChannel,
AutoOrManualValue rxCellSize, AutoOrManualValue probeResponseThreshold,
AutoOrManualValue clientDisconnectThreshold, ManagementRate managementRate,
RadioBestApSettings bestApSettings)
throws OvsdbClientException, TimeoutException, ExecutionException, InterruptedException {
List<Operation> operations = new ArrayList<>();
Map<String, Value> updateColumns = new HashMap<>();
List<Operation> operations = new ArrayList<>();
Map<String, Value> updateColumns = new HashMap<>();
updateColumns.put("freq_band", new Atom<>(freqBand));
updateColumns.put("backup_channel", new Atom<>(backupChannel));
if (rxCellSize == null || rxCellSize.isAuto()) {
updateColumns.put("cell_size", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("cell_size", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("cell_size", new Atom<>(rxCellSize.getValue()));
}
if (probeResponseThreshold == null || probeResponseThreshold.isAuto()) {
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("probe_resp_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("probe_resp_threshold", new Atom<>(probeResponseThreshold.getValue()));
}
if (probeResponseThreshold == null || clientDisconnectThreshold.isAuto()) {
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("client_disconnect_threshold", new com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("client_disconnect_threshold", new Atom<>(clientDisconnectThreshold.getValue()));
}
if (managementRate == null || managementRate == ManagementRate.auto) {
updateColumns.put("basic_rate", new
com.vmware.ovsdb.protocol.operation.notation.Set());
} else {
updateColumns.put("basic_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());
updateColumns.put("basic_rate", 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());
} else {
updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage()));
}
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()));
}
updateColumns.put("basic_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());
} else {
updateColumns.put("snr_percentage_drop", new Atom<>(bestApSettings.getDropInSnrPercentage()));
}
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()));
}
}
Row row = new Row(updateColumns);
@@ -3318,7 +3327,7 @@ public class OvsdbDao {
LOG.debug("Op Result {}", res);
}
}
public void removeWifiRrm(OvsdbClient ovsdbClient) {
try {
List<Operation> operations = new ArrayList<>();