Skip to content
Snippets Groups Projects

Resolve "(TID) Add inventory NBI to WebUI"

Merged Pablo Armingol requested to merge feat/173-tid-add-inventory-nbi-to-webui into develop
2 files
+ 5
23
Compare changes
  • Side-by-side
  • Inline
Files
2
@@ -46,60 +46,45 @@ class YangHandler:
dnode.free()
return message
@staticmethod
def convert_to_iso_date(date_str: str) -> Optional[str]:
date_str = date_str.strip('"')
# Define the regex pattern for ISO 8601 date format
pattern = r"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[\+\-]\d{2}:\d{2})"
# Check if the input date string matches the pattern
if re.match(pattern, date_str):
return date_str # Already in ISO format
return date_str
else:
try:
# Parse the input date string as a datetime object
datetime_obj = datetime.datetime.strptime(date_str, "%Y-%m-%d")
# Convert to ISO format
iso_date = datetime_obj.isoformat() + "Z"
return iso_date
except ValueError:
return None # Invalid date format
return None
def compose(self, device : Device) -> Dict:
hardware = self._yang_context.create_data_path('/ietf-network-hardware-inventory:network-hardware-inventory')
network_elements = hardware.create_path('network-elements')
network_element = network_elements.create_path('network-element[uuid="{:s}"]'.format(device.device_id.device_uuid.uuid))
network_element.create_path('uuid', device.device_id.device_uuid.uuid)
network_element.create_path('name', device.name)
components = network_element.create_path('components')
physical_index = 1
for component in device.components:
attributes = component.attributes
component_new = components.create_path('component[uuid="{:s}"]'.format(component.component_uuid.uuid))
component_new.create_path('name', component.name)
#Cambiar las clases especiales, su formato y añadir isfru
component_type = component.type
if component_type == "TRANSCEIVER" :
component_type = "module"
if component_type == "FRU" :
component_type = "slack"
component_type = component_type.replace("_", "-").lower()
component_type = 'iana-hardware:' + component_type
component_new.create_path('class', component_type)
#Añadir resto de atributos en IETF
physical_index += 1
component_new.create_path('description', attributes["description"].replace('/"',""))
if "CHASSIS" not in component.type:
parent_component_references = component_new.create_path('parent-component-references')
parent = parent_component_references.create_path('component-reference[index="{:d}"]'.format(physical_index))
@@ -107,7 +92,6 @@ class YangHandler:
if component.parent == component_parent.name :
parent.create_path('uuid', component_parent.component_uuid.uuid)
break
if attributes["mfg-date"] != "":
mfg_date = self.convert_to_iso_date(attributes["mfg-date"])
component_new.create_path('mfg-date', mfg_date)
@@ -137,7 +121,6 @@ class YangHandler:
component_new.create_path('uri', component.name)
component_new.create_path('uuid', component.component_uuid.uuid)
for child in device.components:
if component.name == child.parent :
component_new.create_path('contained-child', child.component_uuid.uuid)
Loading