def add_event(self, event_type, msg, timer=False, host=None): """ Add event to events list :param event_type: the type of event: OK, DOWN, ACK, ... :type event_type: str :param msg: message of event :type msg: str :param timer: timer to hide event at end of time :type timer: bool :param host: data of a host to set ``Qt.UserRole`` :type host: None | str """ if not self.event_exist(msg): logger.debug( 'Add Event: msg: %s, timer: %s, host: %s', msg, timer, host ) event = EventItem() event.initialize(event_type, msg, timer=timer, host=host) self.events_list.insertItem(0, event) if timer: event_duration = int( settings.get_config('Alignak-app', 'notification_duration') ) * 1000 QTimer.singleShot( event_duration, lambda: self.remove_timer_event(event) ) else: logger.debug( 'Event with msg: %s already exist.', msg )
def add_event(self, event_type, msg, timer=False, host=None): """ Add event to events list :param event_type: the type of event: OK, DOWN, ACK, ... :type event_type: str :param msg: message of event :type msg: str :param timer: timer to hide event at end of time :type timer: bool :param host: data of a host to set ``Qt.UserRole`` :type host: None | str """ if not self.event_exist(msg): logger.debug('Add Event: msg: %s, timer: %s, host: %s', msg, timer, host) event = EventItem() event.initialize(event_type, msg, timer=timer, host=host) self.events_list.insertItem(0, event) if timer: event_duration = int( settings.get_config('Alignak-app', 'notification_duration')) * 1000 QTimer.singleShot(event_duration, lambda: self.remove_timer_event(event)) else: logger.debug('Event with msg: %s already exist.', msg)
def test_remove_event(self): """Remove EventItem""" under_test = EventsQWidget() under_test.initialize() # Welcome message is here self.assertEqual(1, under_test.events_list.count()) # Set current Row and remove item under_test.events_list.setCurrentRow(0) under_test.remove_event() # Welcome message have been removed self.assertEqual(0, under_test.events_list.count()) # Add EventItem to QListWidget event = EventItem() event.initialize( 'OK', 'message', timer=True ) under_test.events_list.insertItem(0, event) self.assertEqual(1, under_test.events_list.count()) under_test.remove_event(event) # Event is removed self.assertEqual(0, under_test.events_list.count())
def add_spy_host(self, host_id): """ Add a host to spied list and create corresponding EventItem() :param host_id: "_id" of host to spy :type host_id: str """ if self.parent(): self.parent().host_services_lbl.setText(_('Select spy host to display its problems...')) if not self.initialized: # Remove Hint item self.takeItem(0) self.initialized = True if host_id not in self.spied_hosts: self.spied_hosts.append(host_id) host = data_manager.get_item('host', '_id', host_id) if host: event_item = EventItem() event_item.initialize( EventItem.get_event_type(host.data), _('Host %s, current state: %s (new !)') % ( host.get_display_name(), host.data['ls_state']), host=host.item_id ) self.insertItem(0, event_item) logger.info('Spy a new host: %s', host.name) logger.debug('... with id: %s', host_id)
def test_get_event_item_icon(self): """Get Event Item Icon""" # Not found = error under_test = EventItem.get_icon(None) self.assertEqual('error', under_test) # Found not equal to error under_test = EventItem.get_icon('UNREACHABLE') self.assertNotEqual('error', under_test)
def test_remove_event(self): """Remove Spy Event Item""" under_test = SpyQWidget() under_test.initialize() spy_item_test = EventItem() spy_item_test.initialize('OK', 'Message', host='_id_1') # Fill database host_test = Host() host_test.create( '_id_1', { '_id': '_id_1', 'ls_downtimed': False, 'ls_acknowledged': False, 'active_checks_enabled': True, 'passive_checks_enabled': True, '_overall_state_id': 4, 'ls_state': 'DOWN' }, 'hostname') data_manager.update_database('host', [host_test]) # No item spy, so item is None self.assertIsNone(under_test.spy_list_widget.item(1)) self.assertFalse(under_test.spy_list_widget.spied_hosts) # Spy host under_test.spy_list_widget.add_spy_host(host_test.item_id) # Assert EventItem have same host "_id" that the one added self.assertEqual(spy_item_test.host, under_test.spy_list_widget.item(0).host) self.assertEqual(['_id_1'], under_test.spy_list_widget.spied_hosts) # Set this item to current one and add it to spy list under_test.spy_list_widget.setCurrentRow(0) under_test.spy_list_widget.setCurrentItem( under_test.spy_list_widget.item(0)) under_test.remove_event() # Event is no more here self.assertNotEqual(spy_item_test.host, under_test.spy_list_widget.item(0).host) self.assertFalse(under_test.spy_list_widget.spied_hosts)
def test_initialize_event_item_with_timer(self): """Initialize EventItem with QTimer""" under_test = EventItem() self.assertIsNone(under_test.timer) under_test.initialize( 'UNKNOWN', 'message', timer=True ) self.assertIsNotNone(under_test.timer) # Timer starts only by EventsQWidget self.assertFalse(under_test.timer.isActive())
def test_remove_timer_event(self): """Remove Timer EventItem""" under_test = EventsQWidget() under_test.initialize() # Add EventItem to QListWidget event = EventItem() event.initialize( 'OK', 'message', timer=True ) under_test.events_list.insertItem(0, event) self.assertEqual(2, under_test.events_list.count()) under_test.remove_timer_event(event) # Event is removed self.assertEqual(1, under_test.events_list.count())
def test_get_event_type(self): """Get Event Type""" data_test = { 'ls_state': 'OK', 'ls_acknowledged': False, 'ls_downtimed': False, } # Return state if not ack or downtimed under_test = EventItem.get_event_type(data_test) self.assertEqual('OK', under_test) # Return "ACK" if acknowledged data_test['ls_acknowledged'] = True under_test = EventItem.get_event_type(data_test) self.assertEqual('ACK', under_test) # Return "DOWNTIME" if downtimed data_test['ls_downtimed'] = True under_test = EventItem.get_event_type(data_test) self.assertEqual('DOWNTIME', under_test)
def get_hint_item(): """ Return an EventItem with a hint text :return: event item with hint text :rtype: EventItem """ drop_hint_item = EventItem() drop_hint_item.setText( _('Drop host-related events here to spy on it...')) drop_hint_item.setIcon(QIcon(settings.get_image('spy'))) drop_hint_item.setFlags(Qt.ItemIsDropEnabled) return drop_hint_item
def send_spy_events(self): """ Send event messages for all hosts who are spied """ if self.spy_list_widget.spied_hosts: for host_id in self.spy_list_widget.spied_hosts: host = data_manager.get_item('host', host_id) get_events_widget().add_event( EventItem.get_event_type(host.data), _('Host %s, current state: %s') % (host.get_display_name(), host.data['ls_state']), host=host.item_id)
def send_spy_events(self): """ Send event messages for all hosts who are spied """ if self.spy_list_widget.spied_hosts: for host_id in self.spy_list_widget.spied_hosts: host = data_manager.get_item('host', host_id) get_events_widget().add_event( EventItem.get_event_type(host.data), _('Host %s, current state: %s') % ( host.get_display_name(), host.data['ls_state']), host=host.item_id )
def get_hint_item(): """ Return an EventItem with a hint text :return: event item with hint text :rtype: EventItem """ drop_hint_item = EventItem() drop_hint_item.setText(_('Drop host-related events here to spy on it...')) drop_hint_item.setIcon(QIcon(settings.get_image('spy'))) drop_hint_item.setFlags(Qt.ItemIsDropEnabled) return drop_hint_item
def test_initialize_event_item_with_qt_userrole(self): """Initialize EventItem with Qt.UserRole""" under_test = EventItem() self.assertIsNone(under_test.data(Qt.UserRole)) under_test.initialize( 'WARNING', 'message', host='_id1' ) self.assertIsNotNone(under_test.data(Qt.UserRole)) self.assertEqual('_id1', under_test.data(Qt.UserRole))
def test_initialize_event_item(self): """Initialize EventItem""" under_test = EventItem() # Fields are None self.assertIsInstance(under_test, QListWidgetItem) self.assertIsNone(under_test.host) self.assertIsNone(under_test.timer) # Qt Data are empty self.assertIsNone(under_test.data(Qt.DisplayRole)) self.assertIsNone(under_test.data(Qt.UserRole)) under_test.initialize( 'OK', 'message' ) # Without host parameter, only "Qt.DisplayRole" is filled self.assertEqual('message', under_test.data(Qt.DisplayRole)) self.assertIsNone(under_test.host) self.assertIsNone(under_test.timer) self.assertIsNone(under_test.data(Qt.UserRole))
def manage_host_events(self, row): """ Manage spy events for a host, defined by current row of "spy_list_widget" :param row: current row of "spy_list_widget" :type row: int """ # Clear QListWidget self.host_list_widget.clear() # Get Host and its services if row < 0: item = None else: item = self.spy_list_widget.item(row) if item: host = data_manager.get_item('host', item.host) if _('(new !)') in item.data(Qt.DisplayRole): item.setData(Qt.DisplayRole, item.data(Qt.DisplayRole).replace(_('(new !)'), '')) item.setToolTip(item.toolTip().replace(_('(new !)'), '')) self.host_services_lbl.setText(_('Problems found for %s:') % host.get_display_name()) services = data_manager.get_host_services(host.item_id) if services: problems = False for service in services: if data_manager.is_problem('service', service.data): problems = True svc_state = _('Service %s is %s') % ( service.get_display_name(), service.data['ls_state'] ) event = EventItem() event.initialize( service.data['ls_state'], svc_state, host=host.item_id ) tooltip = 'Output: %s (%s)' % ( service.data['ls_output'], get_date_fromtimestamp(service.data['ls_last_check']) ) event.setToolTip(tooltip) self.host_list_widget.insertItem(0, event) if not problems: event = EventItem() event.initialize( host.data['ls_state'], _('%s is %s. Services of host seems managed.') % ( host.get_display_name(), host.data['ls_state']), host=host.item_id ) self.host_list_widget.insertItem(0, event) else: no_service_event = EventItem() no_service_event.initialize( host.data['ls_state'], _('%s is %s. No services.') % (host.get_display_name(), host.data['ls_state']) ) self.host_list_widget.insertItem(0, no_service_event)
def manage_host_events(self, row): """ Manage spy events for a host, defined by current row of "spy_list_widget" :param row: current row of "spy_list_widget" :type row: int """ # Clear QListWidget self.host_list_widget.clear() # Get Host and its services if row < 0: item = None else: item = self.spy_list_widget.item(row) if item: host = data_manager.get_item('host', item.host) if _('(new !)') in item.data(Qt.DisplayRole): item.setData( Qt.DisplayRole, item.data(Qt.DisplayRole).replace(_('(new !)'), '')) item.setToolTip(item.toolTip().replace(_('(new !)'), '')) self.host_services_lbl.setText( _('Problems found for %s:') % host.get_display_name()) services = data_manager.get_host_services(host.item_id) if services: problems = False for service in services: if data_manager.is_problem('service', service.data): problems = True svc_state = _('Service %s is %s') % ( service.get_display_name(), service.data['ls_state']) event = EventItem() event.initialize(service.data['ls_state'], svc_state, host=host.item_id) tooltip = 'Output: %s (%s)' % ( service.data['ls_output'], get_date_fromtimestamp( service.data['ls_last_check'])) event.setToolTip(tooltip) self.host_list_widget.insertItem(0, event) if not problems: event = EventItem() event.initialize( host.data['ls_state'], _('%s is %s. Services of host seems managed.') % (host.get_display_name(), host.data['ls_state']), host=host.item_id) self.host_list_widget.insertItem(0, event) else: no_service_event = EventItem() no_service_event.initialize( host.data['ls_state'], _('%s is %s. No services.') % (host.get_display_name(), host.data['ls_state'])) self.host_list_widget.insertItem(0, no_service_event)