new parser class structure
[logparse.git] / logparse / interface.py
index ef8d7fcb869e79f4121724c1abc8b601faca3fd4..8d08c48487f418bba2a9b2746e75d918c12ef19a 100644 (file)
@@ -16,8 +16,7 @@ from datetime import datetime
 import logparse
 import logparse.config
 from logparse.config import prefs, loadconf
-from logparse import formatting, mail, config
-from .parsers import load_parsers
+from logparse import formatting, mail, config, load_parsers
 
 global argparser
 
@@ -110,44 +109,25 @@ def main():
 
     # Find parsers
     
-    parser_providers = []
+    loader = load_parsers.ParserLoader("logparse.parsers") 
+    parser_names = set([x.name for x in loader.parsers])
+
     if argparser.parse_args().logs:
-        log_src = argparser.parse_args().logs.split()
+        parser_names = parser_names.intersection(set(argparser.parse_args().logs.split()))
     elif config.prefs.get("logparse", "parsers"):
-        log_src = config.prefs.get("logparse", "parsers").split()
-    else:
-        log_src = load_parsers.default_parsers
-
-    for parser_name in log_src:
-        parser = load_parsers.search(parser_name)
-        if parser == None:
-            logger.warning("Can't find parser {0}".format(parser_name))
-            continue
-        else:
-            parser_providers.append(load_parsers.load(parser))
+        parser_names = parser_names.intersection(set(config.prefs.get("logparse", "parsers").split()))
 
     if argparser.parse_args().ignore_logs:
-        ignore_src = argparser.parse_args().ignore_logs.split()
+        parser_names = parser_names.difference(set(argparser.parse_args().ignore_logs.split()))
     elif config.prefs.get("logparse", "ignore-parsers"):
-        ignore_src = config.prefs.get("logparse", "ignore-parsers").split()
-    else:
-        ignore_src = []
-    if len(ignore_src) > 0:
-        for parser_name in ignore_src:
-            if parser_name in [x.__name__.rpartition('.')[2] for x in parser_providers]:
-                logger.info("Ignoring default parser {0}".format(parser_name))
-                parser_providers_new = []
-                for p in parser_providers:
-                    if p.__name__.rpartition('.')[2] != parser_name:
-                        parser_providers_new.append(p)
-                parser_providers = parser_providers_new
-                continue
+        parser_names = parser_names.difference(set(config.prefs.get("logparse", "ignore-parsers").split()))
 
     # Execute parsers
 
-    logger.debug(str(parser_providers))
-    for parser in parser_providers:
-        output.append_section(parser.parse_log())
+    logger.debug("Queued the following parsers: " + str(loader.parsers))
+    for parser in loader.parsers:
+        if parser.name in parser_names:
+            output.append_section(parser.parse_log())
 
     # Write HTML footer
     output.append_footer()