Support for Metrics Profile

Added to OpensyncAPConfig
Added Profiles for Static.
Added handler in OvsdbClient to process.
Currently not applying the values, uses the defaults still, but
remaining functionality will come in subsequent updates.
This commit is contained in:
Mike Hansen
2020-09-25 17:13:51 -04:00
parent 3d9b01c147
commit bb3a49addb
12 changed files with 236 additions and 9 deletions

View File

@@ -765,6 +765,8 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
ret.setSsidProfile(
profileContainer.getChildrenOfType(equipmentConfig.getProfileId(), ProfileType.ssid));
ret.setMetricsProfiles(profileContainer.getChildrenOfType(equipmentConfig.getProfileId(), ProfileType.metrics));
Set<Profile> radiusSet = new HashSet<>();
Set<Long> captiveProfileIds = new HashSet<>();
Set<Long> bonjourGatewayProfileIds = new HashSet<>();

View File

@@ -31,6 +31,7 @@ public class OpensyncAPConfig extends BaseJsonModel {
private Profile apProfile;
private Profile rfProfile;
private List<Profile> ssidProfile;
private List<Profile> metricsProfile;
private List<Profile> radiusProfiles;
private Location equipmentLocation;
private EquipmentRoutingRecord equipmentRouting;
@@ -195,6 +196,13 @@ public class OpensyncAPConfig extends BaseJsonModel {
}
ret.ssidProfile = ssidList;
}
if (metricsProfile != null) {
List<Profile> metricsList = new ArrayList<Profile>();
for (Profile profile : metricsProfile) {
metricsList.add(profile.clone());
}
ret.metricsProfile = metricsList;
}
if (bonjourGatewayProfiles != null) {
List<Profile> bonjourGatewayProfilesList = new ArrayList<Profile>();
for (Profile profile : bonjourGatewayProfiles) {
@@ -255,4 +263,12 @@ public class OpensyncAPConfig extends BaseJsonModel {
public void setBlockedClients(List<MacAddress> blockedClients) {
this.blockedClients = blockedClients;
}
public void setMetricsProfiles(List<Profile> metricsProfileList) {
metricsProfile = metricsProfileList;
}
public List<Profile> getMetricsProfiles() {
return metricsProfile;
}
}

View File

@@ -45,6 +45,9 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
@Value("${tip.wlan.ovsdb.ssidProfileFileName:/app/config/ProfileSsid.json}")
private String ssidProfileFileName;
@Value("${tip.wlan.ovsdb.ssidProfileFileName:/app/config/ProfileMetrics.json}")
private String metricsProfileFileName;
@Value("${tip.wlan.ovsdb.radiusProfileFileName:/app/config/ProfileRadius.json}")
private String radiusProfileFileName;
@@ -100,6 +103,9 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
ssidProfiles.stream().forEach(p -> apProfile.getChildProfileIds().add(p.getId()));
List<com.telecominfraproject.wlan.profile.models.Profile> metricsProfiles = com.telecominfraproject.wlan.profile.models.Profile
.listFromFile(metricsProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
List<com.telecominfraproject.wlan.profile.models.Profile> radiusProfiles = com.telecominfraproject.wlan.profile.models.Profile
.listFromFile(radiusProfileFileName, com.telecominfraproject.wlan.profile.models.Profile.class);
@@ -132,6 +138,7 @@ public class OpensyncExternalIntegrationSimple implements OpensyncExternalIntegr
ret.setCustomerEquipment(equipment);
ret.setApProfile(apProfile);
ret.setRfProfile(rfProfile);
ret.setMetricsProfiles(metricsProfiles);
ret.setSsidProfile(ssidProfiles);
ret.setRadiusProfiles(radiusProfiles);
ret.setEquipmentLocation(location);

View File

@@ -0,0 +1,53 @@
[
{
"model_type": "Profile",
"id": 222,
"customerId": 2,
"profileType": "metrics",
"name": "Metrics-Profile-3-radios",
"details": {
"model_type": "ServiceMetricsCollectionConfigProfile",
"radioTypeList": [
"is2dot4GHz",
"is5GHzL",
"is5GHzU"
],
"metricConfigParameterMap": {
"Neighbour": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Neighbour",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"ApSsid": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "ApSsid",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"Channel": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Channel",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"ApNode": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "ApNode",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"Client": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Client",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
}
},
"profileType": "metrics"
},
"createdTimestamp": 1601066846980,
"lastModifiedTimestamp": 1601066846980,
"childProfileIds": []
}
]

View File

@@ -201,6 +201,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
},
"is5GHzU": {
@@ -241,6 +242,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
},
"is5GHzL": {
@@ -281,6 +283,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
}
}

