Skip to content

Commit 9a44352

Browse files
committed
[Daemon] check active status along with enabled
The disabled/enabled option of systemctl only controls whether a daemon should start at boot or not. But to ensure the daemon runs all the time, we need to check the active status of the daemon as well. To achieve this the daemon check function is updated to validate the active status of the daemon along with disabled/enabled. Similarly, the daemon repair function is also updated to activate/start the daemon if reported inactive by check function. Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
1 parent a6185e2 commit 9a44352

3 files changed

Lines changed: 66 additions & 19 deletions

File tree

servicereportpkg/check.py

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,33 @@ def get_service(self):
5656
class DaemonCheck(Check):
5757
"""Manage daemon check information"""
5858

59-
def __init__(self, name, daemon, status=None, note=None):
60-
Check.__init__(self, name, status, note)
61-
self.daemon = daemon
59+
def __init__(self, name, status=None, enabled=None,
60+
active=None):
61+
"""Daemon check initializer"""
62+
63+
Check.__init__(self, name, status)
64+
self.enabled = enabled
65+
self.active = active
66+
67+
def set_daemon_enabled(self, enabled):
68+
"""Set daemon enabled status"""
69+
70+
self.enabled = enabled
71+
72+
def is_daemon_enabled(self):
73+
"""Returns daemon enabled status"""
74+
75+
return self.enabled
76+
77+
def set_daemon_active(self, active):
78+
"""Set daemon active status"""
79+
80+
self.active = active
6281

63-
def get_daemon(self):
64-
"""Returns the daemon name"""
82+
def is_daemon_active(self):
83+
"""Returns daemon active status"""
6584

66-
return self.daemon
85+
return self.active
6786

6887

6988
class PackageCheck(Check):

servicereportpkg/repair/plugins/daemon_repair.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88

99
from servicereportpkg.repair.plugins import RepairPlugin
10-
from servicereportpkg.utils import enable_daemon
10+
from servicereportpkg.utils import enable_daemon, restart_service
1111
from servicereportpkg.check import Notes
1212

1313
class DaemonRepair(RepairPlugin):
@@ -22,8 +22,22 @@ def repair(self, plugin_obj, checks):
2222

2323
for check in checks:
2424
if not check.get_status():
25-
if enable_daemon(check.get_name()):
25+
daemon = check.get_name()
26+
enabled = check.is_daemon_enabled()
27+
active = check.is_daemon_active()
28+
29+
if not enabled:
30+
enabled = enable_daemon(daemon)
31+
if enabled:
32+
check.set_daemon_enabled(True)
33+
34+
if not active:
35+
active = restart_service(daemon)
36+
if active:
37+
check.set_daemon_active(True)
38+
39+
if enabled and active:
2640
check.set_status(True)
2741
check.set_note(Notes.FIXED)
2842
else:
29-
check.set_note(Notes.NOT_FIXABLE)
43+
check.set_note("Failed to enable/start %s" % daemon)

servicereportpkg/validate/plugins/daemon.py

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from servicereportpkg.check import DaemonCheck
1010
from servicereportpkg.utils import is_daemon_enabled
11+
from servicereportpkg.utils import get_service_status
1112
from servicereportpkg.validate.plugins import Plugin
1213
from servicereportpkg.validate.schemes.schemes import PSeriesScheme
1314
from servicereportpkg.validate.schemes.schemes import BMCPowerNVScheme
@@ -19,20 +20,33 @@
1920

2021

2122
def generate_daemon_check(self, daemon):
22-
"""Generates a function that checks the given daemon is enabled or not"""
23+
"""Generates a function to check daemon status"""
2324

2425
def check():
25-
check_daemon = daemon
26-
daemon_status = is_daemon_enabled(check_daemon)
27-
28-
if daemon_status is None:
29-
self.log.warning("Unable to find %s daemon status", check_daemon)
30-
elif daemon_status is False:
31-
self.log.error("%s is not enabled" % check_daemon)
26+
status = True
27+
enabled = is_daemon_enabled(daemon)
28+
29+
if enabled is None:
30+
self.log.warning("Unable to find %s daemon status", daemon)
31+
elif enabled is False:
32+
self.log.error("%s is not enabled" % daemon)
33+
34+
active = get_service_status(daemon)
35+
if active is None or active != 0:
36+
self.log.error("%s daemon is not active", daemon)
37+
self.log.recommendation("Start the service: systemctl start %s",
38+
daemon)
39+
active = False
3240
else:
33-
self.log.info("%s is enabled" % check_daemon)
41+
self.log.info("%s is active" % daemon)
42+
active = True
43+
44+
if enabled is None or active is None:
45+
status = None
46+
elif enabled is False or active is False:
47+
status = False
3448

35-
return DaemonCheck(check_daemon, check_daemon, daemon_status)
49+
return DaemonCheck(daemon, status, enabled, active)
3650

3751
check.__doc__ = "%s" % (daemon)
3852
return check

0 commit comments

Comments
 (0)