Changeset 1877 for XIOS/trunk/src


Ignore:
Timestamp:
05/13/20 16:46:00 (4 years ago)
Author:
yushan
Message:

trunk : each context has its own graph file

Location:
XIOS/trunk/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • XIOS/trunk/src/filter/file_writer_filter.cpp

    r1704 r1877  
    3030      namestring.erase(0, 6); 
    3131      namestring.erase(namestring.length()-1, 1); 
    32  
    33       CWorkflowGraph::addNode(this->filterID, namestring + "\\n("+this->field->file->getId()+".nc)", 6, 0, 1, data[0]); 
     32       
     33      CWorkflowGraph::addNode(this->filterID, namestring + "\\n(file ID : "+this->field->file->getId()+")", 6, 0, 1, data[0]); 
    3434 
    3535      (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); 
  • XIOS/trunk/src/filter/source_filter.cpp

    r1876 r1877  
    4141      packet->distance = 1; 
    4242       
    43      
    4443      CWorkflowGraph::allocNodeEdge(); 
    45  
     44       
    4645      CWorkflowGraph::addNode(this->filterID, "Source Filter ", 1, 1, 0, packet); 
    4746      (*CWorkflowGraph::mapFilters_ptr_with_info)[this->filterID].attributes = this->field->record4graphXiosAttributes(); 
  • XIOS/trunk/src/graphviz.cpp

    r1704 r1877  
    5555 
    5656      boost::write_graphviz(file, g, 
    57           boost::make_label_writer(&nodes[0]), 
    58           boost::make_label_writer(get(edge_name, g)), 
    59           boost::make_graph_attributes_writer(graph_attr, vertex_attr, edge_attr)); 
     57      boost::make_label_writer(&nodes[0]), 
     58      boost::make_label_writer(get(edge_name, g)), 
     59      boost::make_graph_attributes_writer(graph_attr, vertex_attr, edge_attr)); 
    6060          
    6161    } 
     
    7272    { 
    7373      CWorkflowGraph::buildStaticWorkflow_with_info(); 
     74      int nbGraphContext = CWorkflowGraph::mapContext_ptr->size(); 
    7475 
    7576      StdString color_table[7] = {"black", "red", "blue", "green", "purple", "yellow", "gray"}; 
    7677     
    77       std::ofstream fs_json; 
    78       fs_json.open ("graph_data.json", std::fstream::out); 
     78      std::ofstream fs_json[nbGraphContext]; 
     79       
     80      for (std::unordered_map<StdString, int>::const_iterator it = CWorkflowGraph::mapContext_ptr->begin(); it != CWorkflowGraph::mapContext_ptr->end(); ++it)  
     81      { 
     82        fs_json[it->second].open ("graph_data_"+it->first+".json", std::fstream::out); 
     83        fs_json[it->second] << "{\"nodes\":["<<std::endl<<"      "; 
     84      } 
    7985 
    80       fs_json << "{\"nodes\":["<<std::endl<<"      "; 
    81       static bool firstnode=true; 
    82       static bool firstedge=true; 
    83      
     86      static bool firstnodes[5]; 
     87      static bool firstedges[5]; 
     88 
     89      for(int i=0; i<nbGraphContext; i++) 
     90      { 
     91        firstnodes[i]=true; 
     92        firstedges[i]=true; 
     93      } 
     94 
    8495      for (auto it=CWorkflowGraph::mapFilters_ptr_with_info->begin(); it != CWorkflowGraph::mapFilters_ptr_with_info->end(); it++) 
    8596      { 
    86         if(firstnode)  
     97        int index = (*CWorkflowGraph::mapContext_ptr)[it->second.node_context_id]; 
     98        if(firstnodes[index])  
    8799        { 
    88           fs_json << "{\"id\": "<<it->first +1<<", "<<std::endl; 
    89           firstnode = false; 
     100          fs_json[index] << "{\"id\": "<<it->first +1<<", "<<std::endl; 
     101          firstnodes[index] = false; 
    90102        } 
    91103        else 
    92104        { 
    93           fs_json << ",{\"id\": "<<it->first +1<<", "<<std::endl; 
     105          fs_json[index] << ",{\"id\": "<<it->first +1<<", "<<std::endl; 
    94106        } 
    95107        if(it->second.filter_class == 1) // source filter 
    96           fs_json << "       \"label\": \""<<it->second.filter_name<<"\\n("<<it->second.field_id<<")\", "<<std::endl; 
     108          fs_json[index] << "       \"label\": \""<<it->second.filter_name<<"\\n("<<it->second.field_id<<")\", "<<std::endl; 
    97109        else 
    98           fs_json << "       \"label\": \""<<it->second.filter_name<<"\", "<<std::endl; 
    99         fs_json << "       \"class\": "<<it->second.filter_class<<", "<<std::endl; 
    100         fs_json << "       \"filled\": "<<it->second.filter_filled<<", "<<std::endl; 
    101         fs_json << "       \"type\": \""<<it->second.transform_type<<"\", "<<std::endl; 
    102         fs_json << "       \"entry\": "<<it->second.expected_entry_nb<<", "<<std::endl; 
    103         fs_json << "       \"inputs\": "<<it->second.inputs_complete<<", "<<std::endl; 
    104         fs_json << "       \"tag\": "<<it->second.filter_tag<<", "<<std::endl; 
    105         fs_json << "       \"cid\": "<<it->second.clusterID<<", "<<std::endl; 
    106         fs_json << "       \"distance\": "<<it->second.distance<<", "<<std::endl; 
    107         fs_json << "       \"attributes\": \""<<it->second.attributes<<"\"}"<<std::endl<<"      "; 
     110          fs_json[index] << "       \"label\": \""<<it->second.filter_name<<"\", "<<std::endl; 
     111        fs_json[index] << "       \"class\": "<<it->second.filter_class<<", "<<std::endl; 
     112        fs_json[index] << "       \"filled\": "<<it->second.filter_filled<<", "<<std::endl; 
     113        fs_json[index] << "       \"type\": \""<<it->second.transform_type<<"\", "<<std::endl; 
     114        fs_json[index] << "       \"entry\": "<<it->second.expected_entry_nb<<", "<<std::endl; 
     115        fs_json[index] << "       \"inputs\": "<<it->second.inputs_complete<<", "<<std::endl; 
     116        fs_json[index] << "       \"tag\": "<<it->second.filter_tag<<", "<<std::endl; 
     117        fs_json[index] << "       \"cid\": "<<it->second.clusterID<<", "<<std::endl; 
     118        fs_json[index] << "       \"distance\": "<<it->second.distance<<", "<<std::endl; 
     119        fs_json[index] << "       \"context\": \""<<it->second.node_context_id<<"\", "<<std::endl; 
     120        fs_json[index] << "       \"attributes\": \""<<it->second.attributes<<"\"}"<<std::endl<<"       "; 
    108121      } 
    109       fs_json << "    ],"<<std::endl; 
    110  
    111  
    112       fs_json << " \"edges\" : ["<<std::endl<<"      "; 
     122      for(int i=0; i<nbGraphContext; i++)  
     123      { 
     124        fs_json[i] << "    ],"<<std::endl; 
     125        fs_json[i] << " \"edges\" : ["<<std::endl<<"      "; 
     126      } 
    113127 
    114128      for (auto it=CWorkflowGraph::mapFieldToFilters_ptr_with_info->begin(); it != CWorkflowGraph::mapFieldToFilters_ptr_with_info->end(); it++) 
    115129      { 
    116         if(firstedge) 
     130        int index = (*CWorkflowGraph::mapContext_ptr)[it->second.edge_context_id]; 
     131        if(firstedges[index]) 
    117132        { 
    118           fs_json << "{\"id\": "<<it->first +1<<", "<<std::endl; 
    119           firstedge = false; 
     133          fs_json[index] << "{\"id\": "<<it->first +1<<", "<<std::endl; 
     134          firstedges[index] = false; 
    120135        } 
    121136        else 
    122137        { 
    123           fs_json << ",{\"id\": "<<it->first +1<<", "<<std::endl; 
     138          fs_json[index] << ",{\"id\": "<<it->first +1<<", "<<std::endl; 
    124139        } 
    125         fs_json << "       \"from\": "<<it->second.from+1<<", "<<std::endl; 
    126         fs_json << "       \"to\": "<<it->second.to+1<<", "<<std::endl; 
    127         fs_json << "       \"label\": \""<<it->second.field_id<<"\\n"<<it->second.date<<"\", "<<std::endl; 
     140        fs_json[index] << "       \"from\": "<<it->second.from+1<<", "<<std::endl; 
     141        fs_json[index] << "       \"to\": "<<it->second.to+1<<", "<<std::endl; 
     142        fs_json[index] << "       \"label\": \""<<it->second.field_id<<"\\n"<<it->second.date<<"\", "<<std::endl; 
    128143        // fs_json << "       \"title\": \""<<"Show more information about this field"<<"\", "<<std::endl; 
    129144        // fs_json << "       \"fid\": \""<<it->second.field_id<<"\", "<<std::endl; 
    130145        // fs_json << "       \"fname\": \""<<it->second.field_name<<"\", "<<std::endl; 
    131146        // fs_json << "       \"gid\": \""<<it->second.grid_id<<"\", "<<std::endl; 
    132         fs_json << "       \"date\": \""<<it->second.date<<"\", "<<std::endl; 
    133         fs_json << "       \"attributes\": \"id = "<<it->second.field_id<<"</br>"<<it->second.attributes<<"\"}"<<std::endl<<"      "; 
    134  
     147        fs_json[index] << "       \"date\": \""<<it->second.date<<"\", "<<std::endl; 
     148        fs_json[index] << "       \"context\": \""<<it->second.edge_context_id<<"\", "<<std::endl; 
     149        fs_json[index] << "       \"attributes\": \"id = "<<it->second.field_id<<"</br>"<<it->second.attributes<<"\"}"<<std::endl<<"       "; 
    135150      } 
    136       fs_json << "    ]}"<<std::endl; 
    137  
    138       fs_json.close(); 
     151      for(int i=0; i<nbGraphContext; i++) 
     152      { 
     153        fs_json[i] << "    ]}"<<std::endl; 
     154        fs_json[i].close(); 
     155      } 
    139156    } 
    140157  } 
  • XIOS/trunk/src/workflow_graph.cpp

    r1704 r1877  
    99 
    1010  std::unordered_map <size_t, int> *CWorkflowGraph::mapHashFilterID_ptr = 0; 
     11   
     12  std::unordered_map <StdString, int > *CWorkflowGraph::mapContext_ptr = 0; 
    1113 
    1214 
     
    125127  TRY 
    126128  { 
     129    if(!mapContext_ptr) mapContext_ptr = new std::unordered_map<StdString, int>; 
     130    std::string current_context_id = CContext::getCurrent()->getId(); 
     131    std::unordered_map<StdString,int>::const_iterator found = mapContext_ptr->find(current_context_id); 
     132    if (found == mapContext_ptr->end()) 
     133    { 
     134      std::pair<StdString, int> mypair (current_context_id, mapContext_ptr->size()); 
     135      mapContext_ptr->insert(mypair); 
     136    } 
     137 
    127138    (*mapFilters_ptr_with_info)[nodeID].filter_name = filterName; 
    128139    (*mapFilters_ptr_with_info)[nodeID].filter_class = filterClass; 
     
    131142    (*mapFilters_ptr_with_info)[nodeID].date = packet->date; 
    132143    (*mapFilters_ptr_with_info)[nodeID].timestamp = packet->timestamp; 
     144    (*mapFilters_ptr_with_info)[nodeID].node_context_id = CContext::getCurrent()->getId(); 
    133145  } 
    134146  CATCH 
     
    139151  TRY 
    140152  { 
     153    std::string current_context_id = CContext::getCurrent()->getId(); 
    141154    (*mapFieldToFilters_ptr_with_info)[edgeID].from = packet->src_filterID; 
    142155    (*mapFieldToFilters_ptr_with_info)[edgeID].to = toID; 
     
    148161    (*mapFieldToFilters_ptr_with_info)[edgeID].field = packet->field; 
    149162    (*mapFieldToFilters_ptr_with_info)[edgeID].attributes = packet->field->record4graphXiosAttributes(); 
     163    (*mapFieldToFilters_ptr_with_info)[edgeID].edge_context_id = CContext::getCurrent()->getId(); 
    150164  } 
    151165  CATCH 
  • XIOS/trunk/src/workflow_graph.hpp

    r1704 r1877  
    88#include "date.hpp" 
    99#include "duration.hpp" 
    10  
     10#include "context.hpp" 
    1111 
    1212namespace xios 
     
    3030    int clusterID; 
    3131    int distance; 
     32    StdString node_context_id; 
    3233  }; 
    3334 
     
    4344    CField *field; 
    4445    StdString attributes; 
    45      
     46    StdString edge_context_id; 
    4647  }; 
    4748 
     
    6869 
    6970      static std::unordered_map <size_t, int> *mapHashFilterID_ptr; 
     71       
     72      static std::unordered_map <StdString, int> *mapContext_ptr; 
    7073 
    7174 
Note: See TracChangeset for help on using the changeset viewer.