View File

@@ -0,0 +1,53 @@
[
{
"model_type": "Profile",
"id": 222,
"customerId": 2,
"profileType": "metrics",
"name": "Metrics-Profile-3-radios",
"details": {
"model_type": "ServiceMetricsCollectionConfigProfile",
"radioTypeList": [
"is2dot4GHz",
"is5GHzL",
"is5GHzU"
],
"metricConfigParameterMap": {
"Neighbour": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Neighbour",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"ApSsid": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "ApSsid",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"Channel": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Channel",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"ApNode": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "ApNode",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"Client": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Client",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
}
},
"profileType": "metrics"
},
"createdTimestamp": 1601066846980,
"lastModifiedTimestamp": 1601066846980,
"childProfileIds": []
}
]

View File

@@ -201,6 +201,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
},
"is5GHzU": {
@@ -241,6 +242,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
},
"is5GHzL": {
@@ -281,6 +283,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
}
}

View File

@@ -0,0 +1,53 @@
[
{
"model_type": "Profile",
"id": 222,
"customerId": 2,
"profileType": "metrics",
"name": "Metrics-Profile-3-radios",
"details": {
"model_type": "ServiceMetricsCollectionConfigProfile",
"radioTypeList": [
"is2dot4GHz",
"is5GHzL",
"is5GHzU"
],
"metricConfigParameterMap": {
"Neighbour": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Neighbour",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"ApSsid": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "ApSsid",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"Channel": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Channel",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"ApNode": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "ApNode",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
},
"Client": {
"model_type": "ServiceMetricConfigParameters",
"serviceMetricDataType": "Client",
"samplingInterval": 30,
"reportingIntervalSeconds": 60
}
},
"profileType": "metrics"
},
"createdTimestamp": 1601066846980,
"lastModifiedTimestamp": 1601066846980,
"childProfileIds": []
}
]

View File

@@ -201,6 +201,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
},
"is5GHzU": {
@@ -241,6 +242,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
},
"is5GHzL": {
@@ -281,6 +283,7 @@
"forceScanDuringVoice": "disabled",
"legacyBSSRate": "enabled",
"beaconInterval": 100,
"dtimPeriod": 2,
"deauthAttackDetection": null
}
}

View File

