in aristotle/aristotle.py [0:0]
def main():
"""Main method, called if run as script."""
global aristotle_logger
print_summary = False
# program is run not as library so add logging to console
aristotle_logger.addHandler(logging.StreamHandler())
# get command line args
try:
parser = get_parser()
args = parser.parse_args()
except Exception as e:
print_error("Problem parsing command line args: {}".format(e), fatal=True)
if args.debug:
aristotle_logger.setLevel(logging.DEBUG)
elif args.suppress_warnings:
aristotle_logger.setLevel(logging.ERROR)
else:
aristotle_logger.setLevel(logging.INFO)
if args.stats is None and args.metadata_filter is None:
print_error("'metadata_filter' or 'stats' option required. Neither provided.", fatal=True)
if args.display_max is None:
# option set but not max given; defaults to 16
args.display_max = 16
print_summary = True
elif args.display_max == -1:
# option not set
print_summary = False
else:
print_summary = True
# create object
rs = Ruleset(rules=args.rules, metadata_filter=args.metadata_filter,
enable_all_rules=args.enable_all_rules,
summary_max=args.display_max,
output_disabled_rules=args.output_disabled_rules,
ignore_classtype_keyword=args.ignore_classtype_keyword,
ignore_filename=args.ignore_filename,
normalize=args.normalize,
enhance=args.enhance,
modify_metadata=args.modify_metadata,
pfmod_file=args.pfmod_file)
if args.stats is None or rs.metadata_filter is not None:
filtered_sids = rs.filter_ruleset()
else:
filtered_sids = [s for s in rs.metadata_dict.keys()]
# print_debug("filtered_sids: {}".format(filtered_sids))
pfmod_sids = None
if rs.pfmod_file:
pfmod_sids = rs._pfmod_apply(rs.pfmod_file, filtered_sids)
# print_debug("pfmod_sids: {}".format(pfmod_sids))
# if stats requested, print out stats on filtered/modified ruleset
if args.stats is not None:
keys = []
keyonly = False
rs.print_header(sids=filtered_sids)
if len(args.stats) > 0:
# print stats for specified key(s)
keys = args.stats
else:
# print stats for ALL keys
keys = rs.keys_dict.keys()
keyonly = True
for key in keys:
rs.print_stats(key=key, keyonly=keyonly, sids=None if rs.metadata_filter is None else filtered_sids)
print("")
sys.exit(0)
if args.outfile == "<stdout>":
if print_summary:
rs.print_ruleset_summary(filtered_sids, pfmod_sids)
else:
rs.output_rules(sid_list=filtered_sids, outfile=None)
else:
if print_summary:
rs.print_ruleset_summary(filtered_sids, pfmod_sids)
rs.output_rules(sid_list=filtered_sids, outfile=args.outfile)