Version: 9.16.0
SALOME_LogManager.hxx
Go to the documentation of this file.
1// Copyright (C) 2024-2026 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#pragma once
21
23
24#include "Python.h"
25
26#include "PythonCppUtils.hxx"
28#include "SALOMEconfig.h"
29
30#include CORBA_SERVER_HEADER(SALOME_LogManager)
31
32#include <vector>
33#include <string>
34#include <memory>
35
41
42namespace SALOME
43{
44 auto ServantDeleter = [](PortableServer::ServantBase *serv) { if(serv) serv->_remove_ref(); };
45 using AutoServantDeleter = std::unique_ptr<PortableServer::ServantBase, decltype(ServantDeleter)>;
46
56 template<class TVar, class TServ>
58 {
59 public:
60 RefAndServant(TVar var, TServ *serv):_var(var),_serv(serv,ServantDeleter) { }
61 RefAndServant(const RefAndServant& other):_var( other._var ),_serv(nullptr,ServantDeleter)
62 {
63 other.getServ()->_add_ref();
64 _serv.reset( other.getServ() );
65 }
66 ~RefAndServant() = default;
68 {
69 _var = other._var;
70 other.getServ()->_add_ref();
71 _serv.reset( other.getServ() );
72 return *this;
73 }
74 TVar getVar() const { return _var; }
75 TServ *getServ() const { return dynamic_cast<TServ *>( _serv.get() ); }
77 {
78 PortableServer::ObjectId_var oid = getServ()->getPOA()->reference_to_id(_var);
79 getServ()->getPOA()->deactivate_object(oid);
80 }
81 private:
82 TVar _var;
84 };
85}
86
88{
89public:
90 virtual void enterLogManager(SALOME_LogManager& inst) = 0;
91 virtual void leaveLogManager(SALOME_LogManager& inst) = 0;
97};
98
99
100class SALOMELAUNCHER_EXPORT SALOME_ContainerScriptExecPerfLog : public POA_Engines::ContainerScriptExecPerfLog
101{
102public:
104 SALOME_ContainerScriptPerfLog *father() const { return _father; }
105 void setPyObj(PyObject *obj) { _pyExecutionLog.set(obj); }
106 PyObject *pyObj() { return _pyExecutionLog.get(); }
107 PortableServer::POA_var getPOA();
108 void assign(const SALOME::vectorOfByte& value) override;
109 void assignAndAppendFreestyle(const SALOME::vectorOfByte& value) override;
110 SALOME::vectorOfByte *getObj() override;
111 const std::vector<char>& data() const { return _data; }
112 void setData(std::vector<char>&& data) { _data = std::move(data); }
113public:
114 void accept(SALOME_VisitorContainerLog &visitor);
115public:
116 void start();
117 AutoPyRef end();
118 void clear() { _data.clear(); }
119private:
120 AutoPyRefGilSafe _pyExecutionLog;
122 std::vector<char> _data;
123};
124
126
127class SALOMELAUNCHER_EXPORT SALOME_ContainerScriptPerfLog : public POA_Engines::ContainerScriptPerfLog
128{
129public:
130 SALOME_ContainerScriptPerfLog(SALOME_ContainerPerfLog *father, const std::string& name, const std::string& code):_father(father),_name(name),_code(code) { }
132 SALOME_ContainerPerfLog *father() const { return _father; }
133 void setPyObj(PyObject *obj) { _pyScriptLog.set(obj); }
134 PyObject *pyObj() { return _pyScriptLog.get(); }
135 PortableServer::POA_var getPOA();
136 Engines::ContainerScriptExecPerfLog_ptr addExecutionSession() override;
137 Engines::ListOfContainerScriptExecPerfLog *listOfExecs() override;
138 char *getCode() override;
139 char *getName() override;
140 const std::string& name() const { return _name; }
141 const std::string& code() const { return _code; }
142 void setName(const std::string& name) { _name = name; }
143 void setCode(const std::string& code) { _code = code; }
144 std::size_t getNumberOfSessions() const { return _sessions.size(); }
145public:
146 void accept(SALOME_VisitorContainerLog &visitor);
147private:
148 AutoPyRefGilSafe _pyScriptLog;
149 SALOME_ContainerPerfLog *_father = nullptr;
150 std::string _name;
151 std::string _code;
152 std::vector< ContainerScriptExecPerfLogPair > _sessions;
153};
154
156
157class SALOMELAUNCHER_EXPORT SALOME_ContainerPerfLog : public POA_Engines::ContainerPerfLog
158{
159public:
160 SALOME_ContainerPerfLog(SALOME_LogManager *father, const std::string& nameInNS, const std::string& logFile):_father(father),_name_in_ns(nameInNS),_log_file(logFile) { }
162 SALOME_LogManager *father() const { return _father; }
163 void setPyObj(PyObject *obj) { _pyContLog.set(obj); }
164 PyObject *pyObj() { return _pyContLog.get(); }
165 PortableServer::POA_var getPOA();
166 char *getLogFile() override;
167 char *getContainerEntryInNS() override;
168 Engines::ContainerScriptPerfLog_ptr addScript(const char *name, const char *code) override;
169 Engines::ListOfContainerScriptPerfLog *listOfScripts() override;
170 /* Call that destroy this object AND unregister from POA all referecences of this*/
171 void destroy() override;
172 const std::string& nameInNS() const { return _name_in_ns; }
173 const std::string& logFile() const { return _log_file; }
174 void setNameInNS(const std::string& name) { _name_in_ns = name; }
175 void setLogFile(const std::string& logFile) { _log_file = logFile; }
176 std::size_t getNumberOfScripts() const { return _scripts.size(); }
177public:
178 void accept(SALOME_VisitorContainerLog &visitor);
179private:
180 void destroyInternal();
181private:
182 AutoPyRefGilSafe _pyContLog;
183 SALOME_LogManager *_father = nullptr;
184 std::string _name_in_ns;
185 std::string _log_file;
186 std::vector< ContainerScriptPerfLogPair > _scripts;
187};
188
191
193{
194public:
195 void setFileNamePairOfLogger(const std::string& loggerFileNameA, const std::string& loggerFileNameB) { _logger_file_a = loggerFileNameA; _logger_file_b = loggerFileNameB; }
196 void getFileNamePairOfLogger(std::string& loggerFileNameA, std::string& loggerFileNameB) { loggerFileNameA = _logger_file_a; loggerFileNameB = _logger_file_b; }
199 std::string getLastVersionOfFileNameLogger();
200private:
201 std::string _logger_file_a;
202 std::string _logger_file_b;
204};
205
207
208class SALOMELAUNCHER_EXPORT SALOME_LogManager : public POA_Engines::LogManager
209{
210 public:
211 SALOME_LogManager(CORBA::ORB_ptr orb, PortableServer::POA_var poa, SALOME_NamingService_Abstract *ns = nullptr);
212 PortableServer::POA_var getPOA() { return _poa; }
213 PyObject *pyHelper() const { return _pyLogManager; }
215 void clear() override;
216 Engines::ContainerPerfLog_ptr declareContainer(const char *contInNS, const char *logfile) override;
217 Engines::ListOfContainerPerfLog *listOfContainerLogs() override;
218 SALOME::vectorOfByte *getAllStruct(bool clearMemory) override;
219 void putStructInFileAtomic(bool clearMemory, const char *fileName) override;
220 public:
221 void setFileNamePairOfLogger(const char *loggerFileNameA, const char *loggerFileNameB) override;
222 void getFileNamePairOfLogger(CORBA::String_out loggerFileNameA, CORBA::String_out loggerFileNameB) override;
223 void versionA_IsTheLatestValidVersion() override { _safe_logger_file_holder.versionA_IsTheLatestValidVersion(); }
224 void versionB_IsTheLatestValidVersion() override { _safe_logger_file_holder.versionB_IsTheLatestValidVersion(); }
225 char *getLastVersionOfFileNameLogger() override;
226 public:
227 void removeEntryBeforeDying(SALOME_ContainerPerfLog *child);
228 public:
229 std::size_t getNumberOfContainers() const { return _containers.size(); }
230 public:
231 void accept(SALOME_VisitorContainerLog &visitor);
232 private:
233 std::vector<char> dumpCppInternalFrmt(bool clearMemory);
234 private:
235 PyObject *_pyLogManager = nullptr;
236 std::unique_ptr<SALOME_NamingService_Abstract> _NS;
237 PortableServer::POA_var _poa;
238 std::vector< ContainerPerfLogPair > _containers;
240 public:
241 static const char NAME_IN_NS[];
242};
static PortableServer::POA_var _poa
Definition: SALOMEDS_Study_i.cxx:70
#define SALOMELAUNCHER_EXPORT
Definition: SALOME_Launcher_defs.hxx:30
SafeLoggerActiveVersionType
Definition: SALOME_LogManager.hxx:190
Class in charge to manage life cycle of servant instance and its associated reference.
Definition: SALOME_LogManager.hxx:58
SALOME::AutoServantDeleter _serv
Definition: SALOME_LogManager.hxx:83
RefAndServant(TVar var, TServ *serv)
Definition: SALOME_LogManager.hxx:60
TVar _var
Definition: SALOME_LogManager.hxx:82
RefAndServant(const RefAndServant &other)
Definition: SALOME_LogManager.hxx:61
TVar getVar() const
Definition: SALOME_LogManager.hxx:74
TServ * getServ() const
Definition: SALOME_LogManager.hxx:75
void desactivateObjectFromPOA()
Definition: SALOME_LogManager.hxx:76
RefAndServant & operator=(const RefAndServant &other)
Definition: SALOME_LogManager.hxx:67
Definition: SALOME_LogManager.hxx:158
void setNameInNS(const std::string &name)
Definition: SALOME_LogManager.hxx:174
std::string _name_in_ns
Definition: SALOME_LogManager.hxx:184
const std::string & logFile() const
Definition: SALOME_LogManager.hxx:173
const std::string & nameInNS() const
Definition: SALOME_LogManager.hxx:172
void setPyObj(PyObject *obj)
Definition: SALOME_LogManager.hxx:163
std::vector< ContainerScriptPerfLogPair > _scripts
Definition: SALOME_LogManager.hxx:186
PyObject * pyObj()
Definition: SALOME_LogManager.hxx:164
std::string _log_file
Definition: SALOME_LogManager.hxx:185
AutoPyRefGilSafe _pyContLog
Definition: SALOME_LogManager.hxx:182
std::size_t getNumberOfScripts() const
Definition: SALOME_LogManager.hxx:176
SALOME_ContainerPerfLog(SALOME_LogManager *father, const std::string &nameInNS, const std::string &logFile)
Definition: SALOME_LogManager.hxx:160
SALOME_LogManager * father() const
Definition: SALOME_LogManager.hxx:162
void setLogFile(const std::string &logFile)
Definition: SALOME_LogManager.hxx:175
Definition: SALOME_LogManager.hxx:101
std::vector< char > _data
Definition: SALOME_LogManager.hxx:122
SALOME_ContainerScriptPerfLog * father() const
Definition: SALOME_LogManager.hxx:104
PyObject * pyObj()
Definition: SALOME_LogManager.hxx:106
void setPyObj(PyObject *obj)
Definition: SALOME_LogManager.hxx:105
const std::vector< char > & data() const
Definition: SALOME_LogManager.hxx:111
SALOME_ContainerScriptExecPerfLog(SALOME_ContainerScriptPerfLog *father)
Definition: SALOME_LogManager.hxx:103
void clear()
Definition: SALOME_LogManager.hxx:118
AutoPyRefGilSafe _pyExecutionLog
Definition: SALOME_LogManager.hxx:120
void setData(std::vector< char > &&data)
Definition: SALOME_LogManager.hxx:112
Definition: SALOME_LogManager.hxx:128
const std::string & code() const
Definition: SALOME_LogManager.hxx:141
void setName(const std::string &name)
Definition: SALOME_LogManager.hxx:142
PyObject * pyObj()
Definition: SALOME_LogManager.hxx:134
SALOME_ContainerPerfLog * father() const
Definition: SALOME_LogManager.hxx:132
void setPyObj(PyObject *obj)
Definition: SALOME_LogManager.hxx:133
std::size_t getNumberOfSessions() const
Definition: SALOME_LogManager.hxx:144
std::string _name
Definition: SALOME_LogManager.hxx:150
SALOME_ContainerScriptPerfLog(SALOME_ContainerPerfLog *father, const std::string &name, const std::string &code)
Definition: SALOME_LogManager.hxx:130
void setCode(const std::string &code)
Definition: SALOME_LogManager.hxx:143
const std::string & name() const
Definition: SALOME_LogManager.hxx:140
std::string _code
Definition: SALOME_LogManager.hxx:151
AutoPyRefGilSafe _pyScriptLog
Definition: SALOME_LogManager.hxx:148
std::vector< ContainerScriptExecPerfLogPair > _sessions
Definition: SALOME_LogManager.hxx:152
PyObject * pyHelper() const
Definition: SALOME_LogManager.hxx:213
PortableServer::POA_var _poa
Definition: SALOME_LogManager.hxx:237
PortableServer::POA_var getPOA()
Definition: SALOME_LogManager.hxx:212
std::unique_ptr< SALOME_NamingService_Abstract > _NS
Definition: SALOME_LogManager.hxx:236
void versionA_IsTheLatestValidVersion() override
Definition: SALOME_LogManager.hxx:223
void versionB_IsTheLatestValidVersion() override
Definition: SALOME_LogManager.hxx:224
SALOME_SafeLoggerFileHolder _safe_logger_file_holder
Definition: SALOME_LogManager.hxx:239
std::size_t getNumberOfContainers() const
Definition: SALOME_LogManager.hxx:229
std::vector< ContainerPerfLogPair > _containers
Definition: SALOME_LogManager.hxx:238
Definition: SALOME_NamingService_Abstract.hxx:46
Definition: SALOME_LogManager.hxx:193
void setFileNamePairOfLogger(const std::string &loggerFileNameA, const std::string &loggerFileNameB)
Definition: SALOME_LogManager.hxx:195
void getFileNamePairOfLogger(std::string &loggerFileNameA, std::string &loggerFileNameB)
Definition: SALOME_LogManager.hxx:196
void versionA_IsTheLatestValidVersion()
Definition: SALOME_LogManager.hxx:197
std::string _logger_file_a
Definition: SALOME_LogManager.hxx:201
void versionB_IsTheLatestValidVersion()
Definition: SALOME_LogManager.hxx:198
std::string _logger_file_b
Definition: SALOME_LogManager.hxx:202
SafeLoggerActiveVersionType _version_activated
Definition: SALOME_LogManager.hxx:203
std::string getLastVersionOfFileNameLogger()
Definition: SALOME_LogManager.cxx:290
Definition: SALOME_LogManager.hxx:88
virtual void leaveContainerScriptPerfLog(SALOME_ContainerScriptPerfLog &inst)=0
virtual void enterContainerPerfLog(SALOME_ContainerPerfLog &inst)=0
virtual void leaveLogManager(SALOME_LogManager &inst)=0
virtual void enterContainerScriptPerfLog(SALOME_ContainerScriptPerfLog &inst)=0
virtual void enterLogManager(SALOME_LogManager &inst)=0
virtual void leaveContainerPerfLog(SALOME_ContainerPerfLog &inst)=0
virtual void visitContainerScriptExecPerfLog(SALOME_ContainerScriptExecPerfLog &inst)=0
sequence< ContainerScriptPerfLog > ListOfContainerScriptPerfLog
Definition: SALOME_LogManager.idl:45
sequence< ContainerScriptExecPerfLog > ListOfContainerScriptExecPerfLog
Definition: SALOME_LogManager.idl:35
sequence< ContainerPerfLog > ListOfContainerPerfLog
Definition: SALOME_LogManager.idl:56
obj
Definition: batchmode_salome.py:275
poa
Definition: SALOME_ContainerPy.py:377
Definition: SALOME_LogManager.py:1
Module SALOME contains all base interfaces of SALOME Kernel.
Definition: SALOME_LockMasterImpl.hxx:29
std::unique_ptr< PortableServer::ServantBase, decltype(ServantDeleter)> AutoServantDeleter
Definition: SALOME_LogManager.hxx:45
sequence< octet > vectorOfByte
Definition: SALOME_Comm.idl:44
auto ServantDeleter
Definition: SALOME_LogManager.hxx:44
string name
Definition: pythfilter.py:56
orb
Definition: salome.py:122