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