Skip to content

Commit

Permalink
Add automatic refresh for daemons status,
Browse files Browse the repository at this point in the history
Ref #264 remove refresh btn, add Unit Tests
  • Loading branch information
algorys committed Mar 12, 2018
1 parent 23e362b commit e8508c5
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 45 deletions.
3 changes: 3 additions & 0 deletions alignak_app/qobjects/alignak/alignak.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,3 +141,6 @@ def update_status(self):
QPixmap(settings.get_image(app_backend.get_backend_status_icon()))
)
self.status_btn.setEnabled(bool(data_manager.database['alignakdaemon']))

if self.status_dialog.labels:
self.status_dialog.update_dialog()
40 changes: 8 additions & 32 deletions alignak_app/qobjects/alignak/status.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@
Status manage creation of QDialog for daemons status
"""

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QDialog, QGridLayout, QLabel, QWidget, QHBoxLayout, QPushButton
from PyQt5.Qt import Qt, QDialog, QGridLayout, QLabel, QPushButton

from alignak_app.backend.datamanager import data_manager
from alignak_app.qobjects.common.frames import AppQFrame
Expand Down Expand Up @@ -70,41 +69,18 @@ def initialize(self):
self.add_daemon_labels(daemon_item, line)

line += 1
buttons_widget = self.get_buttons_widget()
self.layout.addWidget(buttons_widget, line, 0, 1, 7)
self.layout.setAlignment(buttons_widget, Qt.AlignCenter)
ok_btn = QPushButton(_('OK'))
ok_btn.setObjectName('ok')
ok_btn.setFixedSize(120, 30)
ok_btn.clicked.connect(self.app_widget.close)
self.layout.addWidget(ok_btn, line, 0, 1, 7)
self.layout.setAlignment(ok_btn, Qt.AlignCenter)

# Use AppQWidget
self.app_widget.initialize(_('Alignak Status'))
self.app_widget.add_widget(self)
center_widget(self.app_widget)

def get_buttons_widget(self):
"""
Return QWidget with buttons
:return: widget with ok and refresh buttons
:rtype: QWidget
"""

widget = QWidget()
layout = QHBoxLayout()
widget.setLayout(layout)

ok_btn = QPushButton(_('OK'))
ok_btn.setObjectName('valid')
ok_btn.setFixedSize(120, 30)
ok_btn.clicked.connect(self.app_widget.close)
layout.addWidget(ok_btn)

refresh_btn = QPushButton(_('Refresh'))
refresh_btn.setObjectName('ok')
refresh_btn.setFixedSize(120, 30)
refresh_btn.clicked.connect(self.update_dialog)
layout.addWidget(refresh_btn)

return widget

def set_daemons_labels(self, daemons):
"""
Initialize the daemon QLabels for each daemons
Expand All @@ -114,7 +90,7 @@ def set_daemons_labels(self, daemons):
"""

daemons_attributes = [
'alive', 'name', 'reachable', 'spare', 'address', 'port', 'passive', 'last_check'
'alive', 'name', 'reachable', 'spare', 'address', 'passive', 'last_check'
]

for daemon in daemons:
Expand Down
61 changes: 48 additions & 13 deletions test/test_status_widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@
import sys

import unittest2
from PyQt5.Qt import QApplication, QWidget, QSize
from PyQt5.Qt import QApplication, QLabel, QSize

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.utils.config import settings
from alignak_app.locales.locales import init_localization
Expand All @@ -39,7 +39,25 @@ class TestStatusQDialog(unittest2.TestCase):

settings.init_config()
init_localization()
app_backend.login()

daemons_list = []
for i in range(0, 10):
daemon = Daemon()
daemon.create(
'_id%d' % i,
{
'name': 'daemon%d' % i,
'alive': True,
'address': '127.0.0.%d' % i,
'port': '700%d' % i,
'reachable': True,
'spare': True,
'passive': True,
'last_check': 100000
},
'daemon%d' % i
)
daemons_list.append(daemon)

@classmethod
def setUpClass(cls):
Expand All @@ -60,21 +78,12 @@ def test_initialize_status_qdialog(self):

under_test.initialize()

def test_get_buttons_widget(self):
"""Get Buttons Status from StatusQDialog"""

status_dialog_test = StatusQDialog()

under_test = status_dialog_test.get_buttons_widget()

self.assertIsInstance(under_test, QWidget)

def test_set_daemons_labels(self):
"""Set Daemons QLabels"""

under_test = StatusQDialog()
labels_test = [
'alive', 'name', 'reachable', 'spare', 'address', 'port', 'passive', 'last_check'
'alive', 'name', 'reachable', 'spare', 'address', 'passive', 'last_check'
]

daemon_test = Daemon()
Expand Down Expand Up @@ -114,3 +123,29 @@ def test_add_daemon_titles_labels(self):
self.assertEqual(QSize(14, 14), under_test.labels['daemon-name']['reachable'].size())
self.assertEqual(QSize(14, 14), under_test.labels['daemon-name']['spare'].size())
self.assertEqual(QSize(14, 14), under_test.labels['daemon-name']['passive'].size())

def test_update_dialog(self):
"""Update Status QDialog"""

# Fill databse with sample daemons
data_manager.update_database('alignakdaemon', self.daemons_list)

# Init widget
under_test = StatusQDialog()

# Labels are empty
self.assertFalse(under_test.labels)

under_test.initialize()
under_test.update_dialog()

# Labels are filled
i = 0
for daemon_labels in under_test.labels:
self.assertTrue('daemon%d' % i in under_test.labels)
i += 1
for label in under_test.labels[daemon_labels]:
self.assertIsInstance(under_test.labels[daemon_labels][label], QLabel)

daemon_labels = under_test.labels['daemon0']
self.assertEqual('127.0.0.0:7000', daemon_labels['address'].text())

0 comments on commit e8508c5

Please sign in to comment.