WIFI-1849: Gateway: Update status with additional manufacturing data

This commit is contained in:
Mike Hansen
2021-03-23 10:37:08 -04:00
parent 7eb9ea5039
commit 68037ecf80
4 changed files with 143 additions and 39 deletions

View File

@@ -573,6 +573,56 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
Status protocolStatus = statusServiceInterface.update(statusRecord);
LOG.debug("ProtocolStatus for AP {} updated to {}", ce.getName(), protocolStatus);
statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.EQUIPMENT_MANUFACTURER_DATA);
if (statusRecord == null) {
statusRecord = new Status();
statusRecord.setCustomerId(ce.getCustomerId());
statusRecord.setEquipmentId(ce.getId());
statusRecord.setStatusDataType(StatusDataType.EQUIPMENT_MANUFACTURER_DATA);
EquipmentManufacturerDataStatus statusData = new EquipmentManufacturerDataStatus();
statusRecord.setDetails(statusData);
}
EquipmentManufacturerQrCode qrCode = new EquipmentManufacturerQrCode();
if (connectNodeInfo.qrCode != null) {
if (connectNodeInfo.qrCode.get("DT") != null) {
qrCode.setDeviceType(EquipmentType.getByName(connectNodeInfo.qrCode.get("DT")));
}
if (connectNodeInfo.qrCode.get("VN") != null) {
qrCode.setVendorName(connectNodeInfo.qrCode.get("VN").toUpperCase());
}
if (connectNodeInfo.qrCode.get("DM") != null) {
qrCode.setDeviceMac(MacAddress.valueOf(connectNodeInfo.qrCode.get("DM")));
}
qrCode.setHwRevision(connectNodeInfo.qrCode.get("HW"));
qrCode.setModelName(connectNodeInfo.qrCode.get("MN"));
qrCode.setSerialNumber(connectNodeInfo.qrCode.get("SN"));
}
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setSkuNumber(connectNodeInfo.skuNumber);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setModel(connectNodeInfo.model);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setRevision(connectNodeInfo.revision);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setSerialNumber(connectNodeInfo.serialNumber);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setQrCode(qrCode);
if (connectNodeInfo.manufacturerName != null) {
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setEquipmentManufacturer(EquipmentManufacturer.getByName(connectNodeInfo.manufacturerName.toUpperCase()));
}
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setManufacturerDate(connectNodeInfo.manufacturerDate);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setManufacturerUrl(connectNodeInfo.manufacturerUrl);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setModelDescription(connectNodeInfo.modelDescription);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setReferenceDesign(connectNodeInfo.referenceDesign);
if (connectNodeInfo.certificationRegion != null && !connectNodeInfo.certificationRegion.equalsIgnoreCase("unknown")) {
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setCertificationRegion(
CountryCode.getByName(connectNodeInfo.certificationRegion.toUpperCase()));
}
if (connectNodeInfo.macAddress != null && !connectNodeInfo.macAddress.equalsIgnoreCase("unknown")) {
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setMacAddress(MacAddress.valueOf(connectNodeInfo.macAddress));
}
Status manufacturerStatus = statusServiceInterface.update(statusRecord);
LOG.debug("EQUIPMENT_MANUFACTURER_DATA for AP {} updated to {}", ce.getName(), manufacturerStatus);
statusRecord = statusServiceInterface.getOrNull(ce.getCustomerId(), ce.getId(), StatusDataType.FIRMWARE);
if (statusRecord == null) {
statusRecord = new Status();
@@ -1664,33 +1714,48 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra
private Status configureManufacturerDetailsStatus(OpensyncAWLANNode node, int customerId, long equipmentId) {
Status manufacturerData = null;
EquipmentManufacturerQrCode qrCode = null;
if (node.getQrCode() != null) {
qrCode = new EquipmentManufacturerQrCode(EquipmentType.getByName(node.getQrCode().get("DT").toUpperCase()),
MacAddress.valueOf(node.getQrCode().get("DM")), node.getQrCode().get("VN"), node.getQrCode().get("SN"), node.getQrCode().get("MN"),
node.getQrCode().get("HW"));
Status statusRecord = statusServiceInterface.getOrNull(customerId, equipmentId, StatusDataType.EQUIPMENT_MANUFACTURER_DATA);
if (statusRecord == null) {
statusRecord = new Status();
statusRecord.setCustomerId(customerId);
statusRecord.setEquipmentId(equipmentId);
statusRecord.setStatusDataType(StatusDataType.EQUIPMENT_MANUFACTURER_DATA);
EquipmentManufacturerDataStatus statusData = new EquipmentManufacturerDataStatus();
statusRecord.setDetails(statusData);
}
if (qrCode != null && node.getReferenceDesign() != null && node.getCertificationRegion() != null && node.getManufacturerDate() != null
&& node.getManufacturerName() != null && node.getManufacturerUrl() != null && node.getId() != null) {
EquipmentManufacturerDataStatus reportedDataStatus = new EquipmentManufacturerDataStatus(node.getSkuNumber(), node.getModel(), node.getRevision(),
node.getSerialNumber(), qrCode, EquipmentManufacturer.getByName(node.getManufacturerName()), node.getManufacturerDate(),
node.getManufacturerUrl(), node.getModelDescription(), node.getReferenceDesign(), CountryCode.getByName(node.getCertificationRegion()),
MacAddress.valueOf(node.getId()));
manufacturerData = new Status();
manufacturerData.setCustomerId(customerId);
manufacturerData.setDetails(reportedDataStatus);
manufacturerData.setEquipmentId(equipmentId);
manufacturerData.setStatusDataType(StatusDataType.EQUIPMENT_MANUFACTURER_DATA);
EquipmentManufacturerQrCode qrCode = new EquipmentManufacturerQrCode();
if (node.qrCode != null) {
qrCode.setDeviceType(EquipmentType.getByName(node.qrCode.get("DT")));
qrCode.setVendorName(node.qrCode.get("VN"));
qrCode.setDeviceMac(MacAddress.valueOf(node.qrCode.get("DM")));
qrCode.setHwRevision(node.qrCode.get("HW"));
qrCode.setModelName(node.qrCode.get("MN"));
qrCode.setSerialNumber(node.qrCode.get("SN"));
}
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setSkuNumber(node.skuNumber);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setModel(node.model);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setRevision(node.revision);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setSerialNumber(node.serialNumber);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setQrCode(qrCode);
if (node.manufacturerName != null && !node.manufacturerName.equalsIgnoreCase("unknown")) {
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setEquipmentManufacturer(EquipmentManufacturer.getByName(node.manufacturerName));
}
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setManufacturerDate(node.manufacturerDate);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setManufacturerUrl(node.manufacturerUrl);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setModelDescription(node.modelDescription);
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setReferenceDesign(node.referenceDesign);
if (node.certificationRegion != null && !node.certificationRegion.equalsIgnoreCase("unknown")) {
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setCertificationRegion(
CountryCode.getByName(node.certificationRegion.toUpperCase()));
}
if (node.getId() != null && !node.getId().equalsIgnoreCase("unknown")) {
((EquipmentManufacturerDataStatus) statusRecord.getDetails()).setMacAddress(MacAddress.valueOf(node.getId()));
}
return manufacturerData;
return statusRecord;
}
private Status configureProtocolStatus(OpensyncAWLANNode node, int customerId, long equipmentId, String reportedSwImageName,

View File

@@ -68,6 +68,38 @@ public class OpensyncAWLANNode extends OpensyncAPBase {
public OpensyncAWLANNode(Row row) {
this();
// mqtt_settings {"key":"string","max":"unlimited","min":0,"value":"string"}
// model {"key":"string","min":0}
// sku_number {"key":"string","min":0}
// version_matrix {"key":"string","max":"unlimited","min":0,"value":{"maxLength":128,"type":"string"}}
// model_description "string"
// certification_region "string"
// id "string"
// firmware_version "string"
// firmware_url {"key":{"maxLength":256,"type":"string"}}
// _uuid "uuid"
// upgrade_dl_timer "integer"
// reference_design "string"
// platform_version "string"
// firmware_pass {"key":{"maxLength":256,"type":"string"}}
// upgrade_timer "integer"
// redirector_addr "string"
// led_config {"key":"string","max":"unlimited","min":0,"value":"string"}
// max_backoff "integer"
// mqtt_headers {"key":"string","max":"unlimited","min":0,"value":"string"}
// serial_number {"key":"string","min":0}
// _version "uuid"
// upgrade_status "integer"
// device_mode {"key":{"enum":["set",["battery","cloud","custom","monitor"]],"type":"string"},"min":0}
// min_backoff "integer"
// manufacturer_date "string"
// mqtt_topics {"key":"string","max":"unlimited","min":0,"value":{"maxLength":128,"type":"string"}}
// revision "string"
// manufacturer_name "string"
// manufacturer_url "string"
// manager_addr "string"
// factory_reset {"key":"boolean","min":0}
Map<String, Value> map = row.getColumns();
if (map.get("mqtt_settings") != null) {
this.setMqttSettings(row.getMapColumn("mqtt_settings"));
@@ -88,25 +120,25 @@ public class OpensyncAWLANNode extends OpensyncAPBase {
this.setId(getSingleValueFromSet(row, "id"));
}
if (map.get("reference_design") != null) {
this.setReferenceDesign(getSingleValueFromSet(row, "reference_design"));
this.setReferenceDesign(row.getStringColumn("reference_design"));
}
if (map.get("qr_code") != null) {
this.setQrCode(row.getMapColumn("qr_code"));
}
if ((map.get("model_description") != null)) {
this.setModelDescription(getSingleValueFromSet(row, "model_description"));
this.setModelDescription(row.getStringColumn("model_description"));
}
if ((map.get("manufacturer_url") != null)) {
this.setManufacturerUrl(getSingleValueFromSet(row, "manufacturer_url"));
this.setManufacturerUrl(row.getStringColumn("manufacturer_url"));
}
if ((map.get("manufacturer_name") != null)) {
this.setManufacturerName(getSingleValueFromSet(row, "manufacturer_name"));
this.setManufacturerName(row.getStringColumn("manufacturer_name"));
}
if ((map.get("manufacturer_date") != null)) {
this.setManufacturerDate(getSingleValueFromSet(row, "manufacturer_date"));
this.setManufacturerDate(row.getStringColumn("manufacturer_date"));
}
if (map.get("certification_region") != null) {
this.setCertificationRegion(getSingleValueFromSet(row, "certification_region"));
this.setCertificationRegion(row.getStringColumn("certification_region"));
}
if (map.get("version_matrix") != null) {
this.setVersionMatrix(row.getMapColumn("version_matrix"));

View File

@@ -170,12 +170,16 @@ public class OvsdbNode extends OvsdbDaoBase {
DatabaseSchema dbSchema = ovsdbClient.getSchema(ovsdbName).get();
Set<String> keys = dbSchema.getTables().get(awlanNodeDbTable).getColumns().keySet();
if (keys.containsAll(Set.of("reference_design", "qr_code", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
if (keys.containsAll(Set.of("reference_design", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
"certification_region"))) {
columns.addAll(Set.of("reference_design", "qr_code", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
columns.addAll(Set.of("reference_design", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
"certification_region"));
}
if (keys.contains("qr_code")) {
columns.add("qr_code");
}
operations.add(new Select(awlanNodeDbTable, conditions, columns));
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
@@ -207,17 +211,20 @@ public class OvsdbNode extends OvsdbDaoBase {
ret.serialNumber = getSingleValueFromSet(row, "serial_number");
ret.model = getSingleValueFromSet(row, "model");
if (keys.containsAll(Set.of("reference_design", "qr_code", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
if (keys.containsAll(Set.of("reference_design", "model_description", "manufacturer_url", "manufacturer_name", "manufacturer_date",
"certification_region"))) {
ret.referenceDesign = getSingleValueFromSet(row, "reference_design");
ret.qrCode = row.getMapColumn("qr_code");
ret.modelDescription = getSingleValueFromSet(row, "model_description");
ret.manufacturerUrl = getSingleValueFromSet(row, "manufacturer_url");
ret.manufacturerName = getSingleValueFromSet(row, "manufacturer_name");
ret.manufacturerDate = getSingleValueFromSet(row, "manufacturer_date");
ret.certificationRegion = getSingleValueFromSet(row, "certification_region");
ret.referenceDesign = row.getStringColumn("reference_design");
ret.modelDescription = row.getStringColumn("model_description");
ret.manufacturerUrl = row.getStringColumn("manufacturer_url");
ret.manufacturerName = row.getStringColumn("manufacturer_name");
ret.manufacturerDate = row.getStringColumn("manufacturer_date");
ret.certificationRegion = row.getStringColumn("certification_region");
}
if (keys.contains("qr_code")) {
ret.qrCode = row.getMapColumn("qr_code");
}
// now populate macAddress, ipV4Address from Wifi_Inet_State
// first look them up for if_name = br-wan
fillInWanIpAddressAndMac(ovsdbClient, ret, defaultWanInterfaceType, defaultWanInterfaceName);

View File

@@ -217,7 +217,7 @@ public class OvsdbDaoTest {
apConfig.setEquipmentLocation(location);
ovsdbDao.getRadiusAccountingConfiguration(apConfig, ssidConfig, security);
assert (security.get("radius_acct_interval").equals("60"));
assert (security.get("radius_acct_interval").equals("0"));
assert (security.get("radius_acct_ip").equals("192.168.0.1"));
assert (security.get("radius_acct_port").equals("1813"));
assert (security.get("radius_acct_secret").equals("secret"));