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