Huawei.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. from ciscoconfparse import CiscoConfParse
  2. from Flowdat.Gpon import Gpon
  3. from Flowdat.Nap import Nap
  4. from Flowdat.Onu import Onu
  5. from Util import Strings
  6. class Huawei(object):
  7. file_name = None
  8. conf_file_parse = None
  9. def __init__(self, file_name):
  10. """
  11. Constructor
  12. :param file_name: Contains path for file name
  13. """
  14. self.file_name = file
  15. self.conf_file_parse = CiscoConfParse(file_name)
  16. def process_file(self, olt):
  17. olt.child = self.get_gpons()
  18. self.get_onus(olt)
  19. def search_object(self, search):
  20. """
  21. Search objects
  22. :param search: String to search
  23. :return: Retorna object with IOSCfgLine
  24. """
  25. resps = self.conf_file_parse.find_objects(search)
  26. # la consulta puede devolver varios objectos, entonces busco el indicado
  27. for obj in resps:
  28. if obj.text == search:
  29. return obj
  30. for obj in resps:
  31. if search in obj.text:
  32. return obj
  33. return None
  34. def get_gpons(self):
  35. """
  36. Get config for interface gpon-olt
  37. :return: None
  38. """
  39. all_intfs = self.conf_file_parse.find_objects("gpon-")
  40. i = 0
  41. gpons_arr = []
  42. for obj in all_intfs:
  43. gpon = Gpon()
  44. gpon.id = i
  45. i += 1
  46. gpon.name = obj.text
  47. gpon.child = []
  48. for idx, objonu in enumerate(obj.children, start=1):
  49. if "ont add" in objonu.text:
  50. onu_split = objonu.text.split()
  51. slot = gpon.name.split('-')[1].split('/')[1].replace('>','')
  52. link = onu_split[2]
  53. nap = Nap()
  54. nap.name = 'NAP/%(slot)s/%(link)s' % locals()
  55. nap.slot = slot
  56. nap.link = link
  57. onu = Onu()
  58. onu.nap = nap
  59. onu.name = objonu.text
  60. data_compare = objonu.text.lower().split()
  61. data = objonu.text.split()
  62. onu.import_data_list(data_compare, data, idx, 'Huawei')
  63. if onu.isValid():
  64. gpon.child.append(onu)
  65. gpons_arr.append(gpon)
  66. return gpons_arr
  67. def get_onus(self, olt):
  68. """
  69. Get all onus
  70. :param olt: Olt object
  71. :return: Return object with child
  72. """
  73. for obj_olt in olt.child:
  74. for obj_onu in obj_olt.child:
  75. # paso el nombre a minuscula
  76. search = obj_olt.name.lower()
  77. # reemplazo el valor olt por onu
  78. serial_number = obj_onu.serial_number
  79. search = "sn-auth %(serial_number)s " % locals()
  80. obj = self.search_object(search)
  81. if obj is not None and obj.text is not None:
  82. # recorro el objeto para obtener los datos
  83. data_compare = obj.text.lower().strip()
  84. obj_onu.import_data(data_compare, obj, 'Huawei')
  85. obj_onu.service_port = []
  86. if obj_onu.nap and obj_onu.nap.slot and obj_onu.nap.link:
  87. slot = obj_onu.nap.slot
  88. link = obj_onu.nap.link
  89. position = obj_onu.position
  90. service_ports = self.conf_file_parse.find_objects(" gpon 0/%(slot)s/%(link)s ont %(position)s " % locals())
  91. for service_port in service_ports:
  92. obj_onu.import_data(service_port.text.lower(), obj_onu, 'Huawei')
  93. return olt
  94. def get_onus_duplicated(self, olt):
  95. """
  96. Obtain duplilcated onus
  97. :param olt: Olt object
  98. :return: Return string with duplicated onu
  99. """
  100. resp = ""
  101. onus = {}
  102. for obj_olt in olt.child:
  103. for obj_onu in obj_olt.child:
  104. if obj_onu.serial_number not in onus:
  105. onus[obj_onu.serial_number] = []
  106. onus[obj_onu.serial_number].append(obj_onu)
  107. for tmp in onus:
  108. if len(onus[tmp]) > 1:
  109. for o in onus[tmp]:
  110. resp = resp + "-- Serial number: " + o.serial_number + ", name: " + o.name
  111. if o.nap is not None:
  112. resp = resp + ", nap: " + o.nap.name
  113. resp = resp + "\n"
  114. return resp
  115. def get_pon_onu_mng(self, olt):
  116. """
  117. Complete
  118. :param olt: Olt object
  119. :return: Return object with child
  120. """
  121. for obj_olt in olt.child:
  122. for obj_onu in obj_olt.child:
  123. # paso el nombre a minuscula
  124. search = obj_olt.name.lower()
  125. # reemplazo el valor olt por onu
  126. search = "pon-onu-mng " + search.replace("olt", "onu") + ":" + str(obj_onu.id)
  127. obj = self.search_object(search)
  128. if obj is not None and obj.text is not None:
  129. # recorro el objeto para obtener los datos
  130. for obj in obj.children:
  131. val = obj.text.lower().strip()
  132. index = Strings.index_value(val, "video")
  133. if index >= 0:
  134. obj_onu.catv = Catv()
  135. obj_onu.catv.name = obj.text
  136. return olt