@@ -1617,19 +1617,27 @@ def _stats_visualize(args) -> None:
16171617 from rushti .dashboard import generate_dashboard
16181618 from rushti .db_admin import get_visualization_data
16191619 from rushti .settings import load_settings
1620- from rushti .stats import get_db_path , get_stats_backend
1620+ from rushti .stats import create_stats_database , get_db_path , get_stats_backend
16211621 from rushti .utils import resolve_app_path
16221622
16231623 settings = load_settings (getattr (args , "settings_file" , None ))
1624- if get_stats_backend (settings ) != "sqlite" :
1625- print ("Error: 'stats visualize' currently supports only [stats] backend = sqlite" )
1626- sys .exit (1 )
1624+ backend = get_stats_backend (settings )
16271625 db_path = get_db_path (settings )
16281626
1627+ stats_db = None
16291628 try :
1630- print (f"Generating visualizations for workflow: { args .workflow } " )
1629+ stats_db = create_stats_database (
1630+ enabled = True ,
1631+ backend = backend ,
1632+ db_path = db_path ,
1633+ dynamodb_region = settings .stats .dynamodb_region or None ,
1634+ dynamodb_runs_table = settings .stats .dynamodb_runs_table ,
1635+ dynamodb_task_results_table = settings .stats .dynamodb_task_results_table ,
1636+ dynamodb_endpoint_url = settings .stats .dynamodb_endpoint_url or None ,
1637+ )
1638+ data = get_visualization_data (args .workflow , stats_db )
16311639
1632- data = get_visualization_data ( args .workflow , db_path )
1640+ print ( f"Generating visualizations for workflow: { args .workflow } " )
16331641 if not data .get ("exists" ):
16341642 print (f"Error: { data .get ('message' )} " )
16351643 sys .exit (1 )
@@ -1710,6 +1718,9 @@ def _stats_visualize(args) -> None:
17101718
17111719 traceback .print_exc ()
17121720 sys .exit (1 )
1721+ finally :
1722+ if stats_db is not None :
1723+ stats_db .close ()
17131724
17141725
17151726def _stats_list (args ) -> None :
@@ -1721,18 +1732,26 @@ def _stats_list(args) -> None:
17211732 """
17221733 from rushti .db_admin import list_runs , list_tasks
17231734 from rushti .settings import load_settings
1724- from rushti .stats import get_db_path , get_stats_backend
1735+ from rushti .stats import create_stats_database , get_db_path , get_stats_backend
17251736
17261737 settings = load_settings (getattr (args , "settings_file" , None ))
1727- if get_stats_backend (settings ) != "sqlite" :
1728- print ("Error: 'stats list' currently supports only [stats] backend = sqlite" )
1729- print ("For DynamoDB-backed stats, use 'stats analyze' or 'stats export'." )
1730- sys .exit (1 )
1738+ backend = get_stats_backend (settings )
17311739 db_path = get_db_path (settings )
17321740
1741+ stats_db = None
17331742 try :
1743+ stats_db = create_stats_database (
1744+ enabled = True ,
1745+ backend = backend ,
1746+ db_path = db_path ,
1747+ dynamodb_region = settings .stats .dynamodb_region or None ,
1748+ dynamodb_runs_table = settings .stats .dynamodb_runs_table ,
1749+ dynamodb_task_results_table = settings .stats .dynamodb_task_results_table ,
1750+ dynamodb_endpoint_url = settings .stats .dynamodb_endpoint_url or None ,
1751+ )
1752+
17341753 if args .list_type == "runs" :
1735- runs = list_runs (args .workflow , db_path , limit = args .limit )
1754+ runs = list_runs (args .workflow , stats_db , limit = args .limit )
17361755 if not runs :
17371756 print (f"No runs found for workflow: { args .workflow } " )
17381757 sys .exit (0 )
@@ -1751,7 +1770,7 @@ def _stats_list(args) -> None:
17511770 )
17521771
17531772 elif args .list_type == "tasks" :
1754- tasks = list_tasks (args .workflow , db_path )
1773+ tasks = list_tasks (args .workflow , stats_db )
17551774 if not tasks :
17561775 print (f"No tasks found for workflow: { args .workflow } " )
17571776 sys .exit (0 )
@@ -1779,6 +1798,9 @@ def _stats_list(args) -> None:
17791798 except Exception as e :
17801799 print (f"Error: { e } " )
17811800 sys .exit (1 )
1801+ finally :
1802+ if stats_db is not None :
1803+ stats_db .close ()
17821804
17831805
17841806def run_db_command (argv : list ) -> None :
0 commit comments