Version: 9.15.0
driver.cxx
Go to the documentation of this file.
1 // Copyright (C) 2006-2025 CEA, EDF
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 
20 #include "yacsconfig.h"
21 #include "RuntimeSALOME.hxx"
22 #include "Proc.hxx"
23 #include "Logger.hxx"
24 #include "Exception.hxx"
25 #include "Executor.hxx"
26 #include "parsers.hxx"
29 #include "LoadState.hxx"
30 #include "Dispatcher.hxx"
31 #include "LinkInfo.hxx"
32 #include "ObserverAsPlugin.hxx"
33 #include "PythonNode.hxx"
34 
35 #include "KernelBasis.hxx"
36 #include "SALOME_Launcher.hxx"
37 #include "ServiceUnreachable.hxx"
39 #include "SALOME_NamingService.hxx"
40 #include "SALOME_ModuleCatalog.hh"
41 #include "SALOMESDS_DataServerManager.hxx"
42 #include "Basics_Utils.hxx"
43 
44 #include <iostream>
45 #include <fstream>
46 #include <signal.h>
47 #include <list>
48 
49 #if defined WIN32 || defined __APPLE__
50 #else
51 #include <argp.h>
52 #endif
53 
54 using YACS::YACSLoader;
55 using namespace YACS::ENGINE;
56 using namespace std;
57 
58 
59 // --- use of glibc argp interface for parsing unix-style arguments
60 
61 const char *argp_program_version ="driver V0.1";
62 const char *argp_program_bug_address ="<nepal@nepal.edf.fr>";
63 static char doc[] ="driver -- a SALOME YACS graph executor";
64 static char args_doc[] = "graph.xml";
65 
66 #if defined WIN32 || defined __APPLE__
67 #else
68 static struct argp_option options[] =
69  {
70  {"display", 'd', "level", 0, "Display dot files: 0=never to 3=very often (default 0)"},
71  {"verbose", 'v', 0, 0, "Produce verbose output" },
72  {"stop-on-error", 's', 0, 0, "Stop on first error" },
73  {"dump-on-error", 'e', "file", OPTION_ARG_OPTIONAL, "Stop on first error and dump state"},
74  {"dump-final", 'f', "file", OPTION_ARG_OPTIONAL, "dump final state"},
75  {"dump", 'g', "nbsec", OPTION_ARG_OPTIONAL, "dump state"},
76  {"load-state", 'l', "file", 0, "Load State from a previous partial execution"},
77  {"save-xml-schema", 'x', "file", OPTION_ARG_OPTIONAL, "dump xml schema"},
78  {"shutdown", 't', "level", 0, "Shutdown the schema: 0=no shutdown to 3=full shutdown (default 1)"},
79  {"reset", 'r', "level", 0, "Reset the schema before execution: 0=nothing, 1=reset error nodes to ready state (default 0)"},
80  {"kill-port", 'k', "port", 0, "Kill Salome application running on the specified port if the driver process is killed (with SIGINT or SIGTERM)"},
81  {"init_port", 'i', "value", OPTION_ARG_OPTIONAL, "Initialisation value of a port, specified as bloc.node.port=value."},
82  {"donotsqueeze", 'z', "value", 0, "Desactivate squeeze memory optimization."},
83  { nullptr }
84  };
85 #endif
86 
87 struct arguments
88 {
89  char *args[1];
90  int display = 0;
91  int verbose = 0;
92  int stop = 0;
93  std::string dumpErrorFile;
94  std::string finalDump;
95  int dump = 0;
96  std::string xmlSchema;
97  std::string loadState;
98  int shutdown = 10;
99  int reset = 0;
100  int killPort = 0;
101  bool squeezeMemory = true;
102  std::list<std::string> init_ports;
103 };
104 
105 typedef struct {
106  int nbsec;
107  string dumpFile;
108  string lockFile;
109 } thread_st;
110 
111 #if defined WIN32 || defined __APPLE__
112 static int
113 #else
114 static error_t
115 #endif
116 parse_opt (int key, char *arg, struct argp_state *state)
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 }
196 
197 // Our argp parser.
198 #if defined WIN32 || defined __APPLE__
199 #else
200 static struct argp argp = { options, parse_opt, args_doc, doc };
201 #endif
202 
203 void timer(std::string msg)
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 }
215 
216 Proc* p=0;
217 static struct arguments myArgs;
218 
219 void Handler(int theSigId)
220 {
221  if(p)
222  {
223  p->cleanNodes();
224  //if requested save state
225  bool isFinalDump = !myArgs.finalDump.empty();
226  if (isFinalDump)
227  {
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 }
251 
252 void * dumpState(void *arg)
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 }
275 
276 #ifndef WIN32
277 typedef void (*sighandler_t)(int);
279 {
280  sigset_t sigmask;
281  sigemptyset (&sigmask);
282  sigaddset(&sigmask, sig);
283  sigprocmask(SIG_UNBLOCK, &sigmask, NULL);
284  struct sigaction context, ocontext;
285  context.sa_handler = handler;
286  sigemptyset(&context.sa_mask);
287  context.sa_flags = 0;
288  if (sigaction(sig, &context, &ocontext) == -1)
289  return SIG_ERR;
290  return ocontext.sa_handler;
291 }
292 #endif
293 
294 bool parse_init_port(const std::string& input, std::string& node, std::string& port, std::string& value)
295 {
296  bool ok = true;
297  size_t pos_eq = input.find('=');
298  if(pos_eq == std::string::npos || pos_eq == input.size())
299  return false;
300  value = input.substr(pos_eq+1);
301  size_t pos_dot = input.rfind('.', pos_eq);
302  if(!pos_dot || pos_dot == std::string::npos || pos_dot >= pos_eq-1)
303  return false;
304  port = input.substr(pos_dot+1, pos_eq-pos_dot-1);
305  node = input.substr(0, pos_dot);
306  return true;
307 }
308 
310 {
311  setSSLMode(true);
312  KERNEL::getLauncherSA();
313 }
314 
316 {
317  // shutdown data server scopes
318  try
319  {
321  runTime->loadModulCatalog();
322  CORBA::ORB_ptr orb = runTime->getOrb();
323  if (orb)
324  {
325  SALOME_NamingService_Wrapper namingService(orb);
326  CORBA::Object_var objDSM(namingService.Resolve(SALOMESDS::DataServerManager::NAME_IN_NS));
327  SALOME::DataServerManager_var dsm(SALOME::DataServerManager::_narrow(objDSM));
328  if ( !CORBA::is_nil(dsm) )
329  dsm->shutdownScopes();
330  }
331  }
332  catch(const CORBA::Exception& )
333  {
334  // ignore and continue
335  }
336  catch(ServiceUnreachable& e)
337  {
338  // ignore and continue
339  }
340 }
341 
342 int main (int argc, char* argv[])
343 {
344  // Parse our arguments; every option seen by parse_opt will be reflected in arguments.
345 #if defined WIN32 || defined __APPLE__
346 #else
347  argp_parse (&argp, argc, argv, 0, 0, &myArgs);
348  std::cerr << "graph = " << myArgs.args[0];
349  std::cerr << " options: display=" << myArgs.display;
350  std::cerr << " verbose="<<myArgs.verbose;
351  std::cerr << " stop-on-error=" << myArgs.stop;
352  std::cerr << " shutdown=" << myArgs.shutdown;
353  std::cerr << " reset=" << myArgs.reset;
354  if (myArgs.killPort)
355  std::cerr << " kill-port=" << myArgs.killPort;
356  if (myArgs.stop)
357  std::cerr << " dumpErrorFile=" << myArgs.dumpErrorFile << std::endl;
358  else
359  std::cerr << std::endl;
360  std::list<std::string>::const_iterator it;
361  for(it=myArgs.init_ports.begin(); it != myArgs.init_ports.end(); it++)
362  {
363  std::cerr << (*it) << std::endl;
364  }
365 #endif
366 
367 #ifndef WIN32
368  setsig(SIGINT,&Handler);
369  setsig(SIGTERM,&Handler);
370 #endif
371 
372  InitializeSSL();
373 
374  timer("Starting ");
376  RuntimeSALOME::UseCpp + RuntimeSALOME::UseSalome;
377  RuntimeSALOME::setRuntime(flags, argc, argv);
378 
379  // Try to load the session catalog if it exists
380  try
381  {
383  runTime->loadModulCatalog();
384  CORBA::ORB_ptr orb = runTime->getOrb();
385  if (orb)
386  {
387  SALOME_NamingService_Wrapper namingService(orb);
388  CORBA::Object_var obj = namingService.Resolve("/Kernel/ModulCatalog");
389  SALOME_ModuleCatalog::ModuleCatalog_var aModuleCatalog = SALOME_ModuleCatalog::ModuleCatalog::_narrow(obj);
390  if (! CORBA::is_nil(aModuleCatalog))
391  {
392  CORBA::String_var anIOR = orb->object_to_string( aModuleCatalog );
393  YACS::ENGINE::Catalog* aCatalog = runTime->loadCatalog( "session", anIOR.in() );
394  runTime->addCatalog(aCatalog);
395  }
396  }
397  }
398  catch(ServiceUnreachable& e)
399  {
400  //Naming service unreachable don't add catalog
401  }
402 
404  Executor executor;
405 
406  try
407  {
408  timer("Elapsed time before load: ");
409  p=loader.load(myArgs.args[0]);
410  if(p==0)
411  {
412  std::cerr << "The imported file is probably not a YACS schema file" << std::endl;
413  return 1;
414  }
416  {
417  std::list<Node *> allNodes = p->getAllRecursiveNodes();
418  for(auto node : allNodes)
419  {
420  PythonNode *nodePy = dynamic_cast<PythonNode *>(node);
421  if( nodePy )
422  {
423  nodePy->setSqueezeStatus( true );
424  }
425  }
426  }
427  // Initialize the ports
428  for(std::list<std::string>::iterator it=myArgs.init_ports.begin(); it != myArgs.init_ports.end(); it++)
429  {
430  std::string node, port, value;
431  if(parse_init_port((*it), node, port, value))
432  {
433  std::cerr << "Initialization node=" << node
434  << " port=" << port
435  << " value=" << value << std::endl;
436 
437  std::string init_state;
438  init_state = p->setInPortValue(node, port, value);
439  if(value.compare(init_state))
440  {
441  std::cerr << "Error on initialization:" << init_state << std::endl;
442  return 1;
443  }
444  }
445  else
446  {
447  std::cerr << "Error on parsing initialization string:" << (*it) << std::endl;
448  return 1;
449  }
450  }
451 
452  //Get the parser logger
453  Logger* logger=p->getLogger("parser");
454  //Print errors logged if any
455  if(!logger->isEmpty())
456  {
457  std::cerr << "The imported file has errors" << std::endl;
458  std::cerr << logger->getStr() << std::endl;
459  }
460  //Don't execute if there are errors
461  if(logger->hasErrors())
462  {
463  if(!p->isValid())
464  {
465  std::string report=p->getErrorReport();
466  std::cerr << "The schema is not valid and can not be executed" << std::endl;
467  std::cerr << report << std::endl;
468  }
469  delete p;
472  r->fini();
473  delete r;
474  delete disp;
475  return 1;
476  }
477  timer("Elapsed time after load: ");
478 
479  if(!p->isValid())
480  {
481  std::string report=p->getErrorReport();
482  std::cerr << "The schema is not valid and can not be executed" << std::endl;
483  std::cerr << report << std::endl;
486  r->fini();
487  delete r;
488  delete disp;
489  return 1;
490  }
491  timer("Elapsed time after validation: ");
492 
493  // Check consistency
495  p->checkConsistency(info);
496  if(info.areWarningsOrErrors())
497  {
498  std::cerr << "The schema is not consistent and can not be executed" << std::endl;
499  std::cerr << info.getGlobalRepr() << std::endl;
502  r->fini();
503  delete r;
504  delete disp;
505  return 1;
506  }
507  timer("Elapsed time after check consistency: ");
508 
509  //execution
510  bool isXmlSchema = !myArgs.xmlSchema.empty() ;
511  if (isXmlSchema)
512  {
515  p->accept(&vss);
516  vss.closeFileSchema();
517  }
518 
519  bool fromScratch = myArgs.loadState.empty() ;
520  if (!fromScratch)
521  {
522  p->init();
523  p->exUpdateState();
524  stateParser* rootParser = new stateParser();
525  stateLoader myStateLoader(rootParser, p);
526  myStateLoader.parse(myArgs.loadState);
527  if(myArgs.reset>0)
528  {
530  p->exUpdateState();
531  }
532  }
533 
534  if (myArgs.stop)
535  {
536  if ( !myArgs.dumpErrorFile.empty() )
537  executor.setStopOnError(true, myArgs.dumpErrorFile);
538  else
539  executor.setStopOnError(false, myArgs.dumpErrorFile);
540  }
541  if(myArgs.display>0)
542  {
543  std::ofstream f("toto");
544  p->writeDot(f);
545  f.close();
546  }
547 
548  bool isDump = (myArgs.dump != 0);
549  pthread_t th;
550  if (isDump)
551  {
552  thread_st *st = new thread_st;
553  st->nbsec = myArgs.dump;
554  st->dumpFile = string("dumpState_") + myArgs.args[0];
555  string rootFile = st->dumpFile.substr(0,st->dumpFile.find("."));
556  st->lockFile = rootFile + ".lock";
557  pthread_create(&th,NULL,&dumpState,(void*)st);
558  }
560  cerr << "+++++++++++++++++++ start calculation +++++++++++++++++++" << endl;
561  executor.RunW(p,myArgs.display, fromScratch);
562  cerr << "+++++++++++++++++++ end calculation +++++++++++++++++++" << endl;
563  cerr << "Proc state : " << Node::getStateName(p->getEffectiveState()) << endl;
564  timer("Elapsed time after execution: ");
565 
566  // Return 0 if SCHEMA OK
567  // Return 1 for YACS ERROR (EXCEPTION NOT CATCHED)
568  // Return 2 for YACS SCHEMA ERROR/FAILED
569  int return_value = 0;
570 
571  if(p->getEffectiveState() != YACS::DONE)
572  {
573  std::string report=p->getErrorReport();
574  std::cerr << "Execution has ended in error" << std::endl;
575  std::cerr << report << std::endl;
576  return_value = 2;
577  }
578 
579  if(myArgs.display>0)
580  {
581  std::ofstream g("titi");
582  p->writeDot(g);
583  g.close();
584  }
585 
586  if (isDump)
587  {
588  pthread_join(th,NULL);
589  }
590 
591  bool isFinalDump = !myArgs.finalDump.empty() ;
592  if (isFinalDump)
593  {
596  p->accept(&vst);
597  vst.closeFileDump();
598  }
599  if(myArgs.shutdown < 999)
600  {
602  shutdownServers();
603  }
604  delete p;
607  r->fini();
608  delete r;
609  delete disp;
611  return return_value;
612  }
613  catch (YACS::Exception& e)
614  {
615  cerr << "Caught a YACS exception" << endl;
616  cerr << e.what() << endl;
619  r->fini();
620  delete r;
621  delete disp;
622  return 1;
623  }
624  catch (const std::ios_base::failure&)
625  {
626  cerr << "Caught an io failure exception" << endl;
627  return 1;
628  }
629  catch(CORBA::SystemException& ex)
630  {
631  cerr << "Caught a CORBA::SystemException.:" << __FILE__ << ":" << __LINE__ << ":" ;
632  CORBA::Any tmp;
633  tmp <<= ex;
634  CORBA::TypeCode_var tc = tmp.type();
635  const char *p = tc->name();
636  if ( *p != '\0' )
637  cerr <<p;
638  else
639  cerr << tc->id();
640  cerr << endl;
641  return 1;
642  }
643  catch(omniORB::fatalException& fe)
644  {
645  cerr << "Caught omniORB::fatalException:" << endl;
646  cerr << " file: " << fe.file() << endl;
647  cerr << " line: " << fe.line() << endl;
648  cerr << " mesg: " << fe.errmsg() << endl;
649  return 1;
650  }
651  catch(...)
652  {
653  cerr << "Caught unknown exception." << endl;
654  return 1;
655  }
656 }
657 
void display(CORBA::Any *data)
Definition: CORBAPorts.cxx:144
static timeval tv
Definition: chrono.hxx:71
CORBA::Object_ptr Resolve(const char *Path) override
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 shutdown(int level)
Stop all pending activities of the composed node.
virtual void resetState(int level)
Reset the state of the node and its children depending on the parameter level.
virtual void cleanNodes()
Clean the composed node in case of not clean exit.
void checkConsistency(LinkInfo &info) const
Base class for dispatcher in observer pattern.
Definition: Dispatcher.hxx:74
static Dispatcher * getDispatcher()
Definition: Dispatcher.cxx:55
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
static const unsigned char ALL_DONT_STOP
Definition: LinkInfo.hxx:127
std::string getGlobalRepr() const
Definition: LinkInfo.cxx:118
bool areWarningsOrErrors() const
Definition: LinkInfo.cxx:199
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
static std::string getStateName(YACS::StatesForNode state)
Return the name of a state.
Definition: Node.cxx:827
virtual int isValid()
indicates if the node is valid (returns 1) or not (returns 0)
Definition: Node.cxx:730
virtual YACS::StatesForNode getEffectiveState() const
Return the node state in the context of its father.
Definition: Node.cxx:538
Base class for all schema objects.
Definition: Proc.hxx:44
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 accept(Visitor *visitor)
Definition: Proc.cxx:199
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
static void setRuntime(long flags=UsePython+UseCorba+UseXml+UseCpp+UseSalome, int argc=0, char *argv[]=NULL)
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
void openFileSchema(std::string xmlDump)
void openFileDump(const std::string &xmlDump)
class for parse an xml file, use a dedicated parser, to load a saved state of a SALOME execution.
Definition: LoadState.hxx:54
virtual void parse(std::string xmlState)
Definition: LoadState.cxx:917
specialized parser to load SALOME execution saved states.
Definition: LoadState.hxx:81
void shutdownServers()
Definition: driver.cxx:315
static struct arguments myArgs
Definition: driver.cxx:217
Proc * p
Definition: driver.cxx:216
int main(int argc, char *argv[])
Definition: driver.cxx:342
bool parse_init_port(const std::string &input, std::string &node, std::string &port, std::string &value)
Definition: driver.cxx:294
static error_t parse_opt(int key, char *arg, struct argp_state *state)
Definition: driver.cxx:116
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
const char * argp_program_version
Definition: driver.cxx:61
void(* sighandler_t)(int)
Definition: driver.cxx:277
static char args_doc[]
Definition: driver.cxx:64
void InitializeSSL()
Definition: driver.cxx:309
const char * argp_program_bug_address
Definition: driver.cxx:62
static struct argp argp
Definition: driver.cxx:200
static struct argp_option options[]
Definition: driver.cxx:68
void timer(std::string msg)
Definition: driver.cxx:203
static char doc[]
Definition: driver.cxx:63
YACSRUNTIMESALOME_EXPORT RuntimeSALOME * getSALOMERuntime()
void YACSLIBENGINE_EXPORT UnLoadObserversPluginIfAny()
YACSLIBENGINE_EXPORT Runtime * getRuntime()
Definition: Runtime.cxx:61
void YACSLIBENGINE_EXPORT LoadObserversPluginIfAny(ComposedNode *rootNode, Executor *executor)
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
std::string finalDump
Definition: driver.cxx:94
int killPort
Definition: driver.cxx:100
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
int shutdown
Definition: driver.cxx:98
std::string loadState
Definition: driver.cxx:97
int verbose
Definition: driver.cxx:91
int nbsec
Definition: driver.cxx:106
string lockFile
Definition: driver.cxx:108
string dumpFile
Definition: driver.cxx:107
CORBA::ORB_ptr orb
Definition: yacsSrv.cxx:39
YACS::YACSLoader::YACSLoader * loader
Definition: yacs_clt.cxx:31