Salome HOME
[EDF29138] : measure CPU/Mem even in OutOfProcess mode
[modules/kernel.git] / src / Container / SALOME_Container.py
index b4639588c9109065b89d16ced4e68ca118993d33..94c48e7c51cca03c29e8c870acbf9acbe6b364fa 100644 (file)
@@ -31,6 +31,7 @@
 # \brief python implementation of container interface for Kernel
 #
 
+import abc
 import os
 import sys
 import traceback
@@ -52,7 +53,7 @@ from KernelBasis import VerbosityActivated,getSSLMode
 
 #define an implementation of the container interface for embedding in Container implemented in C++
 
-class SALOME_Container_i:
+class SALOME_Container_Abstract_i(abc.ABC):
     _orb = None
     _poa = None
     _containerName = ""
@@ -60,7 +61,7 @@ class SALOME_Container_i:
 
     #-------------------------------------------------------------------------
 
-    def __init__(self ,containerName, containerIORStr, dftTimeIntervalInMs):
+    def __init__(selfcontainerName, containerIORStr, dftTimeIntervalInMs):
         # Warning this part of code is called at the very first step of container launching
         # so logging is not instanciate. So use verbose method to discrimine if a message should be printed or not
         try:
@@ -80,6 +81,10 @@ class SALOME_Container_i:
         self._log = None
         self._container = self._orb.string_to_object(containerIORStr)
 
+    @abc.abstractmethod
+    def getPyScriptCls(self):
+        raise RuntimeError("Must be overloaded")
+
     @property
     def logm(self):
         logging.debug("Logm PID = {}".format(os.getpid()))
@@ -160,7 +165,8 @@ class SALOME_Container_i:
           logscript = None
           if getSSLMode():
             logscript = self._log.addScript(nodeName,code)
-          node=SALOME_PyNode.PyScriptNode_i(nodeName,code,self._poa,self, logscript)
+          cls = self.getPyScriptCls()
+          node = cls(nodeName,code,self._poa,self, logscript)
           id_o = self._poa.activate_object(node)
           comp_o = self._poa.id_to_reference(id_o)
           comp_iors = self._orb.object_to_string(comp_o)
@@ -183,8 +189,13 @@ class SALOME_Container_i:
     def shutdownPy(self):
         if getSSLMode():
            if self._log:
-              self._log.destroy()
-    
+              #self._log.destroy()# TODO : choose to destroy perf report or not. For the moment we keep the report
+              pass
+           
+    def killMe(self):
+        import signal
+        os.kill( os.getpid() , signal.SIGKILL)
+           
     def setLogFileName(self, logFileName):
         logging.debug("setLogFileName {} PID = {}".format(logFileName,os.getpid()))
         if getSSLMode():
@@ -192,3 +203,24 @@ class SALOME_Container_i:
 
     def SetMonitoringtimeresms(self , value):
         self._timeIntervalInMs = value
+
+class SALOME_Container_i(SALOME_Container_Abstract_i):
+    def __init__(self, containerName, containerIORStr, dftTimeIntervalInMs):
+      super().__init__(containerName, containerIORStr, dftTimeIntervalInMs)
+
+    def getPyScriptCls(self):
+      return SALOME_PyNode.PyScriptNode_i
+
+class SALOME_Container_OutOfProcess_i(SALOME_Container_i):
+    def __init__(self, containerName, containerIORStr, dftTimeIntervalInMs):
+      super().__init__(containerName, containerIORStr, dftTimeIntervalInMs)
+      
+    def getPyScriptCls(self):
+      return SALOME_PyNode.PyScriptNode_OutOfProcess_i
+
+class SALOME_Container_OutOfProcess_Replay_i(SALOME_Container_i):
+    def __init__(self, containerName, containerIORStr, dftTimeIntervalInMs):
+      super().__init__(containerName, containerIORStr, dftTimeIntervalInMs)
+
+    def getPyScriptCls(self):
+      return SALOME_PyNode.PyScriptNode_OutOfProcess_Replay_i