Version: 9.12.0
driver.cxx File Reference
#include "yacsconfig.h"
#include "RuntimeSALOME.hxx"
#include "Proc.hxx"
#include "Logger.hxx"
#include "Exception.hxx"
#include "Executor.hxx"
#include "parsers.hxx"
#include "VisitorSalomeSaveState.hxx"
#include "VisitorSaveSalomeSchema.hxx"
#include "LoadState.hxx"
#include "Dispatcher.hxx"
#include "LinkInfo.hxx"
#include "ObserverAsPlugin.hxx"
#include "PythonNode.hxx"
#include "KernelBasis.hxx"
#include "SALOME_Launcher.hxx"
#include "ServiceUnreachable.hxx"
#include "SALOME_NamingService_Wrapper.hxx"
#include "SALOME_NamingService.hxx"
#include "SALOME_ModuleCatalog.hh"
#include "SALOMESDS_DataServerManager.hxx"
#include "Basics_Utils.hxx"
#include <iostream>
#include <fstream>
#include <signal.h>
#include <list>
#include <argp.h>
Include dependency graph for driver.cxx:

Go to the source code of this file.

Classes

struct  arguments
 
struct  thread_st
 

Typedefs

typedef void(* sighandler_t) (int)
 

Functions

static error_t parse_opt (int key, char *arg, struct argp_state *state)
 
void timer (std::string msg)
 
void Handler (int theSigId)
 
void * dumpState (void *arg)
 
sighandler_t setsig (int sig, sighandler_t handler)
 
bool parse_init_port (const std::string &input, std::string &node, std::string &port, std::string &value)
 
void InitializeSSL ()
 
void shutdownServers ()
 
int main (int argc, char *argv[])
 

Variables

const char * argp_program_version ="driver V0.1"
 
const char * argp_program_bug_address ="<nepal@nepal.edf.fr>"
 
static char doc [] ="driver -- a SALOME YACS graph executor"
 
static char args_doc [] = "graph.xml"
 
static struct argp_option options []
 
static struct argp argp = { options, parse_opt, args_doc, doc }
 
Procp =0
 
static struct arguments myArgs
 

Typedef Documentation

◆ sighandler_t

typedef void(* sighandler_t) (int)

Definition at line 277 of file driver.cxx.

Function Documentation

◆ dumpState()

void* dumpState ( void *  arg)

Definition at line 252 of file driver.cxx.

253 {
254  thread_st *st = (thread_st*)arg;
257 #ifdef WIN32
258  Sleep(st->nbsec);
259 #else
260  sleep(st->nbsec);
261 #endif
262  string cmd = "touch " + st->lockFile;
263  system(cmd.c_str());
265  vst.openFileDump(st->dumpFile);
266  p->accept(&vst);
267  vst.closeFileDump();
268  cmd = "rm -f " + st->lockFile;
269  system(cmd.c_str());
271  }
272  delete st;
273  return NULL;
274 }
virtual YACS::StatesForNode getEffectiveState() const
Return the node state in the context of its father.
Definition: Node.cxx:537
virtual void accept(Visitor *visitor)
Definition: Proc.cxx:199
Proc * p
Definition: driver.cxx:216
StatesForNode
Definition: define.hxx:34
@ FAILED
Definition: define.hxx:51
@ EXECFAILED
Definition: define.hxx:46
@ INTERNALERR
Definition: define.hxx:49
@ DONE
Definition: define.hxx:43
@ DISABLED
Definition: define.hxx:50
@ LOADFAILED
Definition: define.hxx:45
@ ERROR
Definition: define.hxx:52
int nbsec
Definition: driver.cxx:106
string lockFile
Definition: driver.cxx:108
string dumpFile
Definition: driver.cxx:107

References YACS::ENGINE::Proc::accept(), YACS::ENGINE::VisitorSaveState::closeFileDump(), YACS::DISABLED, YACS::DONE, thread_st::dumpFile, YACS::ERROR, YACS::EXECFAILED, YACS::FAILED, YACS::ENGINE::Node::getEffectiveState(), YACS::INTERNALERR, YACS::LOADFAILED, thread_st::lockFile, thread_st::nbsec, YACS::ENGINE::VisitorSaveState::openFileDump(), p, and yacsorb.CORBAEngineTest::state.

Referenced by main().

◆ Handler()

void Handler ( int  theSigId)

Definition at line 219 of file driver.cxx.

