29
29
from plaso .engine import engine
30
30
from plaso .engine import knowledge_base
31
31
from plaso .filters import event_filter
32
+ from plaso .formatters import manager as formatters_manager
32
33
from plaso .lib import errors
33
34
from plaso .lib import loggers
34
35
from plaso .lib import timelib
@@ -61,6 +62,8 @@ class PsortTool(
61
62
'Application to read, filter and process output from a plaso storage '
62
63
'file.' )
63
64
65
+ _FORMATTERS_FILE_NAME = 'formatters.yaml'
66
+
64
67
def __init__ (self , input_reader = None , output_writer = None ):
65
68
"""Initializes the CLI tool object.
66
69
@@ -79,6 +82,7 @@ def __init__(self, input_reader=None, output_writer=None):
79
82
self ._deduplicate_events = True
80
83
self ._event_filter_expression = None
81
84
self ._event_filter = None
85
+ self ._formatters_file = None
82
86
self ._knowledge_base = knowledge_base .KnowledgeBase ()
83
87
self ._number_of_analysis_reports = 0
84
88
self ._preferred_language = 'en-US'
@@ -151,6 +155,9 @@ def _ParseAnalysisPluginOptions(self, options):
151
155
152
156
Args:
153
157
options (argparse.Namespace): command line arguments.
158
+
159
+ Raises:
160
+ BadConfigOption: if the options are invalid.
154
161
"""
155
162
# Get a list of all available plugins.
156
163
analysis_plugin_info = self ._analysis_manager .GetAllPluginInformation ()
@@ -282,6 +289,26 @@ def _PrintAnalysisReportsDetails(self, storage_reader):
282
289
283
290
table_view .Write (self ._output_writer )
284
291
292
+ def _ReadEventFormattersFromFile (self ):
293
+ """Reads the event formatters the formatters.yaml file.
294
+
295
+ Raises:
296
+ BadConfigOption: if the event formatters file cannot be read.
297
+ """
298
+ self ._formatters_file = os .path .join (
299
+ self ._data_location , self ._FORMATTERS_FILE_NAME )
300
+ if not os .path .isfile (self ._formatters_file ):
301
+ raise errors .BadConfigOption (
302
+ 'No such event formatters file: {0:s}.' .format (self ._formatters_file ))
303
+
304
+ try :
305
+ formatters_manager .FormattersManager .ReadFormattersFromFile (
306
+ self ._formatters_file )
307
+ except KeyError as exception :
308
+ raise errors .BadConfigOption (
309
+ 'Unable to read event formatters from file with error: {0!s}' .format (
310
+ exception ))
311
+
285
312
def AddProcessingOptions (self , argument_group ):
286
313
"""Adds processing options to the argument group
287
314
@@ -449,6 +476,8 @@ def ParseOptions(self, options):
449
476
helpers_manager .ArgumentHelperManager .ParseOptions (
450
477
options , self , names = ['data_location' ])
451
478
479
+ self ._ReadEventFormattersFromFile ()
480
+
452
481
self ._ParseLogFileOptions (options )
453
482
454
483
self ._ParseProcessingOptions (options )
0 commit comments