diff --git a/core/analytics/process_mining_bridge.py b/core/analytics/process_mining_bridge.py index e751c5b03..023b28d4d 100644 --- a/core/analytics/process_mining_bridge.py +++ b/core/analytics/process_mining_bridge.py @@ -391,26 +391,48 @@ def discover_bpmn( bpmn_exporter.apply(bpmn_model, bpmn_xml_path) logger.info("BPMN XML exporte : %s", bpmn_xml_path) - # Export image BPMN (PNG) + # Export image BPMN (PNG) — grande taille pour lisibilité bpmn_image_path = str(out / f"{name}_bpmn.png") try: - pm4py.save_vis_bpmn(bpmn_model, bpmn_image_path) + from pm4py.visualization.bpmn import visualizer as bpmn_vis + gviz = bpmn_vis.apply(bpmn_model, parameters={ + "rankdir": "TB", + "font_size": "12", + }) + gviz.graph_attr["dpi"] = "150" + gviz.graph_attr["size"] = "40,20!" + gviz.graph_attr["rankdir"] = "TB" + gviz.render(filename=bpmn_image_path.replace(".png", ""), format="png", cleanup=True) logger.info("BPMN PNG exporte : %s", bpmn_image_path) except Exception as e: - logger.warning("Impossible de generer l'image BPMN : %s", e) - bpmn_image_path = None + logger.warning("BPMN image fallback : %s", e) + try: + pm4py.save_vis_bpmn(bpmn_model, bpmn_image_path) + except Exception: + bpmn_image_path = None - # DFG (Directly-Follows Graph) avec performance + # DFG (Directly-Follows Graph) — grande taille dfg_image_path = str(out / f"{name}_dfg.png") try: - pm4py.save_vis_dfg( - *pm4py.discover_dfg(event_log_df), - file_path=dfg_image_path, - ) + from pm4py.visualization.dfg import visualizer as dfg_vis + dfg, sa, ea = pm4py.discover_dfg(event_log_df) + gviz = dfg_vis.apply(dfg, activities_count=sa, parameters={ + "start_activities": sa, + "end_activities": ea, + "rankdir": "TB", + "font_size": "11", + }) + gviz.graph_attr["dpi"] = "150" + gviz.graph_attr["size"] = "40,20!" + gviz.graph_attr["rankdir"] = "TB" + gviz.render(filename=dfg_image_path.replace(".png", ""), format="png", cleanup=True) logger.info("DFG PNG exporte : %s", dfg_image_path) except Exception as e: - logger.warning("Impossible de generer le DFG : %s", e) - dfg_image_path = None + logger.warning("DFG image fallback : %s", e) + try: + pm4py.save_vis_dfg(*pm4py.discover_dfg(event_log_df), file_path=dfg_image_path) + except Exception: + dfg_image_path = None # Petri net via Inductive Miner (pour visualisation alternative) petri_image_path = str(out / f"{name}_petri.png") diff --git a/web_dashboard/templates/process_mining.html b/web_dashboard/templates/process_mining.html index 188e0465d..3571837b7 100644 --- a/web_dashboard/templates/process_mining.html +++ b/web_dashboard/templates/process_mining.html @@ -230,7 +230,7 @@