220 {
221  if(p)
222  {
223  p->cleanNodes();
224  //if requested save state
225  bool isFinalDump = !myArgs.finalDump.empty();
226  if (isFinalDump)
227  {
229  vst.openFileDump(myArgs.finalDump);
230  p->accept(&vst);
231  vst.closeFileDump();
232  }
233  //if requested shutdown schema
234  if(myArgs.shutdown < 999)
235  {
237  }
238  }
239  if (myArgs.killPort)
240  {
241  ostringstream command;
242  command << "killSalomeWithPort.py " << myArgs.killPort;
243  int status = system(command.str().c_str());
244  if (status == 0)
245  cerr << "Salome application on port " << myArgs.killPort << " is killed" << endl;
246  else
247  cerr << "Error: Can't kill Salome application on port " << myArgs.killPort << endl;
248  }
249  _exit(1);
250 }
virtual void shutdown(int level)
Stop all pending activities of the composed node.
virtual void cleanNodes()
Clean the composed node in case of not clean exit.
static struct arguments myArgs
Definition: driver.cxx:217
std::string finalDump
Definition: driver.cxx:94
int killPort
Definition: driver.cxx:100
int shutdown
Definition: driver.cxx:98

References YACS::ENGINE::Proc::accept(), YACS::ENGINE::ComposedNode::cleanNodes(), YACS::ENGINE::VisitorSaveState::closeFileDump(), arguments::finalDump, arguments::killPort, myArgs, YACS::ENGINE::VisitorSaveState::openFileDump(), p, YACS::ENGINE::ComposedNode::shutdown(), and arguments::shutdown.

Referenced by main().

◆ InitializeSSL()

void InitializeSSL ( )

Definition at line 305 of file driver.cxx.

306 {
307  setSSLMode(true);
308  KERNEL::getLauncherSA();
309 }

Referenced by main().

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 338 of file driver.cxx.

