| Server IP : 61.19.30.66 / Your IP : 216.73.216.15 Web Server : Apache/2.2.22 (Ubuntu) System : Linux klw 3.11.0-15-generic #25~precise1-Ubuntu SMP Thu Jan 30 17:39:31 UTC 2014 x86_64 User : www-data ( 33) PHP Version : 5.3.10-1ubuntu3.48 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : OFF | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : OFF Directory : /usr/share/pyshared/landscape/monitor/ |
Upload File : |
import os
import logging
from landscape.lib.fs import read_file
from landscape.monitor.plugin import MonitorPlugin
REBOOT_REQUIRED_FILENAME = "/var/run/reboot-required"
class RebootRequired(MonitorPlugin):
"""
Report whether the system requires a reboot.
@param reboot_required_filename: The path to the flag file that indicates
if the system needs to be rebooted.
"""
persist_name = "reboot-required"
run_interval = 900 # 15 minutes
run_immediately = True
def __init__(self, reboot_required_filename=REBOOT_REQUIRED_FILENAME):
self._flag_filename = reboot_required_filename
self._packages_filename = reboot_required_filename + ".pkgs"
def _get_flag(self):
"""Return a boolean indicating whether the computer needs a reboot."""
return os.path.exists(self._flag_filename)
def _get_packages(self):
"""Return the list of packages that required a reboot, if any."""
if not os.path.exists(self._packages_filename):
return []
lines = read_file(self._packages_filename).splitlines()
packages = set(line.strip().decode("utf-8") for line in lines if line)
return sorted(packages)
def _create_message(self):
"""Return the body of the reboot-required message to be sent."""
message = {}
flag = self._get_flag()
packages = self._get_packages()
for key, value in [("flag", flag), ("packages", packages)]:
if value == self._persist.get(key):
continue
self._persist.set(key, value)
message[key] = value
return message
def send_message(self):
"""Send a reboot-required message if needed.
A message will be sent only if the reboot-required status of the
system has changed.
"""
message = self._create_message()
if message:
message["type"] = "reboot-required-info"
logging.info("Queueing message with updated "
"reboot-required status.")
self.registry.broker.send_message(message, urgent=True)
def run(self):
"""Send reboot-required messages if the server accepts them."""
return self.registry.broker.call_if_accepted(
"reboot-required-info", self.send_message)