123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- from ciscoconfparse import CiscoConfParse
- from Flowdat.Gpon import Gpon
- from Flowdat.Nap import Nap
- from Flowdat.Onu import Onu
- from Util import Strings
- class Huawei(object):
- 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 process_file(self, olt):
- olt.child = self.get_gpons()
- self.get_onus(olt)
-
- 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
- for obj in resps:
- if search in obj.text:
- return obj
- return None
- def get_gpons(self):
- """
- Get config for interface gpon-olt
- :return: None
- """
- all_intfs = self.conf_file_parse.find_objects("gpon-")
- i = 0
- gpons_arr = []
- for obj in all_intfs:
- gpon = Gpon()
- gpon.id = i
- i += 1
- gpon.name = obj.text
- gpon.child = []
- for idx, objonu in enumerate(obj.children, start=1):
- if "ont add" in objonu.text:
- onu_split = objonu.text.split()
-
- slot = gpon.name.split('-')[1].split('/')[1].replace('>','')
- link = onu_split[2]
- nap = Nap()
- nap.name = 'NAP/%(slot)s/%(link)s' % locals()
- nap.slot = slot
- nap.link = link
-
- onu = Onu()
- onu.nap = nap
- onu.name = objonu.text
-
- data_compare = objonu.text.lower().split()
- data = objonu.text.split()
- onu.import_data_list(data_compare, data, idx, 'Huawei')
- if onu.isValid():
- gpon.child.append(onu)
- gpons_arr.append(gpon)
- return gpons_arr
- 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
- serial_number = obj_onu.serial_number
- search = "sn-auth %(serial_number)s " % locals()
- obj = self.search_object(search)
- if obj is not None and obj.text is not None:
- # recorro el objeto para obtener los datos
- data_compare = obj.text.lower().strip()
- obj_onu.import_data(data_compare, obj, 'Huawei')
-
- obj_onu.service_port = []
- if obj_onu.nap and obj_onu.nap.slot and obj_onu.nap.link:
- slot = obj_onu.nap.slot
- link = obj_onu.nap.link
- position = obj_onu.position
- service_ports = self.conf_file_parse.find_objects(" gpon 0/%(slot)s/%(link)s ont %(position)s " % locals())
- for service_port in service_ports:
- obj_onu.import_data(service_port.text.lower(), obj_onu, 'Huawei')
- 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 get_pon_onu_mng(self, olt):
- """
- Complete
- :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 = "pon-onu-mng " + 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:
- val = obj.text.lower().strip()
- index = Strings.index_value(val, "video")
- if index >= 0:
- obj_onu.catv = Catv()
- obj_onu.catv.name = obj.text
- return olt
|