@@ -208,7 +208,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
}
ovsdbDao.removeAllStatsConfigs(ovsdbClient); // always
ovsdbDao.configureStats(ovsdbClient);
ovsdbDao.configureStatsFromProfile(ovsdbClient, opensyncAPConfig);
// Check if device stats is configured in Wifi_Stats_Config table,
// provision it
@@ -273,7 +273,7 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
ovsdbDao.configureInterfaces(ovsdbClient);
ovsdbDao.configureSsids(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureWifiRrm(ovsdbClient, opensyncAPConfig);
ovsdbDao.configureStats(ovsdbClient);
ovsdbDao.configureStatsFromProfile(ovsdbClient,opensyncAPConfig);
// Check if device stats is configured in Wifi_Stats_Config table,
// provision it

View File

@@ -60,6 +60,8 @@ import com.telecominfraproject.wlan.profile.bonjour.models.BonjourServiceSet;
import com.telecominfraproject.wlan.profile.captiveportal.models.CaptivePortalAuthenticationType;
import com.telecominfraproject.wlan.profile.captiveportal.models.CaptivePortalConfiguration;
import com.telecominfraproject.wlan.profile.captiveportal.models.ManagedFileInfo;
import com.telecominfraproject.wlan.profile.metrics.ServiceMetricConfigParameters;
import com.telecominfraproject.wlan.profile.metrics.ServiceMetricsCollectionConfigProfile;
import com.telecominfraproject.wlan.profile.models.Profile;
import com.telecominfraproject.wlan.profile.radius.models.RadiusProfile;
import com.telecominfraproject.wlan.profile.radius.models.RadiusServer;
@@ -2383,8 +2385,8 @@ public class OvsdbDao {
int keyRefresh, boolean uapsdEnabled, boolean apBridge, NetworkForwardMode networkForwardMode,
String gateway, String inet, Map<String, String> dns, String ipAssignScheme, List<MacAddress> macBlockList,
boolean rateLimitEnable, int ssidDlLimit, int ssidUlLimit, int clientDlLimit, int clientUlLimit,
int rtsCtsThreshold, int fragThresholdBytes, int dtimPeriod, Map<String, String> captiveMap, List<String> walledGardenAllowlist,
Map<Short, Set<String>> bonjourServiceMap) {
int rtsCtsThreshold, int fragThresholdBytes, int dtimPeriod, Map<String, String> captiveMap,
List<String> walledGardenAllowlist, Map<Short, Set<String>> bonjourServiceMap) {
List<Operation> operations = new ArrayList<>();
Map<String, Value> updateColumns = new HashMap<>();
@@ -2903,8 +2905,8 @@ public class OvsdbDao {
ssidConfig.getVlanId(), rrmEnabled, enable80211r, mobilityDomain, enable80211v,
enable80211k, minHwMode, enabled, keyRefresh, uapsdEnabled, apBridge,
ssidConfig.getForwardMode(), gateway, inet, dns, ipAssignScheme, macBlockList,
rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit, clientUlLimit, rtsCtsThreshold,fragThresholdBytes,dtimPeriod,
captiveMap, walledGardenAllowlist, bonjourServiceMap);
rateLimitEnable, ssidDlLimit, ssidUlLimit, clientDlLimit, clientUlLimit, rtsCtsThreshold,
fragThresholdBytes, dtimPeriod, captiveMap, walledGardenAllowlist, bonjourServiceMap);
} catch (IllegalStateException e) {
// could not provision this SSID, but still can go on
@@ -3228,6 +3230,38 @@ public class OvsdbDao {
}
public void configureStatsFromProfile(OvsdbClient ovsdbClient, OpensyncAPConfig opensyncApConfig) {
if (opensyncApConfig.getMetricsProfiles().isEmpty()) {
configureStats(ovsdbClient);
} else {
for (Profile metricsProfile : opensyncApConfig.getMetricsProfiles()) {
ServiceMetricsCollectionConfigProfile details = ((ServiceMetricsCollectionConfigProfile) metricsProfile
.getDetails());
for (Entry<String, ServiceMetricConfigParameters> entry : details.getMetricConfigParameterMap()
.entrySet()) {
//TODO: implement me
LOG.debug("Metrics Config Map Entry {}", entry);
configureStats(ovsdbClient); // replace with profile values
}
}
}
}
public void configureStats(OvsdbClient ovsdbClient) {
try {

View File

@@ -130,7 +130,7 @@ public class OpensyncGatewayTipWlanOvsdbClientTest {
Mockito.verify(ovsdbDao).removeAllStatsConfigs(ovsdbClient);
Mockito.verify(ovsdbDao).configureWifiRadios(ovsdbClient, apConfig);
Mockito.verify(ovsdbDao).configureSsids(ovsdbClient, apConfig);
Mockito.verify(ovsdbDao).configureStats(ovsdbClient);
Mockito.verify(ovsdbDao).configureStatsFromProfile(ovsdbClient, apConfig);
}