| Server IP : 68.178.202.69 / Your IP : 216.73.216.122 Web Server : Apache System : Linux 69.202.178.68.host.secureserver.net 3.10.0-1160.139.1.el7.tuxcare.els2.x86_64 #1 SMP Mon Nov 3 13:30:41 UTC 2025 x86_64 User : ikioworld ( 1005) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/lib/fm-agent/library/ |
Upload File : |
import aggregator
import os
import logging
import traceback
import sys
try:
import configparser
except Exception:
# Python 3
import ConfigParser as configparser
class Maintenance:
def __init__(self, brand, agg_url, version, base_config_dir, pkg_dir, debug=False):
self.brand = brand
self.agg_url = agg_url
self.version = version
self.base_config_dir = base_config_dir
self.pkg_dir = pkg_dir
self.config_dir = os.path.join(self.base_config_dir, self.pkg_dir)
self.config_file = os.path.join(self.config_dir, "%s_agent.cfg" % self.brand)
self.base_log_dir = "/var/log"
self.log_dir = os.path.join(self.base_log_dir, self.pkg_dir)
self.log_file = os.path.join(self.log_dir, "maintenance.log")
self.log = logging.getLogger()
log_format = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(log_format)
self.log.addHandler(stream_handler)
if debug:
self.log.setLevel(logging.DEBUG)
else:
self.log.setLevel(logging.INFO)
try:
handler = logging.FileHandler(self.log_file)
handler.setFormatter(log_format)
self.log.addHandler(handler)
except IOError:
self.log.error(
"Unable to reach log location %s. Please correct" % self.log_file
)
try:
self.config = configparser.RawConfigParser()
self.config.read(self.config_file)
self.server_key = self.config.get("agent", "server_key")
self.agg_url = self.config.get("agent", "aggregator_url") or self.agg_url
self.client = aggregator.Client(
self.agg_url, self.version, server_key=self.server_key
)
except Exception:
self.log.error("Error when getting config file. Exiting")
self.log.error(traceback.format_exc())
sys.exit()
def start(self, duration, metric_tags=None):
"""
Request to the aggregator that we start the maintenance on the server.
"""
self.log.info("Starting maintenance procedure.")
try:
duration = int(duration)
except (TypeError, ValueError):
self.log.warning(
"Unrecognized duration %s. Must be given in minutes. Exiting" % duration
)
sys.exit(1)
try:
response = self.client.maintenance(duration, metric_tags)
except Exception:
self.log.debug(traceback.format_exc())
self.log.info(
"There was an error performing the request. Please try again or contact support"
)
sys.exit(1)
if duration > 1:
text = "minutes"
else:
text = "minute"
self.log.info(
"This instance will go under maintenance for %s %s shortly"
% (str(duration), text)
)
sys.exit(0)
def end(self):
"""
Request to the aggregator that we end all maintenances in the server.
"""
self.log.info("Starting maintenance shutdown.")
try:
response = self.client.end_maintenance()
except Exception:
self.log.debug(traceback.format_exc())
self.log.info(
"There was an error performing the request. Please try again or contact support"
)
sys.exit(1)
self.log.info(
"Any active maintenance periods in the server will be ended immediately."
)
sys.exit(0)