339 {
340  // Parse our arguments; every option seen by parse_opt will be reflected in arguments.
341 #if defined WIN32 || defined __APPLE__
342 #else
343  argp_parse (&argp, argc, argv, 0, 0, &myArgs);
344  std::cerr << "graph = " << myArgs.args[0];
345  std::cerr << " options: display=" << myArgs.display;
346  std::cerr << " verbose="<<myArgs.verbose;
347  std::cerr << " stop-on-error=" << myArgs.stop;
348  std::cerr << " shutdown=" << myArgs.shutdown;
349  std::cerr << " reset=" << myArgs.reset;
350  if (myArgs.killPort)
351  std::cerr << " kill-port=" << myArgs.killPort;
352  if (myArgs.stop)
353  std::cerr << " dumpErrorFile=" << myArgs.dumpErrorFile << std::endl;
354  else
355  std::cerr << std::endl;
356  std::list<std::string>::const_iterator it;
357  for(it=myArgs.init_ports.begin(); it != myArgs.init_ports.end(); it++)
358  {
359  std::cerr << (*it) << std::endl;
360  }
361 #endif
362 
363 #ifndef WIN32
364  setsig(SIGINT,&Handler);
365  setsig(SIGTERM,&Handler);
366 #endif
367 
368  InitializeSSL();
369 
370  timer("Starting ");
371  long flags = RuntimeSALOME::UsePython + RuntimeSALOME::UseCorba + RuntimeSALOME::UseXml + \
372  RuntimeSALOME::UseCpp + RuntimeSALOME::UseSalome;
373  RuntimeSALOME::setRuntime(flags, argc, argv);
374 
375  // Try to load the session catalog if it exists
376  try
377  {
379  runTime->loadModulCatalog();
380  CORBA::ORB_ptr orb = runTime->getOrb();
381  if (orb)
382  {
383  SALOME_NamingService_Wrapper namingService(orb);
384  CORBA::Object_var obj = namingService.Resolve("/Kernel/ModulCatalog");
385  SALOME_ModuleCatalog::ModuleCatalog_var aModuleCatalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
386  if (! CORBA::is_nil(aModuleCatalog))
387  {
388  CORBA::String_var anIOR = orb->object_to_string( aModuleCatalog );
389  YACS::ENGINE::Catalog* aCatalog = runTime->loadCatalog( "session", anIOR.in() );
390  runTime->addCatalog(aCatalog);
391  }
392  }
393  }
394  catch(ServiceUnreachable& e)
395  {
396  //Naming service unreachable don't add catalog
397  }
398 
400  Executor executor;
401 
402  try
403  {
404  timer("Elapsed time before load: ");
405  p=loader.load(myArgs.args[0]);
406  if(p==0)
407  {
408  std::cerr << "The imported file is probably not a YACS schema file" << std::endl;
409  return 1;
410  }
412  {
413  std::list<Node *> allNodes = p->getAllRecursiveNodes();
414  for(auto node : allNodes)
415  {
416  PythonNode *nodePy = dynamic_cast<PythonNode *>(node);
417  if( nodePy )
418  {
419  nodePy->setSqueezeStatus( true );
420  }
421  }
422  }
423  // Initialize the ports
424  for(std::list<std::string>::iterator it=myArgs.init_ports.begin(); it != myArgs.init_ports.end(); it++)
425  {
426  std::string node, port, value;
427  if(parse_init_port((*it), node, port, value))
428  {
429  std::cerr << "Initialization node=" << node
430  << " port=" << port
431  << " value=" << value << std::endl;
432 
433  std::string init_state;
434  init_state = p->setInPortValue(node, port, value);
435  if(value.compare(init_state))
436  {
437  std::cerr << "Error on initialization:" << init_state << std::endl;
438  return 1;
439  }
440  }
441  else
442  {
443  std::cerr << "Error on parsing initialization string:" << (*it) << std::endl;
444  return 1;
445  }
446  }
447 
448  //Get the parser logger
449  Logger* logger=p->getLogger("parser");
450  //Print errors logged if any
451  if(!logger->isEmpty())
452  {
453  std::cerr << "The imported file has errors" << std::endl;
454  std::cerr << logger->getStr() << std::endl;
455  }
456  //Don't execute if there are errors
457  if(logger->hasErrors())
458  {
459  if(!p->isValid())
460  {
461  std::string report=p->getErrorReport();
462  std::cerr << "The schema is not valid and can not be executed" << std::endl;
463  std::cerr << report << std::endl;
464  }
465  delete p;
467  Dispatcher* disp=Dispatcher::getDispatcher();
468  r->fini();
469  delete r;
470  delete disp;
471  return 1;
472  }
473  timer("Elapsed time after load: ");
474 
475  if(!p->isValid())
476  {
477  std::string report=p->getErrorReport();
478  std::cerr << "The schema is not valid and can not be executed" << std::endl;
479  std::cerr << report << std::endl;
481  Dispatcher* disp=Dispatcher::getDispatcher();
482  r->fini();
483  delete r;
484  delete disp;
485  return 1;
486  }
487  timer("Elapsed time after validation: ");
488 
489  // Check consistency
490  LinkInfo info(LinkInfo::ALL_DONT_STOP);
491  p->checkConsistency(info);
492  if(info.areWarningsOrErrors())
493  {
494  std::cerr << "The schema is not consistent and can not be executed" << std::endl;
495  std::cerr << info.getGlobalRepr() << std::endl;
497  Dispatcher* disp=Dispatcher::getDispatcher();
498  r->fini();
499  delete r;
500  delete disp;
501  return 1;
502  }
503  timer("Elapsed time after check consistency: ");
504 
505  //execution
506  bool isXmlSchema = !myArgs.xmlSchema.empty() ;
507  if (isXmlSchema)
508  {
510  vss.openFileSchema(myArgs.xmlSchema);
511  p->accept(&vss);
512  vss.closeFileSchema();
513  }
514 
515  bool fromScratch = myArgs.loadState.empty() ;
516  if (!fromScratch)
517  {
518  p->init();
519  p->exUpdateState();
520  stateParser* rootParser = new stateParser();
521  stateLoader myStateLoader(rootParser, p);
522  myStateLoader.parse(myArgs.loadState);
523  if(myArgs.reset>0)
524  {
526  p->exUpdateState();
527  }
528  }
529 
530  if (myArgs.stop)
531  {
532  if ( !myArgs.dumpErrorFile.empty() )
533  executor.setStopOnError(true, myArgs.dumpErrorFile);
534  else
535  executor.setStopOnError(false, myArgs.dumpErrorFile);
536  }
537  if(myArgs.display>0)
538  {
539  std::ofstream f("toto");
540  p->writeDot(f);
541  f.close();
542  }
543 
544  bool isDump = (myArgs.dump != 0);
545  pthread_t th;
546  if (isDump)
547  {
548  thread_st *st = new thread_st;
549  st->nbsec = myArgs.dump;
550  st->dumpFile = string("dumpState_") + myArgs.args[0];
551  string rootFile = st->dumpFile.substr(0,st->dumpFile.find("."));
552  st->lockFile = rootFile + ".lock";
553  pthread_create(&th,NULL,&dumpState,(void*)st);
554  }
556  cerr << "+++++++++++++++++++ start calculation +++++++++++++++++++" << endl;
557  executor.RunW(p,myArgs.display, fromScratch);
558  cerr << "+++++++++++++++++++ end calculation +++++++++++++++++++" << endl;
559  cerr << "Proc state : " << Node::getStateName(p->getEffectiveState()) << endl;
560  timer("Elapsed time after execution: ");
561 
562  // Return 0 if SCHEMA OK
563  // Return 1 for YACS ERROR (EXCEPTION NOT CATCHED)
564  // Return 2 for YACS SCHEMA ERROR/FAILED
565  int return_value = 0;
566 
567  if(p->getEffectiveState() != YACS::DONE)
568  {
569  std::string report=p->getErrorReport();
570  std::cerr << "Execution has ended in error" << std::endl;
571  std::cerr << report << std::endl;
572  return_value = 2;
573  }
574 
575  if(myArgs.display>0)
576  {
577  std::ofstream g("titi");
578  p->writeDot(g);
579  g.close();
580  }
581 
582  if (isDump)
583  {
584  pthread_join(th,NULL);
585  }
586 
587  bool isFinalDump = !myArgs.finalDump.empty() ;
588  if (isFinalDump)
589  {
591  vst.openFileDump(myArgs.finalDump);
592  p->accept(&vst);
593  vst.closeFileDump();
594  }
595  if(myArgs.shutdown < 999)
596  {
598  shutdownServers();
599  }
600  delete p;
602  Dispatcher* disp=Dispatcher::getDispatcher();
603  r->fini();
604  delete r;
605  delete disp;
607  return return_value;
608  }
609  catch (YACS::Exception& e)
610  {
611  cerr << "Caught a YACS exception" << endl;
612  cerr << e.what() << endl;
614  Dispatcher* disp=Dispatcher::getDispatcher();
615  r->fini();
616  delete r;
617  delete disp;
618  return 1;
619  }
620  catch (const std::ios_base::failure&)
621  {
622  cerr << "Caught an io failure exception" << endl;
623  return 1;
624  }
625  catch(CORBA::SystemException& ex)
626  {
627  cerr << "Caught a CORBA::SystemException.:" << __FILE__ << ":" << __LINE__ << ":" ;
628  CORBA::Any tmp;
629  tmp <<= ex;
630  CORBA::TypeCode_var tc = tmp.type();
631  const char *p = tc->name();
632  if ( *p != '\0' )
633  cerr <<p;
634  else
635  cerr << tc->id();
636  cerr << endl;
637  return 1;
638  }
639  catch(omniORB::fatalException& fe)
640  {
641  cerr << "Caught omniORB::fatalException:" << endl;
642  cerr << " file: " << fe.file() << endl;
643  cerr << " line: " << fe.line() << endl;
644  cerr << " mesg: " << fe.errmsg() << endl;
645  return 1;
646  }
647  catch(...)
648  {
649  cerr << "Caught unknown exception." << endl;
650  return 1;
651  }
652 }
void init(bool start=true)
Initialize the bloc.
Definition: Bloc.cxx:95
void exUpdateState()
Update the bloc state.
Definition: Bloc.cxx:153
class for YACS catalogs.
Definition: Catalog.hxx:42
std::list< Node * > getAllRecursiveNodes()
Get all children nodes elementary and composed including this node.
virtual std::string getErrorReport()
returns a string that contains an error report if the node is in error
virtual void resetState(int level)
Reset the state of the node and its children depending on the parameter level.
void checkConsistency(LinkInfo &info) const
Base class for dispatcher in observer pattern.
Definition: Dispatcher.hxx:74
Threaded Executor.
Definition: Executor.hxx:63
void setStopOnError(bool dumpRequested=false, std::string xmlFile="")
ask to stop execution on the first node found in error
Definition: Executor.cxx:399
void RunW(Scheduler *graph, int debug=0, bool fromScratch=true)
Definition: Executor.cxx:1833
Class that deal with list of semantics links for high level analysis.
Definition: LinkInfo.hxx:83
Class for logging error messages.
Definition: Logger.hxx:38
virtual bool hasErrors()
Definition: Logger.cxx:101
virtual bool isEmpty()
Definition: Logger.cxx:96
virtual std::string getStr()
Definition: Logger.cxx:85
virtual int isValid()
indicates if the node is valid (returns 1) or not (returns 0)
Definition: Node.cxx:723
std::string setInPortValue(std::string nodeName, std::string portName, std::string value)
Definition: Proc.cxx:288
virtual Logger * getLogger(const std::string &name)
Definition: Proc.cxx:431
virtual void writeDot(std::ostream &os) const
Dump to the input stream a dot representation of the node.
Definition: Proc.cxx:86
void setSqueezeStatus(bool sqStatus)
Definition: PythonNode.hxx:111
CORBA::ORB_ptr getOrb() const
virtual void addCatalog(Catalog *catalog)
Add a catalog of types and nodes to the runtime.
Definition: Runtime.cxx:323
virtual Catalog * loadCatalog(const std::string &sourceKind, const std::string &path)
Load a catalog of calculation to use as factory.
Definition: Runtime.cxx:285
class for parse an xml file, use a dedicated parser, to load a saved state of a SALOME execution.
Definition: LoadState.hxx:54
specialized parser to load SALOME execution saved states.
Definition: LoadState.hxx:81
const char * what(void) const noexcept
Definition: Exception.cxx:50
void shutdownServers()
Definition: driver.cxx:311
bool parse_init_port(const std::string &input, std::string &node, std::string &port, std::string &value)
Definition: driver.cxx:290
void * dumpState(void *arg)
Definition: driver.cxx:252
void Handler(int theSigId)
Definition: driver.cxx:219
sighandler_t setsig(int sig, sighandler_t handler)
Definition: driver.cxx:278
void InitializeSSL()
Definition: driver.cxx:305
static struct argp argp
Definition: driver.cxx:200
void timer(std::string msg)
Definition: driver.cxx:203
YACSRUNTIMESALOME_EXPORT RuntimeSALOME * getSALOMERuntime()
void YACSLIBENGINE_EXPORT UnLoadObserversPluginIfAny()
YACSLIBENGINE_EXPORT Runtime * getRuntime()
Definition: Runtime.cxx:61
void YACSLIBENGINE_EXPORT LoadObserversPluginIfAny(ComposedNode *rootNode, Executor *executor)
std::list< std::string > init_ports
Definition: driver.cxx:102
std::string xmlSchema
Definition: driver.cxx:96
int stop
Definition: driver.cxx:92
int display
Definition: driver.cxx:90
std::string dumpErrorFile
Definition: driver.cxx:93
int dump
Definition: driver.cxx:95
bool squeezeMemory
Definition: driver.cxx:101
int reset
Definition: driver.cxx:99
char * args[1]
Definition: driver.cxx:89
std::string loadState
Definition: driver.cxx:97
int verbose
Definition: driver.cxx:91
CORBA::ORB_ptr orb
Definition: yacsSrv.cxx:39
YACS::YACSLoader::YACSLoader * loader
Definition: yacs_clt.cxx:31

