def analyze()

in aiops/MicroAgents/agentnn/agentnn.py [0:0]


    def analyze(self, history_df_logs, history_df_traces, history_df_metrics, recent_df_logs, recent_df_traces, recent_df_metrics, metric_names=[], 
                organization_mode="backward",
                time_col='m_timestamp', log_col='m_message', window_size={'minutes':1}, k=3, summary=False, only_ad=False, order=1):
        
        print("#"*25, "DATA ANALYSIS", "#"*25)
        print(history_df_logs.shape)
        history_df_logs = history_df_logs.filter(pl.col(log_col).str.lengths()<=1000)
        similar_incidents = []
        for module, description in self.architecture.nodes(data=True):

            module_history_df_log = history_df_logs.filter(pl.col('PodName') == module)
            module_history_df_trace = history_df_traces.filter(pl.col('PodName') == module)
            module_history_df_metric = history_df_metrics.filter(pl.col('PodName') == module)
            

            module_recent_df_log = recent_df_logs.filter(pl.col('PodName') == module).filter(pl.col(log_col).str.lengths()<=1000)
            # module_recent_df_trace = recent_df_traces.filter(pl.col('PodName') == module)
            module_recent_df_trace = get_network_metrics(recent_df_traces, pod_name=module)
            module_recent_df_metric = recent_df_metrics.filter(pl.col('PodName') == module)

            logs = {
                "history_df": history_df_logs,
                "recent_df": module_recent_df_log,
                "time_col": time_col,
                "log_col": log_col,
                "window_size": window_size,
                "k": k,
                "summary": summary
            }

            traces = {
                "history_df": history_df_traces,
                "recent_df": module_recent_df_trace,
                "metric_columns": ["NetworkP90(ms)"],
                "k": k,
            }

            metrics = {
                "history_df": history_df_metrics,
                "recent_df": module_recent_df_metric,
                "metric_columns": metric_names,
                "k": k,
            }

            # if module_recent_df_log.shape[0] > 0:
            module_data_analysis_results, symptoms = self.data_layer.analyze(logs, traces, metrics, use_rule=False)
            # else:
            #     module_data_analysis_results, symptoms = "", []
            self.modules_info[module]['symptom'] = module_data_analysis_results
            self.modules_info[module]['symptom_list'] = symptoms
            if module_data_analysis_results:
                print('-'*25, f"MODULE {module} ANALYSIS", '-'*25)
                print(f"{module_data_analysis_results}\n")

            if (not self.rag is None) and module_data_analysis_results:
                similar_incident = self.rag.retrieve(symptoms)[:2]
                if similar_incident:
                    similar_incidents.extend(similar_incident)
        if (not self.rag is None) and len(similar_incidents)>0:
            similar_incidents = self.rag.retrieve_to_text(similar_incidents)
            print('Get similar incidents: \n', similar_incidents, '\n')
        else:
            similar_incidents = ""


        if only_ad:
            return ""


        print("#"*25, "SYSTEM ANALYSIS", "#"*25)
        system_analysis_results = self.system_layer.analyze(self.architecture, self.modules_info, organization_mode=organization_mode, k=1, layers=2)

        module_analysis_text = "The analysis results of the system are as follows: \n"
        count = 1


        if order==1:
            keys = system_analysis_results.keys()
        elif order == -1:
            keys = list(system_analysis_results.keys())[::-1]
        else:
            keys = list(system_analysis_results.keys())
            random.shuffle(keys)

        for key in keys:
            cur_analysis_text = (f"{count}. Module Name: {key}; \n "
                                     f"Module Function: {self.modules_info[key]['module_function']}; \n "  
                                     f"Module Dependency: {self.modules_info[key]['module_dependency']}; \n"
                                     f"Expert analysis result of module {key}: {system_analysis_results[key]}\n")

            if system_analysis_results[key]:
                print("-"*25, f'{count}. {key}', "-"*25)
                module_analysis_text += cur_analysis_text
                count += 1
                print(f"{cur_analysis_text}\n")
                


        
        module_list = ""
        count = 1
        for module in self.modules_info:
            if self.modules_info[module]['symptom']:
                if count > 10:
                    module_list += f"and etc."
                    break
                module_list += f"{module}, "
                count += 1
        
       
        system_info = {"system_introduction":self.system_intro,
                        "module_list": module_list,
                        "module_analysis": module_analysis_text,
                        "similar_incidents": similar_incidents}

        print("#"*25, "TASK ANALYSIS", "#"*25)

        task_analysis_results = self.task_layer.analyze(system_info)

        print(f"{task_analysis_results}")


        return task_analysis_results, module_analysis_text