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)
예제 #10
0
    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
예제 #11
0
    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)
예제 #12
0
    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
                )
예제 #13
0
    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))
예제 #16
0
    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)
예제 #17
0
    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)