ModelOltBase.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. from ciscoconfparse import CiscoConfParse
  2. from Flowdat.Gpon import Gpon
  3. from Flowdat.Nap import Nap
  4. from Flowdat.Onu import Onu
  5. class ModelOltBase:
  6. file_name = None
  7. conf_file_parse = None
  8. def __init__(self, file_name):
  9. """
  10. Constructor
  11. :param file_name: Contains path for file name
  12. """
  13. self.file_name = file
  14. self.conf_file_parse = CiscoConfParse(file_name)
  15. def get_gpons(self):
  16. """
  17. Get config for interface gpon-olt
  18. :return: None
  19. """
  20. all_intfs = self.conf_file_parse.find_objects("interface gpon-olt")
  21. i = 0
  22. gpons_arr = []
  23. for obj in all_intfs:
  24. gpon = Gpon()
  25. gpon.id = i
  26. i += 1
  27. gpon.name = obj.text.replace("interface ", "")
  28. gpon.child = []
  29. for objonu in obj.children:
  30. onu = Onu()
  31. onu.nap = Nap()
  32. onu.nap.name = gpon.name.replace("gpon-olt_", "")
  33. data_compare = objonu.text.lower().split()
  34. data = objonu.text.split()
  35. onu.name = objonu.text
  36. onu.import_data_list(data_compare, data)
  37. if onu.isValid():
  38. gpon.child.append(onu)
  39. gpons_arr.append(gpon)
  40. return gpons_arr
  41. def search_object(self, search):
  42. """
  43. Search objects
  44. :param search: String to search
  45. :return: Retorna object with IOSCfgLine
  46. """
  47. resps = self.conf_file_parse.find_objects(search)
  48. # la consulta puede devolver varios objectos, entonces busco el indicado
  49. for obj in resps:
  50. if obj.text == search:
  51. return obj
  52. return None
  53. def get_onus(self, olt):
  54. """
  55. Get all onus
  56. :param olt: Olt object
  57. :return: Return object with child
  58. """
  59. for obj_olt in olt.child:
  60. for obj_onu in obj_olt.child:
  61. # paso el nombre a minuscula
  62. search = obj_olt.name.lower()
  63. # reemplazo el valor olt por onu
  64. search = "interface " + search.replace("olt", "onu") + ":" + str(obj_onu.id)
  65. obj = self.search_object(search)
  66. if obj is not None and obj.text is not None:
  67. # recorro el objeto para obtener los datos
  68. for obj in obj.children:
  69. data_compare = obj.text.lower().strip()
  70. obj_onu.import_data(data_compare, obj)
  71. return olt
  72. def get_onus_duplicated(self, olt):
  73. """
  74. Obtain duplilcated onus
  75. :param olt: Olt object
  76. :return: Return string with duplicated onu
  77. """
  78. resp = ""
  79. onus = {}
  80. for obj_olt in olt.child:
  81. for obj_onu in obj_olt.child:
  82. if obj_onu.serial_number not in onus:
  83. onus[obj_onu.serial_number] = []
  84. onus[obj_onu.serial_number].append(obj_onu)
  85. for tmp in onus:
  86. if len(onus[tmp]) > 1:
  87. for o in onus[tmp]:
  88. resp = resp + "-- Serial number: " + o.serial_number + ", name: " + o.name
  89. if o.nap is not None:
  90. resp = resp + ", nap: " + o.nap.name
  91. resp = resp + "\n"
  92. return resp
  93. def process_file(self, olt):
  94. olt.child = self.get_gpons()
  95. self.get_onus(olt)