[docs]defmain():"""Main CLI App."""parser=ArgumentParser(description="Python Log Analyzer")parser.add_argument("--file",type=str,nargs="+",default=2,help="provide a file(s) for analyze",required=True,)parser.add_argument("--report",type=str,default=2,help="provide a report type",required=True)parser.add_argument("--date",type=str,default=None,help="provide a date filter (%%Y-%%m-%%d)")parser.add_argument("--user-agent",type=str,default=None,help="provide a user agent filter")parser.add_argument("--fileformat",type=str,default="log",help="provide a fileformat (log or json)",)args=parser.parse_args()files=args.filedata=[]filters=[]load_method=load_log_dataifargs.fileformat=="log"elseload_json_datatry:forfileinfiles:data+=load_method(file)except(FileNotFoundError,PermissionError,json.decoder.JSONDecodeError)asex:print(f"Fatal error when opening {file}: {ex}")returnifargs.date:validate_date(args.date)filters.append(create_date_filter(args.date))ifargs.user_agent:filters.append(create_user_agent_filter(args.user_agent))report_type=reports_types.get(args.report)ifreport_typeisNone:print(f"Fatal error: {args.report} report type not supported.")returnreport_manager=ReportManager(report_type,data,filters)report=report_manager.generate()print(tabulate(report,showindex="always",headers="keys"))