123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- from ciscoconfparse import CiscoConfParse
- from Flowdat.Gpon import Gpon
- from Flowdat.Nap import Nap
- from Flowdat.Onu import Onu
- class ModelOltBase:
- file_name = None
- conf_file_parse = None
- def __init__(self, file_name):
- """
- Constructor
- :param file_name: Contains path for file name
- """
- self.file_name = file
- self.conf_file_parse = CiscoConfParse(file_name)
- def get_gpons(self):
- """
- Get config for interface gpon-olt
- :return: None
- """
- all_intfs = self.conf_file_parse.find_objects("interface gpon-olt")
- i = 0
- gpons_arr = []
- for obj in all_intfs:
- gpon = Gpon()
- gpon.id = i
- i += 1
- gpon.name = obj.text.replace("interface ", "")
- gpon.child = []
- for objonu in obj.children:
- onu = Onu()
- onu.nap = Nap()
- onu.nap.name = gpon.name.replace("gpon-olt_", "")
- data_compare = objonu.text.lower().split()
- data = objonu.text.split()
- onu.name = objonu.text
- onu.import_data_list(data_compare, data)
- if onu.isValid():
- gpon.child.append(onu)
- gpons_arr.append(gpon)
- return gpons_arr
- def search_object(self, search):
- """
- Search objects
- :param search: String to search
- :return: Retorna object with IOSCfgLine
- """
- resps = self.conf_file_parse.find_objects(search)
- # la consulta puede devolver varios objectos, entonces busco el indicado
- for obj in resps:
- if obj.text == search:
- return obj
- return None
- def get_onus(self, olt):
- """
- Get all onus
- :param olt: Olt object
- :return: Return object with child
- """
- for obj_olt in olt.child:
- for obj_onu in obj_olt.child:
- # paso el nombre a minuscula
- search = obj_olt.name.lower()
- # reemplazo el valor olt por onu
- search = "interface " + search.replace("olt", "onu") + ":" + str(obj_onu.id)
- obj = self.search_object(search)
- if obj is not None and obj.text is not None:
- # recorro el objeto para obtener los datos
- for obj in obj.children:
- data_compare = obj.text.lower().strip()
- obj_onu.import_data(data_compare, obj)
- return olt
- def get_onus_duplicated(self, olt):
- """
- Obtain duplilcated onus
- :param olt: Olt object
- :return: Return string with duplicated onu
- """
- resp = ""
- onus = {}
- for obj_olt in olt.child:
- for obj_onu in obj_olt.child:
- if obj_onu.serial_number not in onus:
- onus[obj_onu.serial_number] = []
- onus[obj_onu.serial_number].append(obj_onu)
- for tmp in onus:
- if len(onus[tmp]) > 1:
- for o in onus[tmp]:
- resp = resp + "-- Serial number: " + o.serial_number + ", name: " + o.name
- if o.nap is not None:
- resp = resp + ", nap: " + o.nap.name
- resp = resp + "\n"
- return resp
- def process_file(self, olt):
- olt.child = self.get_gpons()
- self.get_onus(olt)
|