diff options
Diffstat (limited to 'sdnr/wt/devicemanager-openroadm/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/openroadm/impl/OpenroadmNetworkElement.java')
-rw-r--r-- | sdnr/wt/devicemanager-openroadm/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/openroadm/impl/OpenroadmNetworkElement.java | 196 |
1 files changed, 102 insertions, 94 deletions
diff --git a/sdnr/wt/devicemanager-openroadm/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/openroadm/impl/OpenroadmNetworkElement.java b/sdnr/wt/devicemanager-openroadm/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/openroadm/impl/OpenroadmNetworkElement.java index bc82cd11d..7b45c3e42 100644 --- a/sdnr/wt/devicemanager-openroadm/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/openroadm/impl/OpenroadmNetworkElement.java +++ b/sdnr/wt/devicemanager-openroadm/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/openroadm/impl/OpenroadmNetworkElement.java @@ -26,13 +26,15 @@ import java.util.Collection; import java.util.Hashtable; import java.util.List; import java.util.Optional; + import org.eclipse.jdt.annotation.NonNull; import org.onap.ccsdk.features.sdnr.wt.common.YangHelper; -import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.DataProvider; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElement; -import org.onap.ccsdk.features.sdnr.wt.devicemanager.ne.service.NetworkElementService; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.NetconfTimeStamp; +import org.onap.ccsdk.features.sdnr.wt.dataprovider.model.types.NetconfTimeStampImpl; import org.onap.ccsdk.features.sdnr.wt.devicemanager.service.DeviceManagerServiceProvider; import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfAccessor; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfBindingAccessor; +import org.onap.ccsdk.features.sdnr.wt.netconfnodestateservice.NetconfNotifications; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev191129.OrgOpenroadmDevice; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev191129.circuit.packs.CircuitPacks; @@ -41,12 +43,14 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev191129.org.open import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev191129.shelf.Slots; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev191129.shelves.Shelves; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev191129.xponder.XpdrPort; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.NetworkElementDeviceType; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.EventlogBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.PmdataEntity; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.data.provider.rev201110.SourceType; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.NotificationListener; +import org.opendaylight.yangtools.yang.common.Uint32; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,13 +61,11 @@ import org.slf4j.LoggerFactory; * search db * **/ -public class OpenroadmNetworkElement implements NetworkElement { +public class OpenroadmNetworkElement extends OpenroadmNetworkElementBase { // variables - private final long equipmentLevel = 0; + private final long equipmentLevel = 1; private static final Logger log = LoggerFactory.getLogger(OpenroadmNetworkElement.class); - private final NetconfAccessor netconfAccessor; - private final DataProvider databaseService; private Hashtable<String, Long> circuitPacksRecord; private Hashtable<String, Long> shelfProvisionedcircuitPacks; private ListenerRegistration<NotificationListener> openRdmListenerRegistrationResult; @@ -76,35 +78,42 @@ public class OpenroadmNetworkElement implements NetworkElement { private PmDataBuilderOpenRoadm openRoadmPmData; private InitialDeviceAlarmReader initialAlarmReader; private List<PmdataEntity> pmDataEntity = new ArrayList<PmdataEntity>(); + private Optional<NetconfNotifications> notifications; + private static final NetconfTimeStamp ncTimeConverter = NetconfTimeStampImpl.getConverter(); + private int counter = 1; // end of variables // constructors - public OpenroadmNetworkElement(NetconfAccessor netconfAccess, DeviceManagerServiceProvider serviceProvider) { + public OpenroadmNetworkElement(NetconfBindingAccessor netconfAccess, DeviceManagerServiceProvider serviceProvider) { + + super(netconfAccess, serviceProvider); + + this.notifications = netconfAccess.getNotificationAccessor(); log.info("Create {}", OpenroadmNetworkElement.class.getSimpleName()); - this.netconfAccessor = netconfAccess; - this.databaseService = serviceProvider.getDataProvider(); this.openRdmListenerRegistrationResult = null; this.openRdmListener = new OpenroadmChangeNotificationListener(netconfAccessor, databaseService); this.opnRdmFaultListenerRegistrationResult = null; this.opnRdmFaultListener = new OpenroadmFaultNotificationListener(netconfAccessor, serviceProvider); this.opnRdmDeviceListenerRegistrationResult = null; this.opnRdmDeviceListener = new OpenroadmDeviceChangeNotificationListener(netconfAccessor, databaseService); - this.opnRdmInventoryInput = new OpenroadmInventoryInput(netconfAccess, readDevice(netconfAccess)); this.circuitPacksRecord = new Hashtable<String, Long>(); this.shelfProvisionedcircuitPacks = new Hashtable<String, Long>(); this.openRoadmPmData = new PmDataBuilderOpenRoadm(this.netconfAccessor); this.initialAlarmReader = new InitialDeviceAlarmReader(this.netconfAccessor, serviceProvider); log.info("NodeId {}", this.netconfAccessor.getNodeId().getValue()); - log.info("oScaMapper details{}", this.opnRdmInventoryInput.getClass().getName()); + } // end of constructors // public methods public void initialReadFromNetworkElement() { + OrgOpenroadmDevice device = readDevice(this.netconfAccessor); - databaseService.writeInventory(this.opnRdmInventoryInput.getInventoryData(equipmentLevel)); + this.opnRdmInventoryInput = new OpenroadmInventoryInput(this.netconfAccessor, device); + log.info("oScaMapper details{}", this.opnRdmInventoryInput.getClass().getName()); + databaseService.writeInventory(this.opnRdmInventoryInput.getInventoryData(Uint32.valueOf(equipmentLevel))); readShelvesData(device); readXpndrData(device); @@ -122,13 +131,8 @@ public class OpenroadmNetworkElement implements NetworkElement { } else { log.info("PmDatEntity is empty"); } - } - @Override - public NetworkElementDeviceType getDeviceType() { - return NetworkElementDeviceType.OROADM; - } @Override public void register() { @@ -140,8 +144,7 @@ public class OpenroadmNetworkElement implements NetworkElement { this.opnRdmDeviceListenerRegistrationResult = netconfAccessor.doRegisterNotificationListener(opnRdmDeviceListener); // Register netconf stream - netconfAccessor.registerNotificationsStream(NetconfAccessor.DefaultNotificationsStream); - + notifications.get().registerNotificationsStream(NetconfAccessor.DefaultNotificationsStream); } @Override @@ -157,23 +160,6 @@ public class OpenroadmNetworkElement implements NetworkElement { } } - @Override - public NodeId getNodeId() { - return netconfAccessor.getNodeId(); - } - - @Override - public <L extends NetworkElementService> Optional<L> getService(Class<L> clazz) { - return Optional.empty(); - } - - @Override - public void warmstart() {} - - @Override - public Optional<NetconfAccessor> getAcessor() { - return Optional.of(netconfAccessor); - } // end of public methods // private methods @@ -187,12 +173,12 @@ public class OpenroadmNetworkElement implements NetworkElement { shelf.getShelfName(), shelf.getSerialId(), shelf.getProductCode(), shelf.getShelfPosition(), shelf.getEquipmentState(), shelf.getHardwareVersion(), shelf.getShelfType(), shelf.getVendor(), shelf.getLifecycleState()); - databaseService - .writeInventory(this.opnRdmInventoryInput.getShelvesInventory(shelf, equipmentLevel + 1)); + databaseService.writeInventory( + this.opnRdmInventoryInput.getShelvesInventory(shelf, Uint32.valueOf(equipmentLevel + 1))); Collection<Slots> slotList = YangHelper.getCollection(shelf.getSlots()); if (slotList != null) { for (Slots slot : slotList) { - if (!slot.getProvisionedCircuitPack().isEmpty()) { + if (slot.getProvisionedCircuitPack() != null) { this.shelfProvisionedcircuitPacks.put(slot.getProvisionedCircuitPack(), equipmentLevel + 2); } log.info("Slots for the shelf: {}", shelf.getShelfName()); @@ -200,87 +186,106 @@ public class OpenroadmNetworkElement implements NetworkElement { slot.getSlotStatus(), slot.getLabel()); } } - log.info("size of shelfProvisionedcircuitPacks: {} ", shelfProvisionedcircuitPacks.size()); - } - + log.info("size of shelfProvisionedcircuitPacks: {} ", shelfProvisionedcircuitPacks.size()); } + } private void readXpndrData(OrgOpenroadmDevice device) { Collection<Xponder> xponderList = YangHelper.getCollection(device.getXponder()); + if (xponderList != null) { for (Xponder xponder : xponderList) { - databaseService - .writeInventory(this.opnRdmInventoryInput.getXponderInventory(xponder, equipmentLevel + 1)); + + databaseService.writeInventory( + this.opnRdmInventoryInput.getXponderInventory(xponder, Uint32.valueOf(equipmentLevel + 1))); log.info("Xponders: No.: {} , \n Port: {} ,\n Type: {}", xponder.getXpdrNumber(), xponder.getXpdrPort(), xponder.getXpdrType()); Collection<XpdrPort> xpdrportlist = YangHelper.getCollection(xponder.getXpdrPort()); if (xpdrportlist != null) { for (XpdrPort xpdrport : xpdrportlist) - if (!xpdrport.getCircuitPackName().isEmpty()) { + if (xpdrport.getCircuitPackName() != null) { this.shelfProvisionedcircuitPacks.put(xpdrport.getCircuitPackName(), equipmentLevel + 2); log.info("Size of dict{}", this.shelfProvisionedcircuitPacks.size()); } - - } - } + } } } private void readCircuitPacketData(OrgOpenroadmDevice device) { Collection<CircuitPacks> circuitpacklist = YangHelper.getCollection(device.getCircuitPacks()); + List<String> cpNames = new ArrayList<String>(); if (circuitpacklist != null) { for (CircuitPacks cp : circuitpacklist) { + cpNames.add(cp.getCircuitPackName()); + log.info("CP Name:{}", cp.getCircuitPackName()); - if (!this.shelfProvisionedcircuitPacks.isEmpty() - && this.shelfProvisionedcircuitPacks.containsKey(cp.getCircuitPackName())) { - this.circuitPacksRecord.put(cp.getCircuitPackName(), (equipmentLevel + 2)); - databaseService.writeInventory(this.opnRdmInventoryInput.getCircuitPackInventory(cp, - this.shelfProvisionedcircuitPacks.get(cp.getCircuitPackName()))); - log.info("shelf has circuit pack"); + if (cp.getParentCircuitPack() == null + && !this.shelfProvisionedcircuitPacks.containsKey(cp.getCircuitPackName())) { + log.info("cp has no parent and no shelf"); + this.circuitPacksRecord.put(cp.getCircuitPackName(), (equipmentLevel + 1)); + databaseService.writeInventory( + this.opnRdmInventoryInput.getCircuitPackInventory(cp, Uint32.valueOf(equipmentLevel + 1))); } else { - if (cp.getParentCircuitPack() == null) { - this.circuitPacksRecord.put(cp.getCircuitPackName(), (equipmentLevel + 1)); - databaseService.writeInventory( - this.opnRdmInventoryInput.getCircuitPackInventory(cp, equipmentLevel + 1)); - log.info("Cp has no parent circuit pack and no shelf"); - + // check for missing valid parent circuit name + if (cp.getParentCircuitPack().getCpSlotName() != null + && cp.getParentCircuitPack().getCircuitPackName() == null) { + + log.info("Cp {} has slotname of the parent circuit pack but no parent circuit pack name", + cp.getCircuitPackName()); + this.circuitPacksRecord.put(cp.getCircuitPackName(), (equipmentLevel + 3)); + databaseService.writeInventory(this.opnRdmInventoryInput.getCircuitPackInventory(cp, + Uint32.valueOf(equipmentLevel + 3))); + databaseService.writeEventLog(writeIncorrectParentLog(cp.getCircuitPackName(), counter) + .setObjectId(device.getInfo().getNodeId().getValue()) + .setId(cp.getParentCircuitPack().getCpSlotName()) + .setNewValue("Missing parent circuit pack name").build()); + } else if (cp.getParentCircuitPack().getCircuitPackName() != null + && this.shelfProvisionedcircuitPacks + .containsKey(cp.getParentCircuitPack().getCircuitPackName())) { + log.info("Cp {} has parent circuit pack and shelf", cp.getCircuitPackName()); + this.circuitPacksRecord.put(cp.getCircuitPackName(), (equipmentLevel + 3)); + databaseService.writeInventory(this.opnRdmInventoryInput.getCircuitPackInventory(cp, + Uint32.valueOf(equipmentLevel + 3))); } else { - if (this.shelfProvisionedcircuitPacks - .containsKey(cp.getParentCircuitPack().getCircuitPackName())) { - this.circuitPacksRecord.put(cp.getCircuitPackName(), (equipmentLevel + 3)); - databaseService.writeInventory( - this.opnRdmInventoryInput.getCircuitPackInventory(cp, equipmentLevel + 3)); - log.info("Cp {} has parent circuit pack and shelf", cp.getCircuitPackName()); - } else { - this.circuitPacksRecord.put(cp.getCircuitPackName(), (equipmentLevel + 2)); - databaseService.writeInventory( - this.opnRdmInventoryInput.getCircuitPackInventory(cp, equipmentLevel + 2)); - log.info("Cp {} has parent circuit pack but no shelf", cp.getCircuitPackName()); - + // check for incorrect hierarchy + if (cp.getParentCircuitPack().getCircuitPackName() != null + && !cpNames.contains(cp.getParentCircuitPack().getCircuitPackName())) { + databaseService.writeEventLog(writeIncorrectParentLog(cp.getCircuitPackName(), counter) + .setObjectId(device.getInfo().getNodeId().getValue()) + .setId(cp.getParentCircuitPack().getCpSlotName()).build()); } - - + log.info("Cp has parent circuit pack but no shelf or a shelf but no parent circuit pack"); + this.circuitPacksRecord.put(cp.getCircuitPackName(), (equipmentLevel + 2)); + databaseService.writeInventory(this.opnRdmInventoryInput.getCircuitPackInventory(cp, + Uint32.valueOf(equipmentLevel + 2))); } - } - + } } - } + // for (String s : cpParentNames) { + // log.info("Parent cps {}:", s); + // + // if (!cpNames.contains(s)) { + // log.info("Invalid Hierarchy detected for {}", s); + // databaseService.writeEventLog(writeIncorrectParentLog(s, counter) + // .setObjectId(device.getInfo().getNodeId().getValue()).setId(s).build()); + // } + // } + } } private void readInterfaceData(OrgOpenroadmDevice device) { Collection<Interface> interfaceList = YangHelper.getCollection(device.getInterface()); if (interfaceList != null) { for (Interface deviceInterface : interfaceList) { - log.info("\n InterfaceName: {}", deviceInterface.getName()); log.info("Supporting CP {}", this.circuitPacksRecord.size()); for (String s : this.circuitPacksRecord.keySet()) { @@ -288,35 +293,38 @@ public class OpenroadmNetworkElement implements NetworkElement { } log.info("Interface {} and their supporting CP {}", deviceInterface.getName(), deviceInterface.getSupportingCircuitPackName()); - - if (deviceInterface.getSupportingCircuitPackName() != null) { if (this.circuitPacksRecord.containsKey(deviceInterface.getSupportingCircuitPackName())) { databaseService.writeInventory(this.opnRdmInventoryInput.getInterfacesInventory(deviceInterface, - this.circuitPacksRecord.get(deviceInterface.getSupportingCircuitPackName()) + 1)); + Uint32.valueOf( + this.circuitPacksRecord.get(deviceInterface.getSupportingCircuitPackName()) + + 1))); } - } else { - databaseService.writeInventory( - this.opnRdmInventoryInput.getInterfacesInventory(deviceInterface, equipmentLevel + 1)); + databaseService.writeInventory(this.opnRdmInventoryInput.getInterfacesInventory(deviceInterface, + Uint32.valueOf(equipmentLevel + 1))); } } } - } - private OrgOpenroadmDevice readDevice(NetconfAccessor accessor) { - + private OrgOpenroadmDevice readDevice(NetconfBindingAccessor accessor) { final Class<OrgOpenroadmDevice> openRoadmDev = OrgOpenroadmDevice.class; InstanceIdentifier<OrgOpenroadmDevice> deviceId = InstanceIdentifier.builder(openRoadmDev).build(); - OrgOpenroadmDevice device = accessor.getTransactionUtils().readData(accessor.getDataBroker(), LogicalDatastoreType.OPERATIONAL, deviceId); - return device; - } - // end of private methods + private EventlogBuilder writeIncorrectParentLog(String attributeName, Integer counter) { + EventlogBuilder eventlogBuilder = new EventlogBuilder(); + eventlogBuilder.setAttributeName(attributeName).setCounter(counter) + .setNodeId(this.netconfAccessor.getNodeId().getValue()).setSourceType(SourceType.Netconf) + .setNewValue("Invalid parent circuit-pack name") + .setTimestamp(new DateAndTime(ncTimeConverter.getTimeStamp())); + return eventlogBuilder; + + } + // end of private methods } |