@@ -29,69 +29,72 @@ __license__ = "GPLv3"
29
29
__maintainer__ = "Joaquin Bogado"
30
30
__version__ = "1.0.0"
31
31
32
+ import argparse
32
33
import logging
33
- import pandas as pd
34
-
35
- from aip .data .access import data_path , project_dir
34
+ from datetime import date
35
+ from os import makedirs
36
+ from os import path
37
+ from aip .data .access import data_path
36
38
from aip .models .alpha import Alpha
37
39
from aip .models .prioritize import New
38
40
from aip .models .prioritize import Consistent
39
41
from aip .models .prioritize import RandomForest
40
- from os import makedirs , path , scandir
41
- from datetime import date , timedelta , datetime
42
- import sys
43
-
42
+ from aip .utils .date_utils import validate_and_convert_date
44
43
45
- def validate_and_convert_date (date_str ):
46
- """
47
- Validates a date string in 'YYYY-MM-DD' format and converts it to a date object.
48
- """
49
- try :
50
- dateobj = datetime .strptime (date_str , '%Y-%m-%d' )
51
- return dateobj .date ()
52
- except ValueError as e :
53
- print ('Invalid date format. It should be YYYY-MM-DD' )
54
- raise e
55
44
56
- def run_model (aip_model_name , aip_output_dir , aip_model , date_day ):
45
+ def run_model (aip_model_name , aip_model , date_day ):
57
46
"""
58
47
Run a given model with exception handling
59
48
"""
60
49
blocklist = ""
50
+ model_output_dir = path .join (data_path ,'output' ,aip_model_name )
61
51
# Make sure output directory is created
62
- if not path .exists (aip_output_dir ):
63
- makedirs (aip_output_dir )
52
+ if not path .exists (model_output_dir ):
53
+ makedirs (model_output_dir )
64
54
65
55
try :
66
- blocklist = aip_model .run (day )
67
- blocklist .to_csv (path .join (aip_output_dir , f'AIP-{ aip_model_name } -{ str (date_day )} .csv.gz' ), index = False , compression = 'gzip' )
56
+ blocklist = aip_model .run (date_day )
57
+ blocklist .to_csv (path .join (model_output_dir , f'AIP-{ aip_model_name } -{ str (date_day )} .csv.gz' ), index = False , compression = 'gzip' )
68
58
logging .info (f"{ aip_model_name } model completed successfully." )
69
59
except Exception as e :
70
60
logging .error (f"Error running { aip_model_name } model: { e } " , exc_info = True )
71
61
72
62
73
- if __name__ == '__main__' :
74
- if len (sys .argv ) == 2 :
75
- datestr = sys .argv [1 ]
76
- day = validate_and_convert_date (datestr )
77
- else :
78
- day = date .today ()
63
+ def main ():
64
+ parser = argparse .ArgumentParser (description = 'Attacker IP Prioritization (AIP) Tool' )
65
+ parser .add_argument ('--date' , type = str , help = 'The date for running the models in YYYY-MM-DD format. Defaults to today.' , default = str (date .today ()))
66
+ parser .add_argument ('--model' , type = str , choices = ['Alpha' , 'Alpha7' , 'Prioritize_New' , 'Prioritize_Consistent' , 'Random_Forest' , 'all' ], default = 'all' , help = 'Select AIP model to run. Defaults to all.' )
67
+ parser .add_argument ('-d' , '--debug' , required = False , help = "Debugging mode." , action = "store_const" , dest = "log_level" , const = logging .DEBUG , default = logging .ERROR ,)
68
+ parser .add_argument ('-v' , '--verbose' , required = False , help = "Verbose mode" , action = "store_const" , dest = "log_level" , const = logging .INFO ,)
69
+
70
+ args = parser .parse_args ()
79
71
80
72
# Set up logging
81
73
log_fmt = '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
82
- logging .basicConfig (level = logging .DEBUG , format = log_fmt )
74
+ logging .basicConfig (level = args .log_level , format = log_fmt )
75
+
76
+ # Validate input date
77
+ run_date_day = validate_and_convert_date (args .date )
83
78
84
79
# Run Alpha Model
85
- run_model ('Alpha' , path .join (data_path , 'output' , 'Alpha' ), Alpha (), day )
80
+ if args .model in ['Alpha' , 'all' ]:
81
+ run_model ('Alpha' , Alpha (), run_date_day )
86
82
87
83
# Alpha 7 Model
88
- run_model ('Alpha7' , path .join (data_path , 'output' , 'Alpha7' ), Alpha (lookback = 7 ), day )
84
+ if args .model in ['Alpha7' , 'all' ]:
85
+ run_model ('Alpha7' , Alpha (lookback = 7 ), run_date_day )
89
86
90
87
# Prioritize New Model
91
- run_model ('Prioritize_New' , path .join (data_path , 'output' , 'Prioritize_New' ), New (), day )
88
+ if args .model in ['Prioritize_New' , 'all' ]:
89
+ run_model ('Prioritize_New' , New (), run_date_day )
92
90
93
91
# Prioritize Consistent Model
94
- run_model ('Prioritize_Consistent' , path .join (data_path , 'output' , 'Prioritize_Consistent' ), Consistent (), day )
92
+ if args .model in ['Prioritize_Consistent' , 'all' ]:
93
+ run_model ('Prioritize_Consistent' , Consistent (), run_date_day )
95
94
96
95
# Prioritize Random Forest Model
97
- run_model ('Random_Forest' , path .join (data_path , 'output' , 'random_forest' ), RandomForest (), day )
96
+ if args .model in ['Random_Forest' , 'all' ]:
97
+ run_model ('Random_Forest' , RandomForest (), run_date_day )
98
+
99
+ if __name__ == '__main__' :
100
+ main ()
0 commit comments