References YACS::ENGINE::Proc::accept(), YACS::ENGINE::Runtime::addCatalog(), YACS::ENGINE::LinkInfo::ALL_DONT_STOP, YACS::ENGINE::LinkInfo::areWarningsOrErrors(), argp, arguments::args, YACS::ENGINE::ComposedNode::checkConsistency(), YACS::ENGINE::VisitorSaveState::closeFileDump(), YACS::ENGINE::VisitorSaveSchema::closeFileSchema(), arguments::display, YACS::DONE, arguments::dump, arguments::dumpErrorFile, thread_st::dumpFile, dumpState(), testCppPluginInvokation::ex, YACS::ENGINE::Bloc::exUpdateState(), gui.CONNECTOR::f(), arguments::finalDump, YACS::ENGINE::ComposedNode::getAllRecursiveNodes(), YACS::ENGINE::Dispatcher::getDispatcher(), YACS::ENGINE::Node::getEffectiveState(), YACS::ENGINE::ComposedNode::getErrorReport(), YACS::ENGINE::LinkInfo::getGlobalRepr(), YACS::ENGINE::Proc::getLogger(), YACS::ENGINE::RuntimeSALOME::getOrb(), YACS::ENGINE::getRuntime(), YACS::ENGINE::getSALOMERuntime(), YACS::ENGINE::Node::getStateName(), YACS::ENGINE::Logger::getStr(), Handler(), YACS::ENGINE::Logger::hasErrors(), YACS::ENGINE::Bloc::init(), arguments::init_ports, InitializeSSL(), YACS::ENGINE::Logger::isEmpty(), YACS::ENGINE::Node::isValid(), arguments::killPort, YACS::ENGINE::Runtime::loadCatalog(), loader, YACS::ENGINE::RuntimeSALOME::loadModulCatalog(), YACS::ENGINE::LoadObserversPluginIfAny(), arguments::loadState, thread_st::lockFile, myArgs, thread_st::nbsec, YACS::ENGINE::VisitorSaveState::openFileDump(), YACS::ENGINE::VisitorSaveSchema::openFileSchema(), orb, p, YACS::ENGINE::stateLoader::parse(), parse_init_port(), testCppPluginInvokation::r, arguments::reset, YACS::ENGINE::ComposedNode::resetState(), SALOME_NamingService_Wrapper::Resolve(), YACS::ENGINE::Executor::RunW(), YACS::ENGINE::Proc::setInPortValue(), YACS::ENGINE::RuntimeSALOME::setRuntime(), setsig(), YACS::ENGINE::PythonNode::setSqueezeStatus(), YACS::ENGINE::Executor::setStopOnError(), YACS::ENGINE::ComposedNode::shutdown(), arguments::shutdown, shutdownServers(), arguments::squeezeMemory, arguments::stop, timer(), YACS::ENGINE::UnLoadObserversPluginIfAny(), YACS::ENGINE::RuntimeSALOME::UseCorba, YACS::ENGINE::RuntimeSALOME::UsePython, YACS::ENGINE::RuntimeSALOME::UseSalome, YACS::ENGINE::RuntimeSALOME::UseXml, arguments::verbose, YACS::ENGINE::Proc::writeDot(), and arguments::xmlSchema.

