MTemplate.h
1 /*****************************************************************************
2 **
3 ** Header file for Virtual Vertex Template class
4 **
5 ** Name : MTemplate.h
6 ** Author : Leonardo Bernardini
7 ** Version : Alpha 9.0 Wed May 17th 2017
8 **
9 ** Copyright 2000-2017, Virtual Vertex
10 ** All Rights Reserved.
11 **
12 ** This file contains UNPUBLISHED PROPRIETARY SOURCE CODE.
13 ** The contents of this file may not be disclosed to third parties, copied
14 ** or duplicated in any form, in whole or in part, without the prior written
15 ** permission of the author.
16 **
17 *****************************************************************************/
18 #ifndef MTEMPLATE_H
19 #define MTEMPLATE_H
20 
21 #ifdef WIN32
22 // Windows definitions
23 #ifdef MTEMPLATE_EXPORTS
24 #define MTEMPLATE_API __declspec(dllexport)
25 #else
26 #define MTEMPLATE_API __declspec(dllimport)
27 #endif
28 #else
29 
30 #ifndef MTEMPLATE_EXPORTS
31 #ifdef LINUX
32 #define MTEMPLATE_API
33 #else
34 #define MTEMPLATE_API
35 #endif
36 #else
37 #define MTEMPLATE_API
38 #endif
39 #endif
40 
41 // Disable STL Export warning
42 #if defined(_WIN32)
43 #pragma warning(disable: 4251)
44 #endif // _WIN32
45 
46 #include <string>
47 
48 #include "MClientLib/MProcess.h"
49 #include "MClientLib/MChunk.h"
50 #include "MClientLib/MJob.h"
51 #include "MClientLib/MLog.h"
52 #include "MClientLib/MNode.h"
53 #include "MClientLib/MUser.h"
54 #include "MClientLib/MStringRef.h"
55 #include "MClientLib/MTextFileMarker.h"
56 #include "MClientLib/MTextFileRule.h"
57 #include "MClientLib/MAlarm.h"
58 
59 #include "MTemplate/MTemplateTask.h"
60 #include "MTemplate/MTemplateActionOverride.h"
61 #include "MTemplate/MTemplateComboItem.h"
62 #include "MTemplate/MTemplateError.h"
63 #include "MTemplate/MTemplateErrorOverride.h"
64 #include "MTemplate/MTemplateImageSlicing.h"
65 #include "MTemplate/MTemplateImageSlicingFileFormats.h"
66 #include "MTemplate/MTemplateItem.h"
67 #include "MTemplate/MTemplateItemCheck.h"
68 #include "MTemplate/MTemplateItemCombo.h"
69 #include "MTemplate/MTemplateItemDouble.h"
70 #include "MTemplate/MTemplateItemEvent.h"
71 #include "MTemplate/MTemplateItemFile.h"
72 #include "MTemplate/MTemplateItemFolder.h"
73 #include "MTemplate/MTemplateItemFramesRange.h"
74 #include "MTemplate/MTemplateItemHolder.h"
75 #include "MTemplate/MTemplateItemInteger.h"
76 #include "MTemplate/MTemplateItemMultichoice.h"
77 #include "MTemplate/MTemplateItemsFields.h"
78 #include "MTemplate/MTemplateItemString.h"
79 #include "MTemplate/MTemplateItemYesNo.h"
80 #include "MTemplate/MTemplateMultiframe.h"
81 #include "MTemplate/MTemplateParsingRule.h"
82 #include "MTemplate/MTemplatePlatform.h"
83 #include "MTemplate/MTemplateSliceBoundaries.h"
84 #include "MTemplate/MTemplateTextMarkers.h"
85 
86 namespace MTemplateEngine {
87 
103  };
104 
108  class MTEMPLATE_API MTemplatePopUpHandler {
109  public:
110  MTemplatePopUpHandler(const std::string& titleRegExp, const std::string& subControlRegExp, const std::string& buttons);
111  MTemplatePopUpHandler(const std::string& titleRegExp, const std::string& button);
112  MTemplatePopUpHandler(const std::string& titleRegExp);
113 
114  const std::string& getTitleRegExp();
115  const std::string& getSubControlRegExp();
116  std::vector<std::string> getButtons();
117  bool getIsIgnored();
118  bool getHasSubcontrol();
119 
120  private:
121  std::string titleRegExp;
122  std::string subControlRegExp;
123  std::string buttons;
124  bool isIgnored;
125  bool hasSubcontrol;
126  };
136  class MTEMPLATE_API MTemplate
137  {
138  friend class MManager;
139 
140  public:
141 
149  kTemplateEncodingUTF16
150  };
151 
161  kTemplateMusterEnvSkip
162  };
163 
164  MTemplate();
165  virtual ~MTemplate();
166  void Retain();
167  void Release();
168  void Lock();
169  void Unlock();
170 
171  bool isPythonTemplate();
172 
173  MTemplateEngine::MTemplatePlatform platformWindows;
176 
179 
180  MTemplateEngine::MTemplateErrorOverride logWarningsOverrides;
181  MTemplateEngine::MTemplateErrorOverride logErrorsOverrides;
182  MTemplateEngine::MTemplateErrorOverride exitCodeWarningsOverrides;
183  MTemplateEngine::MTemplateErrorOverride exitCodeErrorsOverrides;
184  MTemplateEngine::MTemplateErrorOverride processFailureErrorsOverrides;
185  bool getEnableLogWarningsOverrides();
186  bool getEnableLogErrorsOverrides();
187  bool getEnableExitCodeWarningsOverrides();
188  bool getEnableExitCodeErrorsOverrides();
189  bool getEnableProcessFailureErrorsOverrides();
190 
191  void setEnableLogWarningsOverrides(bool _enableLogWarningsOverrides);
192  void setEnableLogErrorsOverrides(bool _enableLogErrorsOverrides);
193  void setEnableExitCodeWarningsOverrides(bool _enableExitCodeWarningsOverrides);
194  void setEnableExitCodeErrorsOverrides(bool _enableExitCodeErrorsOverrides);
195  void setEnableProcessFailureErrorsOverrides(bool _enableProcessFailureErrorsOverrides);
196 
197  MTemplateEngine::MTemplateActionOverride preJobActionOverrides;
198  MTemplateEngine::MTemplateActionOverride postJobActionOverrides;
199  MTemplateEngine::MTemplateActionOverride preChunkActionOverrides;
200  MTemplateEngine::MTemplateActionOverride postChunkActionOverrides;
201  bool getEnablePreChunkActionsOverrides();
202  bool getEnablePostChunkActionsOverrides();
203  bool getEnablePreJobActionsOverrides();
204  bool getEnablePostJobActionsOverrides();
205  void setEnablePreChunkActionsOverrides(bool _enablePreChunkActionsOverrides);
206  void setEnablePostChunkActionsOverrides(bool _enablePostChunkActionsOverrides);
207  void setEnablePreJobActionsOverrides(bool _enablePreJobActionsOverrides);
208  void setEnablePostJobActionsOverrides(bool _enablePostJobActionsOverrides);
209 
210  std::string getTemplateContent();
211  std::string getMacroContent();
212  std::string getVersionsContent();
213  std::string getParserContent();
214  std::string getEnvironmentsContent();
215 
216  std::string getName();
217  bool getIsReservTemplate();
218  std::string getDescription();
219  int getID();
220  std::string getFileName();
221  std::string getMd5Hash();
222  std::string getIconFilename();
223  int getTemplateLogic();
224  int getTemplateTasksMask();
225  int getTemplateEncoding();
226  int getDefaultPriority();
227  bool getTrimLogs();
228  int getMusterInstanceCustomEnvironmentMode();
229  int getMusterInstanceActionsCustomEnvironmentMode();
230  int getMusterDispatcherActionsCustomEnvironmentMode();
231 
232  std::string getDefaultPools();
233  std::string getDefaultExcludedPools();
234  int getMaximumLicenses();
235  std::string getLicensesGroup();
236  int getDelay();
237  std::string getDelayGroup();
238 
239  bool getEnableAdditionalFlagsField();
240  bool getEnableChunksTimeoutOverride();
241  bool getOverrideMaximumChunksRequeue();
242  int getOverrideMaximumChunksRequeueValue();
243  int getChunksTimeout();
244 
245  void setIsReservTemplate(bool _reservTemplate);
246  void setName(const std::string& _name);
247  void setDescription(const std::string& _description);
248  void setID(int _id);
249  void setFilename(const std::string& _filename);
250  void setMd5Hash(const std::string& _md5Hash);
251  void setIconFilename(const std::string& _iconFilename);
252  void setTemplateLogic(int _templateLogic);
253  void setTemplateEncoding(int _templateEncoding);
254  void setDefaultPriority(int _defaultPriority);
255  void setTrimLogs(bool _trimLogs);
256  void setMusterInstanceCustomEnvironmentMode(kTemplateMusterEnvironmentHandling mode);
257  void setMusterInstanceActionsCustomEnvironmentMode(kTemplateMusterEnvironmentHandling mode);
258  void setMusterDispatcherActionsCustomEnvironmentMode(kTemplateMusterEnvironmentHandling mode);
259 
260  void setDefaultPools(const std::string& _defaultPools);
261  void setDefaultExcludedPools(const std::string& _defaultExcludedPools);
262  void setMaximumLicenses(int _maximumLicenses);
263  void setLicensesGroup(const std::string& _licensesGroup);
264  void setDelay(int _delay);
265  void setDelayGroup(const std::string& _delayGroup);
266  void setEnableAdditionalFlagsField(bool _enableAdditionalFlagsField);
267 
268  void addJobLicenseLimit(const std::string& tag, int limit, const std::string& field);
269  const std::vector<std::string>& getJobLicensesTags();
270  const std::vector<int>& getJobLicensesLimits();
271  const std::vector<std::string>& getJobLicensesFields();
272 
273  void setEnableChunksTimeoutOverride(bool _enableChunksTimeoutOverride);
274  void setChunksTimeout(int _chunksTimeout);
275  void setOverrideMaximumChunksRequeue(bool _overrideMaximumChunksRequeue);
276  void setOverrideMaximumChunksRequeueValue(int _overrideMaximumChunksRequeueValue);
277 
278  void setHandlePopups(bool _handlePopUps);
279  void setHandleWin10PopUps(bool _handleWin10PopUps);
280  void setHandleQtPopups(bool _handleQtPopUps);
281  void setHandleHeadlessApp(bool _handleHeadlessApp);
282  void addPopUpHandler(const std::string& popupRegExp, const std::string& subControlRegExp, const std::string& buttons);
283  void addPopUpHandler(const std::string& popupRegExp, const std::string& buttons);
284  void addPopUpIgnorer(const std::string& popupRegExp);
285  void addAppKiller(const std::string& processRegExp);
286  void addPopUpButtonClass(const std::string& buttonClass);
287  void setPopUpsMaxChildWindows(int _popUpsMaxChildWindows);
289  bool shouldIgnorePopUp(MWinHandle wnd);
290  std::vector<std::string> shouldHandlePopUp(MWinHandle wnd);
291  const std::vector<std::string>& getPopUpButtonClasses();
292  bool getHandlePopups();
293  bool getHandleQtPopups();
294  bool getHandleWin10PopUps();
295  bool getHandleHeadlessApp();
296  bool getHandleAppKiller();
297  int getPopUpsMaxChildWindows();
298  void processAppKiller();
300  void clearVersions();
301  std::vector<std::string> getVersions();
302  bool hasVersion(const std::string& version);
303  void setVersions(const std::vector<std::string>& versions);
304  void addVersion(const std::string& version);
305  void removeVersion(const std::string& version);
306  int getVersionIndex(const std::string& version);
307  void setVersionIndex(const std::string& version, int index);
308 
309  void clearMacros();
310  void setMacro(const std::string& version, const std::string& macroName,const std::string& macroValue);
311  void setMacros(const std::string& version, const std::map<std::string,std::string>& macros);
312  std::string getMacro(const std::string& version,const std::string& macroName);
313  std::map<std::string, std::string> getMacros(const std::string& version);
314  void removeMacro(const std::string& version,const std::string& macroName);
315  void removeMacros(const std::string& version);
316  std::string getGlobalMacro(const std::string& macroName);
317 
318  void clearEnvironments();
319  void setEnvironment(const std::string& version, const std::string& environmentName, const std::string& environmentValue);
320  void setEnvironments(const std::string& version, const std::map<std::string, std::string>& environments);
321  std::string getEnvironment(const std::string& version, const std::string& environmentName);
322  std::map<std::string, std::string> getEnvironments(const std::string& version);
323  void removeEnvironment(const std::string& version, const std::string& environmentName);
324  void removeEnvironments(const std::string& version);
325  std::string getGlobalEnvironment(const std::string& environmentName);
326 
327  void clearRules();
328  void addRule(const std::string& version, MClientLib::MTextFileRule rule);
329  void setRules(const std::string& version, std::vector<MClientLib::MTextFileRule>);
330  void setRuleIndex(const std::string& version, int oldIndex, int index);
331  std::vector<MClientLib::MTextFileRule> getRules(const std::string& version);
332  void removeRules(const std::string& version);
333 
334  std::vector<MTemplateEngine::MTemplateTask*> getTasks();
335  void addTask(const std::string& name, MTemplateEngine::kTemplatesLogic _type, int _priority);
336  void setTaskEnable(const std::string& name, bool isEnabled);
337  void setTaskPriority(const std::string& name, int priority);
338  void setTaskDependancies(const std::string& name, const std::vector<std::string>& dependancies, const std::vector<int>& errorLevels);
339 
340  MTemplateEngine::MTemplatePlatform* getActivePlatform();
341 
342  void clearSubmissionItems();
343  void addSubmissionItem(MTemplateEngine::MTemplateItem* item);
344  std::vector<MTemplateEngine::MTemplateItem*>* getSubmissionItems();
345 
346  void clearSubmissionAdditionalItems();
347  void addSubmissionAdditionalItem(const char* groupName, MTemplateEngine::MTemplateItem* item);
348  std::vector<MTemplateEngine::MTemplateItemHolder*>* getSubmissionAdditionalItems();
349 
350  void clearMappings();
351  void addMapping(const std::string& templateValue, const std::string& builtinValue);
352  std::map<std::string,std::string>* getMappings();
353 
354  bool supportsFramesRanges();
355 
356  virtual void onFieldChanged(const std::string& fieldName, const std::string& fieldValue, MTemplateEngine::MTemplateItemsFields& fieldsToChange);
357  virtual void onCheckChanged(const std::string& fieldName, bool state, MTemplateEngine::MTemplateItemsFields& fieldsToChange);
358 
359  // Virtual functions for custom messages handling
360  virtual void onCustomNodeMessage(long instanceId, const char* message);
361  virtual void onCustomConsoleMessage(long clientId, const char* message);
362  virtual void onCustomNotificatorMessage(long clientId, const char* message);
363  virtual void onCustomDispatcherMessageToConsole(const char* message);
364  virtual void onCustomDispatcherMessageToNode(long instanceId,const char* message);
365  virtual void onCustomDispatcherMessageToNotificator(const char* message);
366 
367  // Virtual functions for general behaviour
368  virtual std::string onBuildCommandLine(int platform, MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, int instanceNum);
369  virtual std::string onBuildAdditionalParameters(MClientLib::MPropertiesMap& attributes);
370  virtual MTemplateEngine::MTemplateError onGetApplicationPath(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, MClientLib::MStringRef& pathOut );
371  virtual MTemplateEngine::MTemplateError onGetApplicationStartingFolder(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, MClientLib::MStringRef& pathOut);
372  virtual MClientLib::MEnvironment onBuildEnvironment(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, MClientLib::MEnvironment& existingEnvironment);
373  virtual std::string onGetWindowsBatFile(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, MClientLib::MEnvironment& existingEnvironment);
374  virtual bool onCheckForSubframeAdvancingString(MClientLib::MJob* job, MClientLib::MChunk* chunk, const char* line);
375  virtual bool onCheckForFramesPrefixString(MClientLib::MJob* job, MClientLib::MChunk* chunk, const char* line, MClientLib::MStringRef& prefixOut);
376  virtual bool onCheckForFramesMask(MClientLib::MJob* job, MClientLib::MChunk* chunk, const char* line, MClientLib::MStringRef& maskOut);
377  virtual bool onCheckForFramesMaskForLayer(MClientLib::MJob* job, MClientLib::MChunk* chunk, const char* line, MClientLib::MStringRef& maskOut, MClientLib::MStringRef& layerOut);
378  virtual bool onCheckForSubframeProgress(MClientLib::MJob* job, MClientLib::MChunk* chunk, const char* line, MClientLib::MStringRef& progressOut);
379  virtual std::string onGetFlagForRenderLayers(MClientLib::MJob* job,std::vector<std::string>& layers);
380  virtual MTemplateEngine::MTemplateError onCheckLogLine(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, const char* line, int lineNum, std::vector<MClientLib::MTextFileMarker>& warnings, std::vector<MClientLib::MTextFileMarker>& errors, std::vector<MClientLib::MTextFileMarker>& silencedWarnings, std::vector<MClientLib::MTextFileMarker>& silencedErrors);
381  virtual MTemplateEngine::MTemplateError onCheckLog(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, const char* log, std::vector<MClientLib::MTextFileMarker>& warnings, std::vector<MClientLib::MTextFileMarker>& errors, std::vector<MClientLib::MTextFileMarker>& silencedWarnings, std::vector<MClientLib::MTextFileMarker>& silencedErrors);
382  virtual MTemplateEngine::MTemplateError onCheckExitCode(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, int exitCode);
383  virtual int onApplicationFinder(MClientLib::MStringRef& moduleRegExp, MClientLib::MStringRef& moduleTag);
384  virtual bool onFindApplication(MClientLib::MStringRef& basePath,std::map<std::string,std::string>& clientTemplatePreferences);
385  virtual bool onModuleFound(MClientLib::MStringRef& moduleExec,MClientLib::MStringRef& modulePath,std::map<std::string,std::string>& clientTemplatePreferences);
386  virtual MTemplateEngine::kTemplateFunctionBehaviour onDetectRunningProcess(MPid mainProcess, std::vector <MClientLib::MProcessSnapshot*> hostProcesses, std::map<std::string,std::string>& clientTemplatePreferences,MPid& runningProcessPid);
387  virtual MTemplateEngine::kTemplateFunctionBehaviour onStartProcess(MClientLib::MJob* job, MClientLib::MChunk* chunk, MClientLib::MEnvironment* env, std::map<std::string,std::string>& clientTemplatePreferences, int instanceNum, MPid& runningProcessPid);
388  virtual MTemplateEngine::kTemplateFunctionBehaviour onCollectProcessOutput(MPid mainProcess,MPid runningProcessPid,int instanceNum,MClientLib::MStringRef& output);
389  virtual MTemplateEngine::kTemplateFunctionBehaviour onTerminateProcess(MClientLib::MJob* job, MClientLib::MChunk* chunk,MPid process, int instanceNum);
390  virtual MTemplateEngine::kTemplateFunctionBehaviour onChangeProcessPriority(MClientLib::MJob* job, MClientLib::MChunk* chunk, MPid process,int priority, int instanceNum);
391  virtual MTemplateEngine::kTemplateFunctionBehaviour onCheckProcessTermination(MClientLib::MJob* job, MClientLib::MChunk* chunk, MPid process, int instanceNum);
392  virtual MTemplateEngine::kTemplateFunctionBehaviour onInstanceOverrideImpersonationUser(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences,MClientLib::MStringRef& usernameOut,MClientLib::MStringRef& passwordOut);
393  virtual MTemplateEngine::kTemplateFunctionBehaviour onDispatcherOverrideImpersonationUser(MClientLib::MJob* job, MClientLib::MChunk* chunk,MClientLib::MStringRef& usernameOut,MClientLib::MStringRef& passwordOut);
394  virtual MTemplateEngine::kTemplateFunctionBehaviour onDispatcherOverrideFlagJobsAsArchived(MClientLib::MJob* job);
395  virtual MTemplateEngine::kTemplateFunctionBehaviour onDispatcherOverrideDeleteArchivedJobs(MClientLib::MJob* job);
396  virtual MTemplateEngine::kTemplateFunctionBehaviour onDispatcherOverrideBackupJob(MClientLib::MJob* job);
397 
398  // Virtual functions for mailing text templats
399  virtual bool onMailJobCompleted(MClientLib::MJob* job, bool framesHaveBeenRequeued, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
400  virtual bool onMailChunkCompleted(MClientLib::MJob* job, MClientLib::MChunk* chunk, MClientLib::MNode* node, bool chunkHasBeenRequeued, bool chunkHasMissingFrames, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
401  virtual bool onMailSendLogs(std::vector<MClientLib::MLog*> logs, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
402  virtual bool onMailConfigurationsChanged(const char* message, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
403  virtual bool onMailSoftRestarts(const char* message, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
404  virtual bool onMailEngineStatus(bool state, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
405  virtual bool onMailExclusionListEvent(const char* message, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
406  virtual bool onMailJobStart(MClientLib::MJob* job, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
407  virtual bool onMailChunkStart(MClientLib::MJob* job, MClientLib::MChunk* chunk, MClientLib::MNode* node, MClientLib::MStringRef& subjectOut, MClientLib::MStringRef& htmlBodyOut, MClientLib::MStringRef& plainBodyOut);
408 
409  // Virtual functions called on the global template too (id 0)
410  virtual bool onValidateJobSubmission(MClientLib::MJob* job, MClientLib::MStringRef& err); // Fired from the Console, clientlib ,and on the dispatcher when submitting from the web
411 
412  // Fired from the Dispatcher from the networking threads, be as fast as possible
413  virtual void onPrepareTasks(MClientLib::MJob* job, std::vector<MTemplateEngine::MTemplateTask*>* tasks);
414  virtual void onPauseJob(MClientLib::MJob* job);
415  virtual void onUserPauseJob(MClientLib::MJob* job, MClientLib::MUser* user);
416  virtual void onResumeJob(MClientLib::MJob* job);
417  virtual void onUserResumeJob(MClientLib::MJob* job, MClientLib::MUser* user);
418  virtual void onDeleteJob(MClientLib::MJob* job);
419  virtual void onUserDeleteJob(MClientLib::MJob* job, MClientLib::MUser* user);
420  virtual void onSubmitJob(MClientLib::MJob* job);
421  virtual void onUserSubmitJob(MClientLib::MJob* job, MClientLib::MUser* user);
422  virtual void onReinitJob(MClientLib::MJob* job);
423  virtual void onUserReinitJob(MClientLib::MJob* job, MClientLib::MUser* user);
424  virtual void onEditJob(MClientLib::MJob* job);
425  virtual void onUserEditJob(MClientLib::MJob* job, MClientLib::MUser* user);
426  virtual void onJobPropertiesChanged(MClientLib::MJob* job);
427  virtual void onUserJobPropertiesChanged(MClientLib::MJob* job, MClientLib::MUser* user);
428  virtual void onJobCompleted(MClientLib::MJob* job);
429  virtual MTemplateEngine::kTemplateFunctionBehaviour onValidateJobDependancies(MClientLib::MJob* job);
430  virtual MTemplateEngine::kTemplateFunctionBehaviour onValidateChunkDependancies(MClientLib::MChunk* chunk);
431  virtual void onClientConnected(MClientLib::MNode* node);
432  virtual void onClientDisconnected(MClientLib::MNode* node);
433  virtual void onClientDisconnectedByHeartbeath(MClientLib::MNode* node);
434  virtual void onClientStatusChanged(MClientLib::MNode* node);
435 
436  // Fired from the Dispatcher on a different thread, take your time
437  virtual MTemplateEngine::MTemplateError onJobStart(MClientLib::MJob* job);
438  virtual MTemplateEngine::MTemplateError onJobEnd(MClientLib::MJob* job);
439  virtual void onDispatcherIdling();
440 
441  // Fired from the Dispatcher into the selection logic, be as fast as possible, available 8.5.4+
442  virtual MTemplateEngine::MTemplateError onChunkSubmitted(MClientLib::MJob* job, MClientLib::MChunk* chunk,int instanceId);
443  virtual MTemplateEngine::MTemplateError onChunkCompleted(MClientLib::MJob* job, MClientLib::MChunk* chunk, int instanceId);
444  virtual MTemplateEngine::MTemplateError onChunkRequeued(MClientLib::MJob* job, MClientLib::MChunk* chunk);
445 
446  // Fired from the client on a different thread, take your time
447  virtual void onClientIdling();
448  virtual MTemplateEngine::kTemplateFunctionBehaviour onCheckClientAvailability();
449 
450  // Fired from the client for alarm states
451  virtual bool onAlarmCheckForCustomEvent(int instanceNum, MClientLib::MAlarm* alarm);
452  virtual MTemplateEngine::kTemplateFunctionBehaviour onAlarmEnterState(int instanceNum, MClientLib::MAlarm* alarm);
453  virtual MTemplateEngine::kTemplateFunctionBehaviour onAlarmTriggered(int instanceNum, MClientLib::MAlarm* alarm);
454  virtual MTemplateEngine::kTemplateFunctionBehaviour onAlarmExpired(int instanceNum, MClientLib::MAlarm* alarm);
455 
456  // Fired from the Dispatcher for alarm states
457  virtual MTemplateEngine::kTemplateFunctionBehaviour onDispatcherAlarmTriggered(int instanceId, MClientLib::MAlarm* alarm);
458  virtual MTemplateEngine::kTemplateFunctionBehaviour onDispatcherAlarmExpired(int instanceId, MClientLib::MAlarm* alarm);
459 
460 
461  // Fired from the client on a shared thread, take your time but this will prevent network flow in multiple instances
462  virtual MTemplateEngine::MTemplateError onChunkStart(MClientLib::MJob* job, MClientLib::MChunk* chunk, std::map<std::string,std::string>& clientTemplatePreferences,int instanceId);
463  virtual MTemplateEngine::MTemplateError onChunkEnd(MClientLib::MJob* job, MClientLib::MChunk* chunk,std::map<std::string,std::string>& clientTemplatePreferences, int instanceId);
464 
465  virtual std::string onGetSlicesInputFilename(MClientLib::MJob* job, MClientLib::MChunk* chunk);
466  virtual std::string onGetSlicesOutputFilename(MClientLib::MJob* job, MClientLib::MChunk* chunk);
467  virtual void onGetSliceBoundaries(MClientLib::MJob* job,MClientLib::MChunk* chunk, MTemplateEngine::MTemplateSliceBoundaries* boundaries );
468 
469  virtual std::string onBuildReservCommandLine(int platform, std::map<std::string, std::string>& clientTemplatePreferences, int instanceNum);
470  virtual MTemplateEngine::MTemplateError onGetReservApplicationPath(std::map<std::string, std::string>& clientTemplatePreferences, MClientLib::MStringRef& pathOut);
471  virtual MTemplateEngine::MTemplateError onGetReservApplicationStartingFolder(std::map<std::string, std::string>& clientTemplatePreferences, MClientLib::MStringRef& pathOut);
472  virtual MClientLib::MEnvironment onBuildReservEnvironment(std::map<std::string, std::string>& clientTemplatePreferences, MClientLib::MEnvironment& existingEnvironment);
473 
474  void encodeTree(void* pt,std::string (*encodeFunc)(const std::string &),int encoding,void* fields,std::vector<std::string>* filters);
475  bool compareWebFilters(std::vector<std::string>* filters);
476  bool checkWebFilter(const std::string& field, const std::string& value) ;
477 
478  private:
479  int retainsCount;
480  void* pyObject;
481  void* _mutex;
482  bool pythonTemplate;
483 
484  std::vector<std::string> versions;
485  std::map<std::string, std::map<std::string, std::string> > environments;
486  std::map<std::string, std::map<std::string, std::string> > macros;
487  std::map<std::string, std::vector<MClientLib::MTextFileRule> > rules;
488  std::vector< MTemplatePopUpHandler > popUpHandlers;
489  std::vector< std::string > popUpButtonClasses;
490  std::vector< std::string > appsKiller;
491 
492  std::vector<MTemplateEngine::MTemplateTask*> tasks;
493 
494  std::string filename;
495  std::string templateContent,macroContent,versionsContent,parserContent,environmentsContent;
496  std::string md5hash;
497  std::string name;
498  std::string description;
499  std::string iconFilename;
500  bool reserv;
501  int uid;
502  int templateLogic;
503  int templateTasksMask;
504  int templateEncoding;
505  int defaultPriority;
506  std::string defaultPools;
507  std::string defaultExcludedPools;
508  int maximumLicenses;
509  std::string licensesGroup;
510  std::vector<std::string> jobLicensesTags;
511  std::vector<int> jobLicensesLimits;
512  std::vector<std::string> jobLicensesFields;
513  int delay;
514  std::string delayGroup;
515  bool enableAdditionalFlagsField;
516  bool enableChunksTimeoutOverride;
517  bool overrideMaximumChunksRequeue;
518  int overrideMaximumChunksRequeueValue;
519  int chunksTimeout;
520  bool trimLogs;
521  int musterInstanceEnvironmentMode;
522  int musterInstanceActionsEnvironmentMode;
523  int musterDispatcherActionsEnvironmentMode;
524 
525  bool enableLogWarningsOverrides;
526  bool enableLogErrorsOverrides;
527  bool enableExitCodeWarningsOverrides;
528  bool enableExitCodeErrorsOverrides;
529  bool enableProcessFailureErrorsOverrides;
530 
531  bool enablePreChunkActionsOverrides;
532  bool enablePostChunkActionsOverrides;
533  bool enablePreJobActionsOverrides;
534  bool enablePostJobActionsOverrides;
535 
536  std::map<std::string,std::string> mappings;
537  std::map<std::string,std::string> reverseMappings;
538 
539  std::vector<MTemplateItem*> submissionItems;
540  std::vector<MTemplateItemHolder*> submissionAdditionalItems;
541 
542  void calculateLogicsMask();
543 
544  bool handlePopUps;
545  bool handleWin10PopUps;
546  bool handleQtPopUps;
547  bool handleHeadlessApp;
548  int popUpsMaxChildsWindows;
549  };
550 
552 };
553 
554 #endif
kTemplatesEncoding
Templates text encoding enumeration.
Definition: MTemplate.h:147
Class that instantiate template image slicing specific settings.
Class holding a template fields.
Class holding a set of properties of a MJob.
Definition: MProperties.h:65
Class holding a template field item.
Definition: MTemplateItem.h:60
Class holding the unique templates manager class singleton.
Definition: MManager.h:185
lass holding a chunk data
Definition: MTextFileRule.h:62
Class holding an entry for a user.
Definition: MUser.h:63
Class that instantiate a template actions override setting.
Class that instantiate a template specific platform settings.
Class holding a string used across the API.
Definition: MStringRef.h:60
Class holding a chunk data.
Definition: MChunk.h:64
Class that instantiate template multiframe specific settings.
Class that instantiate template image slicing boundaries.
kTemplateMusterEnvironmentHandling
Muster custom environment handling.
Definition: MTemplate.h:158
Class holding a template API error object.
Class that instantiate a template error override settings.
Class holding a job data structure.
Definition: MJob.h:130
Class holding an instance entry.
Definition: MNode.h:81
kTemplateFunctionBehaviour
Functions results enumeration.
Definition: MTemplate.h:99
Class holding an alarm data.
Definition: MAlarm.h:59