From 68037ecf8015bc011310c35aad9303e41894ec0e Mon Sep 17 00:00:00 2001 From: Mike Hansen Date: Tue, 23 Mar 2021 10:37:08 -0400 Subject: [PATCH] WIFI-1849: Gateway: Update status with additional manufacturing data --- .../OpensyncExternalIntegrationCloud.java | 109 ++++++++++++++---- .../integration/models/OpensyncAWLANNode.java | 44 ++++++- .../wlan/opensync/ovsdb/dao/OvsdbNode.java | 27 +++-- .../wlan/opensync/ovsdb/dao/OvsdbDaoTest.java | 2 +- 4 files changed, 143 insertions(+), 39 deletions(-) diff --git a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java index f23f1b4..05c5d9c 100644 --- a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java +++ b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java @@ -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, diff --git a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAWLANNode.java b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAWLANNode.java index e868d1e..2383d85 100644 --- a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAWLANNode.java +++ b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/models/OpensyncAWLANNode.java @@ -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 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")); diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNode.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNode.java index 6474796..fe58aae 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNode.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbNode.java @@ -170,12 +170,16 @@ public class OvsdbNode extends OvsdbDaoBase { DatabaseSchema dbSchema = ovsdbClient.getSchema(ovsdbName).get(); Set 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 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); diff --git a/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDaoTest.java b/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDaoTest.java index d046fef..1a2bb66 100644 --- a/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDaoTest.java +++ b/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDaoTest.java @@ -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"));