◆ parse_init_port()

bool parse_init_port ( const std::string &  input,
std::string &  node,
std::string &  port,
std::string &  value 
)

Definition at line 290 of file driver.cxx.

291 {
292  bool ok = true;
293  size_t pos_eq = input.find('=');
294  if(pos_eq == std::string::npos || pos_eq == input.size())
295  return false;
296  value = input.substr(pos_eq+1);
297  size_t pos_dot = input.rfind('.', pos_eq);
298  if(!pos_dot || pos_dot == std::string::npos || pos_dot >= pos_eq-1)
299  return false;
300  port = input.substr(pos_dot+1, pos_eq-pos_dot-1);
301  node = input.substr(0, pos_dot);
302  return true;
303 }

Referenced by main().

◆ parse_opt()

static error_t parse_opt ( int  key,
char *  arg,
struct argp_state *  state 
)
static

Definition at line 116 of file driver.cxx.

117 {
118 #if defined WIN32 || defined __APPLE__
119 #else
120  // Get the input argument from argp_parse, which we
121  // know is a pointer to our arguments structure.
122  struct arguments *myArgs = (arguments*)state->input;
123 
124  switch (key)
125  {
126  case 'd':
127  myArgs->display = atoi(arg);
128  break;
129  case 't':
130  myArgs->shutdown = atoi(arg);
131  break;
132  case 'r':
133  myArgs->reset = atoi(arg);
134  break;
135  case 'v':
136  myArgs->verbose = 1;
137  break;
138  case 's':
139  myArgs->stop = 1;
140  break;
141  case 'e':
142  myArgs->stop = 1;
143  if (arg)
144  myArgs->dumpErrorFile = arg;
145  else
146  myArgs->dumpErrorFile = "dumpErrorState.xml";
147  break;
148  case 'f':
149  if (arg)
150  myArgs->finalDump = arg;
151  else
152  myArgs->finalDump = "finalDumpState.xml";
153  break;
154  case 'g':
155  if (arg)
156  myArgs->dump = atoi(arg);
157  else
158  myArgs->dump = 60;
159  break;
160  case 'l':
161  myArgs->loadState = arg;
162  break;
163  case 'x':
164  if (arg)
165  myArgs->xmlSchema = arg;
166  else
167  myArgs->xmlSchema = "saveSchema.xml";
168  break;
169  case 'k':
170  myArgs->killPort = atoi(arg);
171  break;
172  case 'i':
173  if (arg)
174  myArgs->init_ports.push_back(std::string(arg));
175  break;
176  case 'z':
177  myArgs->squeezeMemory = ! ( bool( atoi(arg) ) );
178  break;
179  case ARGP_KEY_ARG:
180  if (state->arg_num >=1) // Too many arguments.
181  argp_usage (state);
182  myArgs->args[state->arg_num] = arg;
183  break;
184 
185  case ARGP_KEY_END:
186  if (state->arg_num < 1) // Not enough arguments.
187  argp_usage (state);
188  break;
189 
190  default:
191  return ARGP_ERR_UNKNOWN;
192  }
193 #endif
194  return 0;
195 }

