1    	import logging
2    	import logging.handlers
3    	import os
4    	import sys
5    	
6    	# pylint: disable=import-error
7    	import pyagentx
8    	
9    	import pcs.utils
10   	from pcs.snmp import settings
11   	from pcs.snmp.updaters.v1 import ClusterPcsV1Updater
12   	
13   	logger = logging.getLogger("pcs.snmp")
14   	logger.addHandler(logging.NullHandler())
15   	
16   	
17   	def is_debug():
18   	    debug = os.environ.get("PCS_SNMP_AGENT_DEBUG", "")
19   	    return debug.lower() in ["true", "on", "1"]
20   	
21   	
22   	def get_update_interval():
23   	    interval = os.environ.get("PCS_SNMP_AGENT_UPDATE_INTERVAL")
24   	    if not interval:
25   	        return settings.DEFAULT_UPDATE_INTERVAL
26   	
27   	    def _log_invalid_value(_value):
28   	        logger.warning(
29   	            "Invalid update interval value: '%s' is not >= 1.0", str(_value)
30   	        )
31   	        logger.debug(
32   	            "Using default update interval: %s",
33   	            str(settings.DEFAULT_UPDATE_INTERVAL),
34   	        )
35   	
36   	    try:
37   	        interval = float(interval)
38   	    except ValueError:
39   	        _log_invalid_value(interval)
40   	        return settings.DEFAULT_UPDATE_INTERVAL
41   	    if interval <= 1.0:
42   	        _log_invalid_value(interval)
43   	        return settings.DEFAULT_UPDATE_INTERVAL
44   	    return interval
45   	
46   	
47   	def setup_logging(debug=False):
48   	    level = logging.INFO
49   	    if debug:
50   	        level = logging.DEBUG
51   	        # this is required to enable debug also in the ruby code
52   	        # key '--debug' has to be added
53   	        pcs.utils.pcs_options["--debug"] = debug
54   	    formatter = logging.Formatter(
55   	        "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
56   	    )
57   	    handler = logging.handlers.WatchedFileHandler(
58   	        settings.LOG_FILE, encoding="utf8"
59   	    )
60   	    handler.setLevel(level)
61   	    handler.setFormatter(formatter)
62   	    for logger_name in ["pyagentx", "pcs"]:
63   	        logger_instance = logging.getLogger(logger_name)
CID (unavailable; MK=2140019f2b4525672026c2a68e123fc5) (#1 of 1): Excessive log level (SIGMA.debug_logging_enabled):
(1) Event Sigma main event: The Python application has been configured to create excessive logs using a `DEBUG` log level. Excessive logging can expose sensitive information in log files.
(2) Event remediation: The log level of a production Python application should be set to `ERROR`, `WARN`, or `INFO`, instead of `DEBUG`.
64   	        logger_instance.setLevel(level)
65   	        logger_instance.addHandler(handler)
66   	
67   	
68   	class PcsAgent(pyagentx.Agent):
69   	    def setup(self):
70   	        update_interval = get_update_interval()
71   	        logger.info("Update interval set to: %s", str(update_interval))
72   	        self.register(
73   	            settings.PCS_OID + ".1",
74   	            ClusterPcsV1Updater,
75   	            freq=update_interval,
76   	        )
77   	
78   	
79   	def main():
80   	    setup_logging(is_debug())
81   	    try:
82   	        agent = PcsAgent()
83   	        agent.start()
84   	    # pylint: disable=broad-except
85   	    except Exception as e:
86   	        print("Unhandled exception: {0}".format(str(e)))
87   	        agent.stop()
88   	        sys.exit(1)
89   	    except KeyboardInterrupt:
90   	        agent.stop()
91