Skip to content

Commit

Permalink
Add changing icon for alignak status if available
Browse files Browse the repository at this point in the history
Ref #283
  • Loading branch information
algorys committed Mar 26, 2018
1 parent 912982e commit d62346a
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 13 deletions.
29 changes: 21 additions & 8 deletions alignak_app/qobjects/alignak/alignak.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,10 @@

from alignak_app.backend.backend import app_backend
from alignak_app.backend.datamanager import data_manager
from alignak_app.qobjects.alignak.status import StatusQDialog
from alignak_app.utils.config import settings

from alignak_app.qobjects.common.labels import get_icon_pixmap
from alignak_app.qobjects.alignak.status import StatusQDialog
from alignak_app.qobjects.user.profile import ProfileQWidget

logger = getLogger(__name__)
Expand Down Expand Up @@ -91,7 +92,7 @@ def initialize(self):

# Status button
self.status_dialog.initialize()
self.status_btn.setIcon(QIcon(settings.get_image('icon')))
self.update_status_btn(self.status_dialog.update_dialog())
self.status_btn.setFixedSize(32, 32)
self.status_btn.clicked.connect(self.show_status_dialog)
layout.addWidget(self.status_btn, 1, 1, 1, 1)
Expand All @@ -104,7 +105,7 @@ def initialize(self):
self.profile_widget.initialize()
self.profile_btn.setIcon(QIcon(settings.get_image('user')))
self.profile_btn.setFixedSize(40, 40)
self.profile_btn.clicked.connect(self.open_user_widget)
self.profile_btn.clicked.connect(self.show_user_widget)
self.profile_btn.setToolTip(_('User'))
layout.addWidget(self.profile_btn, 0, 3, 2, 1)

Expand All @@ -113,24 +114,36 @@ def initialize(self):
self.refresh_timer.start()
self.refresh_timer.timeout.connect(self.update_status)

def show_status_dialog(self):
def show_status_dialog(self): # pragma: no cover
"""
Update and show StatusQDialog
"""

self.status_dialog.update_dialog()
self.update_status_btn(self.status_dialog.update_dialog())
self.status_dialog.show()

def open_user_widget(self):
def show_user_widget(self): # pragma: no cover
"""
Show ProfileQWidget
Update and show ProfileQWidget
"""

self.profile_widget.update_widget()
self.profile_widget.show()

def update_status_btn(self, status):
"""
Update status button, depending if "status_ok" is False or True
:param status: current status of alignak daemons
:type status: bool
"""

self.status_btn.setIcon(
QIcon(get_icon_pixmap(status, ['connected', 'disconnected']))
)

def update_status(self):
"""
Update daemons and backend status
Expand All @@ -143,4 +156,4 @@ def update_status(self):
self.status_btn.setEnabled(bool(data_manager.database['alignakdaemon']))

if self.status_dialog.labels:
self.status_dialog.update_dialog()
self.update_status_btn(self.status_dialog.update_dialog())
9 changes: 8 additions & 1 deletion alignak_app/qobjects/alignak/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,16 +199,21 @@ def add_daemon_labels(self, daemon_item, line):

def update_dialog(self):
"""
Update StatusQDialog labels
Update StatusQDialog labels and return if all daemons are ok or not
:return: if status of daemons is ok or not
:rtype: bool
"""

daemons = data_manager.database['alignakdaemon']
status_ok = True

for daemon_item in daemons:
self.labels[daemon_item.name]['alive'].setPixmap(
get_icon_pixmap(daemon_item.data['alive'], ['connected', 'disconnected'])
)
if not daemon_item.data['alive']:
status_ok = False
self.labels[daemon_item.name]['name'].setText(daemon_item.name)
self.labels[daemon_item.name]['address'].setText(
'%s:%s' % (daemon_item.data['address'], daemon_item.data['port'])
Expand All @@ -225,6 +230,8 @@ def update_dialog(self):
last_check = get_time_diff_since_last_timestamp(daemon_item.data['last_check'])
self.labels[daemon_item.name]['last_check'].setText(last_check)

return status_ok

def mousePressEvent(self, event): # pragma: no cover
""" QWidget.mousePressEvent(QMouseEvent) """

Expand Down
36 changes: 33 additions & 3 deletions test/test_alignak_widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from alignak_app.utils.config import settings
from alignak_app.locales.locales import init_localization
from alignak_app.items.user import User
from alignak_app.items.daemon import Daemon

from alignak_app.qobjects.alignak.alignak import AlignakQWidget

Expand Down Expand Up @@ -61,8 +62,8 @@ def setUpClass(cls):
except:
pass

def test_initialize_status_qwidget(self):
"""Initialize StatusQWidget"""
def test_initialize_alignak_qwidget(self):
"""Initialize AlignakQWidget"""

under_test = AlignakQWidget()

Expand All @@ -80,7 +81,36 @@ def test_initialize_status_qwidget(self):

self.assertIsNotNone(under_test.backend_connected)
self.assertIsNotNone(under_test.status_btn)
self.assertFalse(under_test.status_btn.isEnabled())
self.assertIsNotNone(under_test.status_dialog)
self.assertIsNotNone(under_test.profile_btn)
self.assertIsNotNone(under_test.profile_widget)
self.assertTrue(under_test.refresh_timer.isActive())
self.assertTrue(under_test.refresh_timer.isActive())

def test_update_status(self):
"""Update Alignak QWidget"""

under_test = AlignakQWidget()
under_test.initialize()

self.assertFalse(under_test.status_btn.isEnabled())

daemon_test = Daemon()
daemon_test.create(
'_id1',
{
'alive': True,
'address': '127.0.0.1',
'port': '8888',
'reachable': True,
'spare': True,
'passive': True,
'last_check': 123456789,
},
'arbiter'
)
data_manager.update_database('alignakdaemon', [daemon_test])
under_test.update_status()

# Status button is enabled when alignakdaemon is filled
self.assertTrue(under_test.status_btn.isEnabled())
1 change: 0 additions & 1 deletion test/test_all_items.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@
from alignak_app.locales.locales import init_localization

from alignak_app.backend.backend import app_backend
from alignak_app.backend.datamanager import data_manager

from alignak_app.items.daemon import Daemon
from alignak_app.items.event import Event
Expand Down

0 comments on commit d62346a

Please sign in to comment.