◆ setsig()

sighandler_t setsig ( int  sig,
sighandler_t  handler 
)

Definition at line 278 of file driver.cxx.

279 {
280  struct sigaction context, ocontext;
281  context.sa_handler = handler;
282  sigemptyset(&context.sa_mask);
283  context.sa_flags = 0;
284  if (sigaction(sig, &context, &ocontext) == -1)
285  return SIG_ERR;
286  return ocontext.sa_handler;
287 }

Referenced by main().

◆ shutdownServers()

void shutdownServers ( )

Definition at line 311 of file driver.cxx.

312 {
313  // shutdown data server scopes
314  try
315  {
317  runTime->loadModulCatalog();
318  CORBA::ORB_ptr orb = runTime->getOrb();
319  if (orb)
320  {
321  SALOME_NamingService_Wrapper namingService(orb);
322  CORBA::Object_var objDSM(namingService.Resolve(SALOMESDS::DataServerManager::NAME_IN_NS));
323  SALOME::DataServerManager_var dsm(SALOME::DataServerManager::_narrow(objDSM));
324  if ( !CORBA::is_nil(dsm) )
325  dsm->shutdownScopes();
326  }
327  }
328  catch(const CORBA::Exception& )
329  {
330  // ignore and continue
331  }
332  catch(ServiceUnreachable& e)
333  {
334  // ignore and continue
335  }
336 }

