diff options
Diffstat (limited to '')
-rw-r--r-- | src/tools/analyzer/source_files.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/src/tools/analyzer/source_files.py b/src/tools/analyzer/source_files.py new file mode 100644 index 0000000..0cadf99 --- /dev/null +++ b/src/tools/analyzer/source_files.py @@ -0,0 +1,76 @@ +import glob +import logging + +from sssd.source_reader import Reader + +logger = logging.getLogger() + + +class Files(Reader): + """ + A class used to represent a Log Files Reader + + Args: + path -- the path where SSSD logs are to + be read (default /var/log/sssd/) + """ + + def __init__(self, path): + super().__init__() + self.log_files = [] + self.path = self.resolve_path(path) + self.domains = self.get_domain_logfiles() + + def __iter__(self): + """ + Yields: + str: The next line in the log file + """ + for files in self.log_files: + try: + with open(files) as file: + for line in file: + yield line + except FileNotFoundError as err: + logger.warning("Could not find domain log file, skipping") + logger.warning(err) + continue + + def resolve_path(self, path): + if path.endswith("/"): + return path + else: + return path + "/" + + def get_domain_logfiles(self, child=False): + """ Retrieve list of SSSD log files, exclude rotated (.gz) files """ + domain_files = [] + exclude_list = ["ifp", "nss", "pam", "sudo", "autofs", + "ssh", "pac", "kcm", ".gz"] + if child: + file_list = glob.glob(self.path + "*.log") + else: + file_list = glob.glob(self.path + "sssd_*") + for file in file_list: + if not any(s in file for s in exclude_list): + domain_files.append(file) + + return domain_files + + def set_component(self, component, child): + """ + Switch the reader to interact with a certain SSSD component + NSS, PAM, BE + """ + self.log_files = [] + if component == self.Component.NSS: + self.log_files.append(self.path + "sssd_nss.log") + elif component == self.Component.PAM: + self.log_files.append(self.path + "sssd_pam.log") + elif component == self.Component.BE: + domains = self.get_domain_logfiles(child) + if not domains: + raise IOError + # error: No domains found? + for dom in domains: + self.log_files.append(dom) |