def __init__(self, log, adapter_agent, device_id, logical_device_id): """ 20180711 - Addition of adapter_agent and device_id to facilitate alarm processing and kafka posting :param log: :param adapter_agent: :param device_id: """ self.log = log self.adapter_agent = adapter_agent self.device_id = device_id self.logical_device_id = logical_device_id """ The following is added to reduce the continual posting of OLT LOS alarming to Kafka. Set enable_alarm_suppress = true to enable otherwise the current openolt bal will send continuous olt los alarm cleared messages ONU disc raised counter is place holder for a future addition """ self.enable_alarm_suppress = True self.alarm_suppress = { "olt_los_clear": 0, "onu_disc_raised": [] } # Keep count of alarms to limit. try: self.alarms = AdapterAlarms(self.adapter_agent, self.device_id, self.logical_device_id) self.simulator = AdapterAlarmSimulator(self.alarms) except Exception as initerr: self.log.exception("alarmhandler-init-error", errmsg=initerr.message) raise Exception(initerr)
def activate(self, device): self.log.debug('function-entry', device=device) # first we verify that we got parent reference and proxy info assert device.parent_id assert device.proxy_address.device_id # register for proxied messages right away self.proxy_address = device.proxy_address self.adapter_agent.register_for_proxied_messages(device.proxy_address) self.parent_id = device.parent_id parent_device = self.adapter_agent.get_device(self.parent_id) if parent_device.type == 'openolt': self.parent_adapter = registry('adapter_loader'). \ get_agent(parent_device.adapter).adapter if self.enabled is not True: self.log.info('activating-new-onu') # populate what we know. rest comes later after mib sync device.root = True device.vendor = 'Broadcom' device.connect_status = ConnectStatus.REACHABLE device.oper_status = OperStatus.DISCOVERED device.reason = 'activating-onu' # pm_metrics requires a logical device id parent_device = self.adapter_agent.get_device(device.parent_id) self.logical_device_id = parent_device.parent_id assert self.logical_device_id, 'Invalid logical device ID' self.adapter_agent.update_device(device) self.log.debug('set-device-discovered') self._init_pon_state(device) ############################################################################ # Setup PM configuration for this device # Pass in ONU specific options kwargs = { OnuPmMetrics.DEFAULT_FREQUENCY_KEY: OnuPmMetrics.DEFAULT_ONU_COLLECTION_FREQUENCY, 'heartbeat': self.heartbeat, OnuOmciPmMetrics.OMCI_DEV_KEY: self._onu_omci_device } self.pm_metrics = OnuPmMetrics(self.adapter_agent, self.device_id, self.logical_device_id, grouped=True, freq_override=False, **kwargs) pm_config = self.pm_metrics.make_proto() self._onu_omci_device.set_pm_config( self.pm_metrics.omci_pm.openomci_interval_pm) self.log.info("initial-pm-config", pm_config=pm_config) self.adapter_agent.update_device_pm_config(pm_config, init=True) ############################################################################ # Setup Alarm handler self.alarms = AdapterAlarms(self.adapter_agent, device.id, self.logical_device_id) # Note, ONU ID and UNI intf set in add_uni_port method self._onu_omci_device.alarm_synchronizer.set_alarm_params( mgr=self.alarms, ani_ports=[self._pon]) self.enabled = True else: self.log.info('onu-already-activated')
def activate(self, device): self.log.info('activating') try: # first we verify that we got parent reference and proxy info assert device.parent_id, 'Invalid Parent ID' assert device.proxy_address.device_id, 'Invalid Device ID' # register for proxied messages right away self.proxy_address = device.proxy_address self.adapter_agent.register_for_proxied_messages(device.proxy_address) # initialize device info device.root = False device.vendor = 'Adtran Inc.' device.model = 'n/a' device.hardware_version = 'n/a' device.firmware_version = 'n/a' device.reason = '' device.connect_status = ConnectStatus.UNKNOWN # Register physical ports. Should have at least one of each self.adapter_agent.add_port(device.id, self._pon.get_port()) def xpon_not_found(): self.enabled = True # Schedule xPON 'not found' startup for 10 seconds from now. We will # easily get a vONT-ANI create within that time if xPON is being used # as this is how we are initially launched and activated in the first # place if xPON is in use. reactor.callLater(10, xpon_not_found) # TODO: Clean up old xPON delay # reference of uni_port is required when re-enabling the device if # it was disabled previously # Need to query ONU for number of supported uni ports # For now, temporarily set number of ports to 1 - port #2 parent_device = self.adapter_agent.get_device(device.parent_id) self.logical_device_id = parent_device.parent_id self.adapter_agent.update_device(device) ############################################################################ # Setup PM configuration for this device # Pass in ONU specific options kwargs = { OnuPmMetrics.DEFAULT_FREQUENCY_KEY: OnuPmMetrics.DEFAULT_ONU_COLLECTION_FREQUENCY, 'heartbeat': self.heartbeat, OnuOmciPmMetrics.OMCI_DEV_KEY: self.openomci.onu_omci_device } self.pm_metrics = OnuPmMetrics(self.adapter_agent, self.device_id, self.logical_device_id, grouped=True, freq_override=False, **kwargs) pm_config = self.pm_metrics.make_proto() self.openomci.set_pm_config(self.pm_metrics.omci_pm.openomci_interval_pm) self.log.info("initial-pm-config", pm_config=pm_config) self.adapter_agent.update_device_pm_config(pm_config, init=True) ############################################################################ # Setup Alarm handler self.alarms = AdapterAlarms(self.adapter_agent, device.id, self.logical_device_id) self.openomci.onu_omci_device.alarm_synchronizer.set_alarm_params(mgr=self.alarms, ani_ports=[self._pon]) ############################################################################ # Start collecting stats from the device after a brief pause reactor.callLater(30, self.pm_metrics.start_collector) except Exception as e: self.log.exception('activate-failure', e=e) device.reason = 'Failed to activate: {}'.format(e.message) device.connect_status = ConnectStatus.UNREACHABLE device.oper_status = OperStatus.FAILED self.adapter_agent.update_device(device)
def activate(self, device): self.log.info('activating') try: # first we verify that we got parent reference and proxy info assert device.parent_id, 'Invalid Parent ID' assert device.proxy_address.device_id, 'Invalid Device ID' if device.vlan: # vlan non-zero if created via legacy method (not xPON). self._olt_created = True # register for proxied messages right away self.proxy_address = device.proxy_address self.adapter_agent.register_for_proxied_messages(device.proxy_address) # initialize device info device.root = True device.vendor = 'Adtran Inc.' device.model = 'n/a' device.hardware_version = 'n/a' device.firmware_version = 'n/a' device.reason = '' device.connect_status = ConnectStatus.UNKNOWN # Register physical ports. Should have at least one of each self._pon = PonPort.create(self, self._next_port_number) self.adapter_agent.add_port(device.id, self._pon.get_port()) if self._olt_created: # vlan non-zero if created via legacy method (not xPON). Also # Set a random serial number since not xPON based uni_port = UniPort.create(self, self._next_port_number, device.vlan, 'deprecated', device.vlan, None) self._unis[uni_port.port_number] = uni_port self.adapter_agent.add_port(device.id, uni_port.get_port()) device.serial_number = uuid4().hex uni_port.add_logical_port(device.vlan, subscriber_vlan=device.vlan) # Start things up for this ONU Handler. self.enabled = True ############################################################################ # Setup PM configuration for this device # Pass in ONU specific options kwargs = { 'heartbeat': self.heartbeat, 'omci-cc': self.openomci.omci_cc } self.pm_metrics = OnuPmMetrics(self.adapter_agent, self.device_id, grouped=True, freq_override=False, **kwargs) pm_config = self.pm_metrics.make_proto() self.openomci.set_pm_config(self.pm_metrics.omci_pm.openomci_interval_pm) self.log.info("initial-pm-config", pm_config=pm_config) self.adapter_agent.update_device_pm_config(pm_config, init=True) # reference of uni_port is required when re-enabling the device if # it was disabled previously # Need to query ONU for number of supported uni ports # For now, temporarily set number of ports to 1 - port #2 parent_device = self.adapter_agent.get_device(device.parent_id) self.logical_device_id = parent_device.parent_id assert self.logical_device_id, 'Invalid logical device ID' self.adapter_agent.update_device(device) ############################################################################ # Setup Alarm handler self.alarms = AdapterAlarms(self.adapter_agent, device.id, self.logical_device_id) ############################################################################ # Start collecting stats from the device after a brief pause reactor.callLater(30, self.pm_metrics.start_collector) except Exception as e: self.log.exception('activate-failure', e=e) device.reason = 'Failed to activate: {}'.format(e.message) device.connect_status = ConnectStatus.UNREACHABLE device.oper_status = OperStatus.FAILED self.adapter_agent.update_device(device)