References YACS::ENGINE::RuntimeSALOME::getOrb(), YACS::ENGINE::getSALOMERuntime(), YACS::ENGINE::RuntimeSALOME::loadModulCatalog(), orb, and SALOME_NamingService_Wrapper::Resolve().

Referenced by main().

◆ timer()

void timer ( std::string  msg)

Definition at line 203 of file driver.cxx.

204 {
205 #if defined WIN32 || defined __APPLE__
206 #else
207  struct timeval tv;
208  gettimeofday(&tv,NULL);
209  long t=tv.tv_sec*1000+tv.tv_usec/1000;
210  static long t0=t;
211  gettimeofday(&tv,NULL);
212  std::cerr << msg << tv.tv_sec*1000+tv.tv_usec/1000-t0 << " ms" << std::endl;
213 #endif
214 }
static timeval tv
Definition: chrono.hxx:71

References gui.Appli::t, and tv.

Referenced by main().

Variable Documentation

◆ argp

struct argp argp = { options, parse_opt, args_doc, doc }
static

Definition at line 116 of file driver.cxx.

Referenced by main().

◆ argp_program_bug_address

const char* argp_program_bug_address ="<nepal@nepal.edf.fr>"

Definition at line 62 of file driver.cxx.

◆ argp_program_version

const char* argp_program_version ="driver V0.1"

Definition at line 61 of file driver.cxx.

◆ args_doc

char args_doc[] = "graph.xml"
static

Definition at line 64 of file driver.cxx.

◆ doc

◆ myArgs

struct arguments myArgs
static

Definition at line 216 of file driver.cxx.

Referenced by Handler(), and main().

◆ options

struct argp_option options[]
static
Initial value:
=
{
{"display", 'd', "level", 0, "Display dot files: 0=never to 3=very often (default 0)"},
{"verbose", 'v', 0, 0, "Produce verbose output" },
{"stop-on-error", 's', 0, 0, "Stop on first error" },
{"dump-on-error", 'e', "file", OPTION_ARG_OPTIONAL, "Stop on first error and dump state"},
{"dump-final", 'f', "file", OPTION_ARG_OPTIONAL, "dump final state"},
{"dump", 'g', "nbsec", OPTION_ARG_OPTIONAL, "dump state"},
{"load-state", 'l', "file", 0, "Load State from a previous partial execution"},
{"save-xml-schema", 'x', "file", OPTION_ARG_OPTIONAL, "dump xml schema"},
{"shutdown", 't', "level", 0, "Shutdown the schema: 0=no shutdown to 3=full shutdown (default 1)"},
{"reset", 'r', "level", 0, "Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state (default 0)"},
{"kill-port", 'k', "port", 0, "Kill Salome application running on the specified port if the driver process is killed (with SIGINT or SIGTERM)"},
{"init_port", 'i', "value", OPTION_ARG_OPTIONAL, "Initialisation value of a port, specified as bloc.node.port=value."},
{"donotsqueeze", 'z', "value", 0, "Desactivate squeeze memory optimization."},
{ nullptr }
}

Definition at line 64 of file driver.cxx.

Referenced by YACS::HMI::EditionScript::onEdit().

◆ p

Proc* p =0

Definition at line 216 of file driver.cxx.

