Left: | ||
Right: |
OLD | NEW |
---|---|
1 # -*- coding: utf-8 -*- | 1 # -*- coding: utf-8 -*- |
aaronp
2017/06/29 01:32:22
Reviewed
Joachim Metz
2017/07/27 05:43:51
Done.
| |
2 """The pinfo CLI tool.""" | 2 """The pinfo CLI tool.""" |
3 | 3 |
4 import argparse | 4 import argparse |
5 import collections | 5 import collections |
6 import logging | 6 import logging |
7 import os | 7 import os |
8 import uuid | 8 import uuid |
9 | 9 |
10 from plaso.cli import analysis_tool | 10 from plaso.cli import tool_options |
11 from plaso.cli import views as cli_views | 11 from plaso.cli import tools |
12 from plaso.cli import views | |
13 from plaso.cli.helpers import manager as helpers_manager | |
12 from plaso.engine import knowledge_base | 14 from plaso.engine import knowledge_base |
13 from plaso.lib import definitions | 15 from plaso.lib import definitions |
14 from plaso.lib import errors | 16 from plaso.lib import errors |
15 from plaso.lib import timelib | 17 from plaso.lib import timelib |
16 from plaso.storage import zip_file as storage_zip_file | 18 from plaso.storage import zip_file as storage_zip_file |
17 from plaso.serializer import json_serializer | 19 from plaso.serializer import json_serializer |
18 | 20 |
19 | 21 |
20 class PinfoTool(analysis_tool.AnalysisTool): | 22 class PinfoTool( |
21 """Class that implements the pinfo CLI tool.""" | 23 tools.CLITool, |
24 tool_options.StorageFileOptions): | |
25 """Pinfo CLI tool.""" | |
22 | 26 |
23 NAME = u'pinfo' | 27 NAME = u'pinfo' |
24 DESCRIPTION = ( | 28 DESCRIPTION = ( |
25 u'Shows information about a Plaso storage file, for example how it was ' | 29 u'Shows information about a Plaso storage file, for example how it was ' |
26 u'collected, what information was extracted from a source, etc.') | 30 u'collected, what information was extracted from a source, etc.') |
27 | 31 |
28 _INDENTATION_LEVEL = 8 | 32 _INDENTATION_LEVEL = 8 |
29 | 33 |
30 def __init__(self, input_reader=None, output_writer=None): | 34 def __init__(self, input_reader=None, output_writer=None): |
31 """Initializes the CLI tool object. | 35 """Initializes the CLI tool object. |
32 | 36 |
33 Args: | 37 Args: |
34 input_reader (Optional[InputReader]): input reader, where None indicates | 38 input_reader (Optional[InputReader]): input reader, where None indicates |
35 that the stdin input reader should be used. | 39 that the stdin input reader should be used. |
36 output_writer (Optional[OutputWriter]): output writer, where None | 40 output_writer (Optional[OutputWriter]): output writer, where None |
37 indicates that the stdout output writer should be used. | 41 indicates that the stdout output writer should be used. |
38 """ | 42 """ |
39 super(PinfoTool, self).__init__( | 43 super(PinfoTool, self).__init__( |
40 input_reader=input_reader, output_writer=output_writer) | 44 input_reader=input_reader, output_writer=output_writer) |
41 self._compare_storage_file_path = None | 45 self._compare_storage_file_path = None |
42 self._output_format = None | 46 self._output_format = None |
47 self._storage_file_path = None | |
43 | 48 |
44 self._verbose = False | 49 self._verbose = False |
45 self.compare_storage_information = False | 50 self.compare_storage_information = False |
46 | 51 |
47 def _CalculateStorageCounters(self, storage): | 52 def _CalculateStorageCounters(self, storage): |
48 """Calculates the counters of the entire storage. | 53 """Calculates the counters of the entire storage. |
49 | 54 |
50 Args: | 55 Args: |
51 storage (BaseStorage): storage. | 56 storage (BaseStorage): storage. |
52 | 57 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
126 reports per analysis plugin. | 131 reports per analysis plugin. |
127 session_identifier (Optional[str]): session identifier. | 132 session_identifier (Optional[str]): session identifier. |
128 """ | 133 """ |
129 if not analysis_reports_counter: | 134 if not analysis_reports_counter: |
130 return | 135 return |
131 | 136 |
132 title = u'Reports generated per plugin' | 137 title = u'Reports generated per plugin' |
133 if session_identifier: | 138 if session_identifier: |
134 title = u'{0:s}: {1:s}'.format(title, session_identifier) | 139 title = u'{0:s}: {1:s}'.format(title, session_identifier) |
135 | 140 |
136 table_view = cli_views.ViewsFactory.GetTableView( | 141 table_view = views.ViewsFactory.GetTableView( |
137 self._views_format_type, | 142 self._views_format_type, |
138 column_names=[u'Plugin name', u'Number of reports'], title=title) | 143 column_names=[u'Plugin name', u'Number of reports'], title=title) |
139 | 144 |
140 for key, value in sorted(analysis_reports_counter.items()): | 145 for key, value in sorted(analysis_reports_counter.items()): |
141 if key == u'total': | 146 if key == u'total': |
142 continue | 147 continue |
143 table_view.AddRow([key, value]) | 148 table_view.AddRow([key, value]) |
144 | 149 |
145 try: | 150 try: |
146 total = analysis_reports_counter[u'total'] | 151 total = analysis_reports_counter[u'total'] |
147 except KeyError: | 152 except KeyError: |
148 total = u'N/A' | 153 total = u'N/A' |
149 | 154 |
150 table_view.AddRow([u'Total', total]) | 155 table_view.AddRow([u'Total', total]) |
151 | 156 |
152 table_view.Write(self._output_writer) | 157 table_view.Write(self._output_writer) |
153 | 158 |
154 def _PrintAnalysisReportsDetails(self, storage): | 159 def _PrintAnalysisReportsDetails(self, storage): |
155 """Prints the details of the analysis reports. | 160 """Prints the details of the analysis reports. |
156 | 161 |
157 Args: | 162 Args: |
158 storage (BaseStorage): storage. | 163 storage (BaseStorage): storage. |
159 """ | 164 """ |
160 if not storage.HasAnalysisReports(): | 165 if not storage.HasAnalysisReports(): |
161 self._output_writer.Write(u'No analysis reports stored.\n\n') | 166 self._output_writer.Write(u'No analysis reports stored.\n\n') |
162 return | 167 return |
163 | 168 |
164 for index, analysis_report in enumerate(storage.GetAnalysisReports()): | 169 for index, analysis_report in enumerate(storage.GetAnalysisReports()): |
165 title = u'Analysis report: {0:d}'.format(index) | 170 title = u'Analysis report: {0:d}'.format(index) |
166 table_view = cli_views.ViewsFactory.GetTableView( | 171 table_view = views.ViewsFactory.GetTableView( |
167 self._views_format_type, title=title) | 172 self._views_format_type, title=title) |
168 | 173 |
169 table_view.AddRow([u'String', analysis_report.GetString()]) | 174 table_view.AddRow([u'String', analysis_report.GetString()]) |
170 | 175 |
171 table_view.Write(self._output_writer) | 176 table_view.Write(self._output_writer) |
172 | 177 |
173 def _PrintErrorsDetails(self, storage): | 178 def _PrintErrorsDetails(self, storage): |
174 """Prints the details of the errors. | 179 """Prints the details of the errors. |
175 | 180 |
176 Args: | 181 Args: |
177 storage (BaseStorage): storage. | 182 storage (BaseStorage): storage. |
178 """ | 183 """ |
179 if not storage.HasErrors(): | 184 if not storage.HasErrors(): |
180 self._output_writer.Write(u'No errors stored.\n\n') | 185 self._output_writer.Write(u'No errors stored.\n\n') |
181 return | 186 return |
182 | 187 |
183 for index, error in enumerate(storage.GetErrors()): | 188 for index, error in enumerate(storage.GetErrors()): |
184 title = u'Error: {0:d}'.format(index) | 189 title = u'Error: {0:d}'.format(index) |
185 table_view = cli_views.ViewsFactory.GetTableView( | 190 table_view = views.ViewsFactory.GetTableView( |
186 self._views_format_type, title=title) | 191 self._views_format_type, title=title) |
187 | 192 |
188 table_view.AddRow([u'Message', error.message]) | 193 table_view.AddRow([u'Message', error.message]) |
189 table_view.AddRow([u'Parser chain', error.parser_chain]) | 194 table_view.AddRow([u'Parser chain', error.parser_chain]) |
190 | 195 |
191 path_specification = error.path_spec.comparable | 196 path_specification = error.path_spec.comparable |
192 for path_index, line in enumerate(path_specification.split(u'\n')): | 197 for path_index, line in enumerate(path_specification.split(u'\n')): |
193 if not line: | 198 if not line: |
194 continue | 199 continue |
195 | 200 |
(...skipping 13 matching lines...) Expand all Loading... | |
209 label. | 214 label. |
210 session_identifier (Optional[str]): session identifier. | 215 session_identifier (Optional[str]): session identifier. |
211 """ | 216 """ |
212 if not event_labels_counter: | 217 if not event_labels_counter: |
213 return | 218 return |
214 | 219 |
215 title = u'Event tags generated per label' | 220 title = u'Event tags generated per label' |
216 if session_identifier: | 221 if session_identifier: |
217 title = u'{0:s}: {1:s}'.format(title, session_identifier) | 222 title = u'{0:s}: {1:s}'.format(title, session_identifier) |
218 | 223 |
219 table_view = cli_views.ViewsFactory.GetTableView( | 224 table_view = views.ViewsFactory.GetTableView( |
220 self._views_format_type, | 225 self._views_format_type, |
221 column_names=[u'Label', u'Number of event tags'], title=title) | 226 column_names=[u'Label', u'Number of event tags'], title=title) |
222 | 227 |
223 for key, value in sorted(event_labels_counter.items()): | 228 for key, value in sorted(event_labels_counter.items()): |
224 if key == u'total': | 229 if key == u'total': |
225 continue | 230 continue |
226 table_view.AddRow([key, value]) | 231 table_view.AddRow([key, value]) |
227 | 232 |
228 try: | 233 try: |
229 total = event_labels_counter[u'total'] | 234 total = event_labels_counter[u'total'] |
(...skipping 12 matching lines...) Expand all Loading... | |
242 parser plugin. | 247 parser plugin. |
243 session_identifier (Optional[str]): session identifier. | 248 session_identifier (Optional[str]): session identifier. |
244 """ | 249 """ |
245 if not parsers_counter: | 250 if not parsers_counter: |
246 return | 251 return |
247 | 252 |
248 title = u'Events generated per parser' | 253 title = u'Events generated per parser' |
249 if session_identifier: | 254 if session_identifier: |
250 title = u'{0:s}: {1:s}'.format(title, session_identifier) | 255 title = u'{0:s}: {1:s}'.format(title, session_identifier) |
251 | 256 |
252 table_view = cli_views.ViewsFactory.GetTableView( | 257 table_view = views.ViewsFactory.GetTableView( |
253 self._views_format_type, | 258 self._views_format_type, |
254 column_names=[u'Parser (plugin) name', u'Number of events'], | 259 column_names=[u'Parser (plugin) name', u'Number of events'], |
255 title=title) | 260 title=title) |
256 | 261 |
257 for key, value in sorted(parsers_counter.items()): | 262 for key, value in sorted(parsers_counter.items()): |
258 if key == u'total': | 263 if key == u'total': |
259 continue | 264 continue |
260 table_view.AddRow([key, value]) | 265 table_view.AddRow([key, value]) |
261 | 266 |
262 table_view.AddRow([u'Total', parsers_counter[u'total']]) | 267 table_view.AddRow([u'Total', parsers_counter[u'total']]) |
(...skipping 11 matching lines...) Expand all Loading... | |
274 | 279 |
275 storage.ReadPreprocessingInformation(knowledge_base_object) | 280 storage.ReadPreprocessingInformation(knowledge_base_object) |
276 | 281 |
277 # TODO: replace session_number by session_identifier. | 282 # TODO: replace session_number by session_identifier. |
278 system_configuration = knowledge_base_object.GetSystemConfigurationArtifact( | 283 system_configuration = knowledge_base_object.GetSystemConfigurationArtifact( |
279 session_identifier=session_number) | 284 session_identifier=session_number) |
280 if not system_configuration: | 285 if not system_configuration: |
281 return | 286 return |
282 | 287 |
283 title = u'System configuration' | 288 title = u'System configuration' |
284 table_view = cli_views.ViewsFactory.GetTableView( | 289 table_view = views.ViewsFactory.GetTableView( |
285 self._views_format_type, title=title) | 290 self._views_format_type, title=title) |
286 | 291 |
287 hostname = u'N/A' | 292 hostname = u'N/A' |
288 if system_configuration.hostname: | 293 if system_configuration.hostname: |
289 hostname = system_configuration.hostname.name | 294 hostname = system_configuration.hostname.name |
290 | 295 |
291 operating_system = system_configuration.operating_system or u'N/A' | 296 operating_system = system_configuration.operating_system or u'N/A' |
292 operating_system_product = ( | 297 operating_system_product = ( |
293 system_configuration.operating_system_product or u'N/A') | 298 system_configuration.operating_system_product or u'N/A') |
294 operating_system_version = ( | 299 operating_system_version = ( |
295 system_configuration.operating_system_version or u'N/A') | 300 system_configuration.operating_system_version or u'N/A') |
296 code_page = system_configuration.code_page or u'N/A' | 301 code_page = system_configuration.code_page or u'N/A' |
297 keyboard_layout = system_configuration.keyboard_layout or u'N/A' | 302 keyboard_layout = system_configuration.keyboard_layout or u'N/A' |
298 time_zone = system_configuration.time_zone or u'N/A' | 303 time_zone = system_configuration.time_zone or u'N/A' |
299 | 304 |
300 table_view.AddRow([u'Hostname', hostname]) | 305 table_view.AddRow([u'Hostname', hostname]) |
301 table_view.AddRow([u'Operating system', operating_system]) | 306 table_view.AddRow([u'Operating system', operating_system]) |
302 table_view.AddRow([u'Operating system product', operating_system_product]) | 307 table_view.AddRow([u'Operating system product', operating_system_product]) |
303 table_view.AddRow([u'Operating system version', operating_system_version]) | 308 table_view.AddRow([u'Operating system version', operating_system_version]) |
304 table_view.AddRow([u'Code page', code_page]) | 309 table_view.AddRow([u'Code page', code_page]) |
305 table_view.AddRow([u'Keyboard layout', keyboard_layout]) | 310 table_view.AddRow([u'Keyboard layout', keyboard_layout]) |
306 table_view.AddRow([u'Time zone', time_zone]) | 311 table_view.AddRow([u'Time zone', time_zone]) |
307 | 312 |
308 table_view.Write(self._output_writer) | 313 table_view.Write(self._output_writer) |
309 | 314 |
310 title = u'User accounts' | 315 title = u'User accounts' |
311 table_view = cli_views.ViewsFactory.GetTableView( | 316 table_view = views.ViewsFactory.GetTableView( |
312 self._views_format_type, title=title) | 317 self._views_format_type, title=title) |
313 | 318 |
314 for user_account in system_configuration.user_accounts: | 319 for user_account in system_configuration.user_accounts: |
315 table_view.AddRow([ | 320 table_view.AddRow([ |
316 user_account.username, user_account.user_directory]) | 321 user_account.username, user_account.user_directory]) |
317 | 322 |
318 table_view.Write(self._output_writer) | 323 table_view.Write(self._output_writer) |
319 | 324 |
320 def _PrintSessionsDetails(self, storage): | 325 def _PrintSessionsDetails(self, storage): |
321 """Prints the details of the sessions. | 326 """Prints the details of the sessions. |
(...skipping 17 matching lines...) Expand all Loading... | |
339 if session.enabled_parser_names: | 344 if session.enabled_parser_names: |
340 enabled_parser_names = u', '.join(sorted(session.enabled_parser_names)) | 345 enabled_parser_names = u', '.join(sorted(session.enabled_parser_names)) |
341 | 346 |
342 command_line_arguments = session.command_line_arguments or u'N/A' | 347 command_line_arguments = session.command_line_arguments or u'N/A' |
343 parser_filter_expression = session.parser_filter_expression or u'N/A' | 348 parser_filter_expression = session.parser_filter_expression or u'N/A' |
344 preferred_encoding = session.preferred_encoding or u'N/A' | 349 preferred_encoding = session.preferred_encoding or u'N/A' |
345 filter_file = session.filter_file or u'N/A' | 350 filter_file = session.filter_file or u'N/A' |
346 filter_expression = session.filter_expression or u'N/A' | 351 filter_expression = session.filter_expression or u'N/A' |
347 | 352 |
348 title = u'Session: {0!s}'.format(session_identifier) | 353 title = u'Session: {0!s}'.format(session_identifier) |
349 table_view = cli_views.ViewsFactory.GetTableView( | 354 table_view = views.ViewsFactory.GetTableView( |
350 self._views_format_type, title=title) | 355 self._views_format_type, title=title) |
351 | 356 |
352 table_view.AddRow([u'Start time', start_time]) | 357 table_view.AddRow([u'Start time', start_time]) |
353 table_view.AddRow([u'Completion time', completion_time]) | 358 table_view.AddRow([u'Completion time', completion_time]) |
354 table_view.AddRow([u'Product name', session.product_name]) | 359 table_view.AddRow([u'Product name', session.product_name]) |
355 table_view.AddRow([u'Product version', session.product_version]) | 360 table_view.AddRow([u'Product version', session.product_version]) |
356 table_view.AddRow([u'Command line arguments', command_line_arguments]) | 361 table_view.AddRow([u'Command line arguments', command_line_arguments]) |
357 table_view.AddRow([u'Parser filter expression', parser_filter_expression]) | 362 table_view.AddRow([u'Parser filter expression', parser_filter_expression]) |
358 table_view.AddRow([u'Enabled parser and plugins', enabled_parser_names]) | 363 table_view.AddRow([u'Enabled parser and plugins', enabled_parser_names]) |
359 table_view.AddRow([u'Preferred encoding', preferred_encoding]) | 364 table_view.AddRow([u'Preferred encoding', preferred_encoding]) |
(...skipping 18 matching lines...) Expand all Loading... | |
378 self._PrintEventLabelsCounter( | 383 self._PrintEventLabelsCounter( |
379 session.event_labels_counter, | 384 session.event_labels_counter, |
380 session_identifier=session_identifier) | 385 session_identifier=session_identifier) |
381 | 386 |
382 def _PrintSessionsOverview(self, storage): | 387 def _PrintSessionsOverview(self, storage): |
383 """Prints a sessions overview. | 388 """Prints a sessions overview. |
384 | 389 |
385 Args: | 390 Args: |
386 storage (BaseStorage): storage. | 391 storage (BaseStorage): storage. |
387 """ | 392 """ |
388 table_view = cli_views.ViewsFactory.GetTableView( | 393 table_view = views.ViewsFactory.GetTableView( |
389 self._views_format_type, title=u'Sessions') | 394 self._views_format_type, title=u'Sessions') |
390 | 395 |
391 for session in storage.GetSessions(): | 396 for session in storage.GetSessions(): |
392 start_time = timelib.Timestamp.CopyToIsoFormat( | 397 start_time = timelib.Timestamp.CopyToIsoFormat( |
393 session.start_time) | 398 session.start_time) |
394 session_identifier = uuid.UUID(hex=session.identifier) | 399 session_identifier = uuid.UUID(hex=session.identifier) |
395 table_view.AddRow([str(session_identifier), start_time]) | 400 table_view.AddRow([str(session_identifier), start_time]) |
396 | 401 |
397 table_view.Write(self._output_writer) | 402 table_view.Write(self._output_writer) |
398 | 403 |
399 def _PrintStorageInformationAsText(self, storage): | 404 def _PrintStorageInformationAsText(self, storage): |
400 """Prints information about the storage as human-readable text. | 405 """Prints information about the storage as human-readable text. |
401 | 406 |
402 Args: | 407 Args: |
403 storage (BaseStorage): storage. | 408 storage (BaseStorage): storage. |
404 """ | 409 """ |
405 table_view = cli_views.ViewsFactory.GetTableView( | 410 table_view = views.ViewsFactory.GetTableView( |
406 self._views_format_type, title=u'Plaso Storage Information') | 411 self._views_format_type, title=u'Plaso Storage Information') |
407 table_view.AddRow([u'Filename', os.path.basename(self._storage_file_path)]) | 412 table_view.AddRow([u'Filename', os.path.basename(self._storage_file_path)]) |
408 table_view.AddRow([u'Format version', storage.format_version]) | 413 table_view.AddRow([u'Format version', storage.format_version]) |
409 table_view.AddRow([u'Serialization format', storage.serialization_format]) | 414 table_view.AddRow([u'Serialization format', storage.serialization_format]) |
410 table_view.Write(self._output_writer) | 415 table_view.Write(self._output_writer) |
411 | 416 |
412 if storage.storage_type == definitions.STORAGE_TYPE_SESSION: | 417 if storage.storage_type == definitions.STORAGE_TYPE_SESSION: |
413 self._PrintSessionsOverview(storage) | 418 self._PrintSessionsOverview(storage) |
414 self._PrintSessionsDetails(storage) | 419 self._PrintSessionsDetails(storage) |
415 | 420 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
454 self._output_writer.Write(u'"session_{0:s}": {1:s} '.format( | 459 self._output_writer.Write(u'"session_{0:s}": {1:s} '.format( |
455 session.identifier, json_string)) | 460 session.identifier, json_string)) |
456 self._output_writer.Write(u'}') | 461 self._output_writer.Write(u'}') |
457 | 462 |
458 def _PrintTasksInformation(self, storage): | 463 def _PrintTasksInformation(self, storage): |
459 """Prints information about the tasks. | 464 """Prints information about the tasks. |
460 | 465 |
461 Args: | 466 Args: |
462 storage (BaseStorage): storage. | 467 storage (BaseStorage): storage. |
463 """ | 468 """ |
464 table_view = cli_views.ViewsFactory.GetTableView( | 469 table_view = views.ViewsFactory.GetTableView( |
465 self._views_format_type, title=u'Tasks') | 470 self._views_format_type, title=u'Tasks') |
466 | 471 |
467 for task_start, _ in storage.GetSessions(): | 472 for task_start, _ in storage.GetSessions(): |
468 start_time = timelib.Timestamp.CopyToIsoFormat( | 473 start_time = timelib.Timestamp.CopyToIsoFormat( |
469 task_start.timestamp) | 474 task_start.timestamp) |
470 task_identifier = uuid.UUID(hex=task_start.identifier) | 475 task_identifier = uuid.UUID(hex=task_start.identifier) |
471 table_view.AddRow([str(task_identifier), start_time]) | 476 table_view.AddRow([str(task_identifier), start_time]) |
472 | 477 |
473 table_view.Write(self._output_writer) | 478 table_view.Write(self._output_writer) |
474 | 479 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
518 Returns: | 523 Returns: |
519 bool: True if the arguments were successfully parsed. | 524 bool: True if the arguments were successfully parsed. |
520 """ | 525 """ |
521 self._ConfigureLogging() | 526 self._ConfigureLogging() |
522 | 527 |
523 argument_parser = argparse.ArgumentParser( | 528 argument_parser = argparse.ArgumentParser( |
524 description=self.DESCRIPTION, add_help=False, | 529 description=self.DESCRIPTION, add_help=False, |
525 formatter_class=argparse.RawDescriptionHelpFormatter) | 530 formatter_class=argparse.RawDescriptionHelpFormatter) |
526 | 531 |
527 self.AddBasicOptions(argument_parser) | 532 self.AddBasicOptions(argument_parser) |
528 self.AddStorageFileOptions(argument_parser) | 533 |
534 helpers_manager.ArgumentHelperManager.AddCommandLineArguments( | |
535 argument_parser, names=[u'storage_file']) | |
529 | 536 |
530 argument_parser.add_argument( | 537 argument_parser.add_argument( |
531 u'-v', u'--verbose', dest=u'verbose', action=u'store_true', | 538 u'-v', u'--verbose', dest=u'verbose', action=u'store_true', |
532 default=False, help=u'Print verbose output.') | 539 default=False, help=u'Print verbose output.') |
533 | 540 |
534 argument_parser.add_argument( | 541 argument_parser.add_argument( |
535 u'--compare', dest=u'compare_storage_file', type=str, | 542 u'--compare', dest=u'compare_storage_file', type=str, |
536 action=u'store', default=u'', metavar=u'STORAGE_FILE', help=( | 543 action=u'store', default=u'', metavar=u'STORAGE_FILE', help=( |
537 u'The path of the storage file to compare against.')) | 544 u'The path of the storage file to compare against.')) |
538 | 545 |
(...skipping 23 matching lines...) Expand all Loading... | |
562 | 569 |
563 def ParseOptions(self, options): | 570 def ParseOptions(self, options): |
564 """Parses the options. | 571 """Parses the options. |
565 | 572 |
566 Args: | 573 Args: |
567 options (argparse.Namespace): command line arguments. | 574 options (argparse.Namespace): command line arguments. |
568 | 575 |
569 Raises: | 576 Raises: |
570 BadConfigOption: if the options are invalid. | 577 BadConfigOption: if the options are invalid. |
571 """ | 578 """ |
572 super(PinfoTool, self).ParseOptions(options) | 579 self._ParseInformationalOptions(options) |
573 | 580 |
574 if self._debug_mode: | 581 if self._debug_mode: |
575 logging_level = logging.DEBUG | 582 logging_level = logging.DEBUG |
576 elif self._quiet_mode: | 583 elif self._quiet_mode: |
577 logging_level = logging.WARNING | 584 logging_level = logging.WARNING |
578 else: | 585 else: |
579 logging_level = logging.INFO | 586 logging_level = logging.INFO |
580 | 587 |
581 self._ConfigureLogging(log_level=logging_level) | 588 self._ConfigureLogging(log_level=logging_level) |
582 | 589 |
583 self._verbose = getattr(options, u'verbose', False) | 590 self._verbose = getattr(options, u'verbose', False) |
584 | 591 |
592 helpers_manager.ArgumentHelperManager.ParseOptions( | |
593 options, self, names=[u'storage_file']) | |
594 | |
595 # TODO: move check into _CheckStorageFile. | |
596 if not self._storage_file_path: | |
597 raise errors.BadConfigOption(u'Missing storage file option.') | |
598 | |
599 if not os.path.isfile(self._storage_file_path): | |
600 raise errors.BadConfigOption( | |
601 u'No such storage file: {0:s}.'.format(self._storage_file_path)) | |
602 | |
585 compare_storage_file_path = self.ParseStringOption( | 603 compare_storage_file_path = self.ParseStringOption( |
586 options, u'compare_storage_file') | 604 options, u'compare_storage_file') |
587 if compare_storage_file_path: | 605 if compare_storage_file_path: |
588 if not os.path.isfile(compare_storage_file_path): | 606 if not os.path.isfile(compare_storage_file_path): |
589 raise errors.BadConfigOption( | 607 raise errors.BadConfigOption( |
590 u'No such storage file: {0:s}.'.format(compare_storage_file_path)) | 608 u'No such storage file: {0:s}.'.format(compare_storage_file_path)) |
591 | 609 |
592 self._compare_storage_file_path = compare_storage_file_path | 610 self._compare_storage_file_path = compare_storage_file_path |
593 self.compare_storage_information = True | 611 self.compare_storage_information = True |
594 | 612 |
(...skipping 10 matching lines...) Expand all Loading... | |
605 self._storage_file_path, exception)) | 623 self._storage_file_path, exception)) |
606 return | 624 return |
607 | 625 |
608 try: | 626 try: |
609 if self._output_format == u'json': | 627 if self._output_format == u'json': |
610 self._PrintStorageInformationAsJSON(storage_file) | 628 self._PrintStorageInformationAsJSON(storage_file) |
611 elif self._output_format == u'text': | 629 elif self._output_format == u'text': |
612 self._PrintStorageInformationAsText(storage_file) | 630 self._PrintStorageInformationAsText(storage_file) |
613 finally: | 631 finally: |
614 storage_file.Close() | 632 storage_file.Close() |
OLD | NEW |