Referenced by YACS::ENGINE::PythonNode::applyDPLScope(), YACS::switchtypeParser::case_(), YACS::ENGINE::CppNode::cloneNode(), YACS::ENGINE::PythonNode::cloneNode(), YACS::ENGINE::PyFuncNode::cloneNode(), YACS::ENGINE::SalomePythonNode::cloneNode(), YACS::ENGINE::SalomeContainerToolsBase::CreateComponentInstance(), YACS::ENGINE::LocalContainer::createInternalInstance(), YACS::switchtypeParser::default_(), driverTest(), dumpState(), YACS::ENGINE::InPort::edNotifyDereferencedBy(), YACS::ENGINE::InPort::edNotifyReferencedBy(), YACS::ENGINE::ElementaryNode::edRemovePort(), YACS::ENGINE::CORBANode::execute(), YACS::ENGINE::SalomeNode::execute(), YACS::ENGINE::CppNode::execute(), YACS::ENGINE::DistributedPythonNode::execute(), YACS::ENGINE::SalomePythonNode::execute(), YACS::ENGINE::XmlNode::execute(), YACS::ENGINE::PythonNode::executeLocal(), YACS::ENGINE::PyFuncNode::executeLocal(), YACS::ENGINE::PythonNode::executeRemote(), YACS::ENGINE::PyFuncNode::executeRemote(), xmlParserBase::getAttributes(), YACS::ENGINE::SalomeNode::getContainerLog(), YACS::ENGINE::Node::getDPLScopeInfo(), YACS::HMI::SceneLinkItem::getFromNode(), YACS::HMI::SceneLinkItem::getToNode(), Handler(), outputParser::init(), YACS::ENGINE::graphParser::init(), YACS::ENGINE::nodeParser::init(), YACS::ENGINE::attrParser::init(), YACS::ENGINE::portParser::init(), YACS::ENGINE::valueParser::init(), YACS::ENGINE::arrayParser::init(), YACS::ENGINE::dataParser::init(), YACS::ENGINE::simpleTypeParser::init(), YACS::ENGINE::loopPortParser::init(), YACS::ENGINE::sampleParser::init(), YACS::inlinetypeParser< T >::inport(), YACS::servertypeParser< T >::instream(), YACS::servicetypeParser< T >::instream(), YACS::ENGINE::SalomePythonNode::load(), Yacs_i::Load(), YACS::ENGINE::CORBAComponent::load(), YACS::ENGINE::ProcCataLoader::loadCata(), YACS::ENGINE::PyFuncNode::loadLocal(), YACS::ENGINE::loadState(), main(), outputParser::onStart(), YACS::ENGINE::stateParser::onStart(), YACS::ENGINE::graphParser::onStart(), YACS::ENGINE::nodeParser::onStart(), YACS::ENGINE::portParser::onStart(), YACS::ENGINE::valueParser::onStart(), YACS::ENGINE::arrayParser::onStart(), YACS::ENGINE::dataParser::onStart(), YACS::ENGINE::loopPortParser::onStart(), YACS::ENGINE::sampleParser::onStart(), operator<<(), YACS::ENGINE::operator<<(), YACS::inlinetypeParser< T >::outport(), YACS::servertypeParser< T >::outstream(), YACS::servicetypeParser< T >::outstream(), YACS::outnodetypeParser< T >::parameter(), YACS::presettypeParser< T >::parameter(), Proc_i::Proc_i(), YACS::ENGINE::ProxyPort::ProxyPort(), YACS::ENGINE::OutputXmlPort::put(), YACS::ENGINE::OutputCorbaPort::put(), YACS::ENGINE::OutputCppPort::put(), YACS::ENGINE::ForEachLoopGen::releaseDelegateOf(), Yacs_i::Run(), YACS::switchtypeParser::select(), YACS::HMI::SceneLinkItem::setPath(), YACS::ENGINE::stateParser::setProc(), YACS::ENGINE::PythonNode::squeezeMemory(), YACS::ENGINE::PythonNode::squeezeMemoryRemote(), YACS::parser::start_element(), xmlParserBase::start_element(), YACS::ENGINE::stateLoader::stateLoader(), YACSPMMLBasicsTest1::testYACSdriver_LRANN(), YACSPMMLBasicsTest1::testYACSdriver_PmmlDoesNotExist(), YACSPMMLBasicsTest1::testYACSdriverLinearRegression(), YACSPMMLBasicsTest1::testYACSdriverNeuralNetwork(), and YACS::ENGINE::Bloc::writeDot().