Orchestrator.OrchestratorLoggerGet().info(f"Managers.Git ({self.mAbsPathStr}): self.BranchRevLastGet, new rev (branch: {inBranchLocalStr}) has been detected - merge (branch: {inBranchRemoteStr})")
Orchestrator.OrchestratorLoggerGet().info(f"Модуль Managers.Git ({self.mAbsPathStr}): функуция self.BranchRevLastGet, новая ревизия (ветка: {inBranchLocalStr}) была удалена - выполнить слияние (ветка на сервере: {inBranchRemoteStr})")
lStr=f"Managers.Process ({self.mAgentHostNameStr}, {self.mAgentUserNameStr}, {self.mProcessNameWOExeStr}): Process will not start because of stopped manual or stop safe is now."
lStr=f"Модуль Managers.Process ({self.mAgentHostNameStr}, {self.mAgentUserNameStr}, {self.mProcessNameWOExeStr}): Процесс не будет запущен, так как инициализирован триггер ручной остановки или активен режим безопасного отключения"
lL.info(f"Managers.Process ({self.mAgentHostNameStr}, {self.mAgentUserNameStr}, {self.mProcessNameWOExeStr}): Safe stop has been wait for {inStopSafeTimeoutSecFloat} sec. Now do the force stop.")
lL.info(f"Модуль Managers.Process ({self.mAgentHostNameStr}, {self.mAgentUserNameStr}, {self.mProcessNameWOExeStr}): Алгоритм безопасной остановки ожидал завершение процесса в течение {inStopSafeTimeoutSecFloat} сек. Выполнить принудительную остановку")
# self.StatusChangeLog() status check has already log status (see above)
# self.StatusChangeLog() status check has already log status (see above)
@ -390,7 +390,7 @@ class Process():
"""
"""
# Log info about process
# Log info about process
lL=__Orchestrator__.OrchestratorLoggerGet()
lL=__Orchestrator__.OrchestratorLoggerGet()
lL.info(f"Managers.Process ({self.mAgentHostNameStr}, {self.mAgentUserNameStr}, {self.mProcessNameWOExeStr}): Status has been changed to{self.mStatusStr})")
lL.info(f"Модуль Managers.Process ({self.mAgentHostNameStr}, {self.mAgentUserNameStr}, {self.mProcessNameWOExeStr}): Состояние процесса изменилось на{self.mStatusStr})")
forlActivityItemininActivityList:# Iterate throught the activity list
forlActivityItemininActivityList:# Iterate throught the activity list
iflL:lL.info(f'pyOpenRPA Processor.ActivityListExecute:: Def:{str(lActivityItem["Def"])}. Parameters are not available to see.')
iflL:lL.info(f'Процессор:: Исполнение функции def:{str(lActivityItem["Def"])}. В целях информационной безопасности параметры недоступны для просмотра')
lDef=None# Def variable
lDef=None# Def variable
ifcallable(lActivityItem["Def"]):# CHeck if def is callable
ifcallable(lActivityItem["Def"]):# CHeck if def is callable
lRDPConfigurationDict["SessionIsWindowExistBool"]=True# Flag that session is started
lRDPConfigurationDict["SessionIsWindowExistBool"]=True# Flag that session is started
iflL:lL.info(f"Host: {lRDPConfigurationDict['Host']}, Login: {lRDPConfigurationDict['Login']}, SessionHex: {str(lRDPConfigurationDict['SessionHex'])}:: Session has been initialized!")#Logging
iflL:lL.info(f"Хост: {lRDPConfigurationDict['Host']}, Логин: {lRDPConfigurationDict['Login']}, Идентификатор сессии: {str(lRDPConfigurationDict['SessionHex'])}:: Сессия была инициализирована!")#Logging
lRDPConfigurationDict["SessionIsWindowExistBool"]=False# Set flag that session is disconnected
lRDPConfigurationDict["SessionIsWindowExistBool"]=False# Set flag that session is disconnected
iflL:lL.warning(f"Host: {lRDPConfigurationDict['Host']}, Login: {lRDPConfigurationDict['Login']}, SessionHex: {str(lRDPConfigurationDict['SessionHex'])}:: Session is not exist! Mark the retry")#Logging
iflL:lL.warning(f"!ATTENTION! Host: {lRDPConfigurationDict['Host']}, Login: {lRDPConfigurationDict['Login']}; RDP is not responsible for many times - run recovery mode")
iflL:lL.warning(f"!ВНИМАНИЕ! Хост: {lRDPConfigurationDict['Host']}, Логин: {lRDPConfigurationDict['Login']}; сессия РДП недоступна при попытках подключения - инициализация режима восстановления")
Recovery.RetryHostClear(inHostStr=lRDPConfigurationDict['Host'],inGSettings=inGSettings)# Clear the stat about current host
Recovery.RetryHostClear(inHostStr=lRDPConfigurationDict['Host'],inGSettings=inGSettings)# Clear the stat about current host
iflL:lL.exception(f"RDP::main: Exception when run def in processor.py - activity will be ignored. Activity item: {lActivityItem}")#Logging
iflL:lL.exception(f"РДП: Ошибка при обработке активности в процессоре РДП сессии - активность будет проигнорирована. Активность: {lActivityItem}")#Logging
lActivityItemResult=True# True - clear from repeat list
lActivityItemResult=True# True - clear from repeat list
@ -595,7 +595,7 @@ class testHTTPServer_RequestHandler(BaseHTTPRequestHandler):
lActivityTypeListStr+=f"{lInputObject['Type']}"
lActivityTypeListStr+=f"{lInputObject['Type']}"
exceptExceptionase:
exceptExceptionase:
lActivityTypeListStr="Has some error with Activity Type read"
lActivityTypeListStr="Has some error with Activity Type read"
iflL:lL.info(f"Server:: !ATTENTION! /Utils/Processor will be deprecated in future. Use /pyOpenRPA/Processor or /pyOpenRPA/ActivityListExecute. User activity from web. Domain: {self.OpenRPA['Domain']}, Username: {self.OpenRPA['User']}, ActivityType: {lActivityTypeListStr}")
iflL:lL.info(f"Сервер:: !ВНИМАНИЕ! /Utils/Processor через некоторое время перестанет поддерживаться. Используйте /pyOpenRPA/Processor или /pyOpenRPA/ActivityListExecute. Активность поступила от пользователя. Домен: {self.OpenRPA['Domain']}, Логин: {self.OpenRPA['User']}, Тип активности: {lActivityTypeListStr}")
iflL:lL.info(f"Сервер инициализирован успешно (с поддержкой SSL):: Наименование: {self.name}, Слушает URL: {lAddressStr}, Слушает порт: {lPortInt}, Путь к файлу сертификата (.pem): {lCertFilePathStr}")
iflL:lL.debug(f"SERVER: pyOpenRPA_Agent_A2O:: Has recieved result of the activity items from agent! ActivityItem GUID Str: {lActivityReturnItemKeyStr}; Return value len: {lLogStr}")
iflL:lL.debug(f"СЕРВЕР: Функция pyOpenRPA_Agent_A2O:: Получена активность от агента! Идентификатор активности: {lActivityReturnItemKeyStr}; Длина переданной активности: {lLogStr}")
iflL:lL.debug(f"SERVER: pyOpenRPA_Agent_A2O:: Source activity item request was deleted from the orchestrator. ActivityItem GUID Str: {lActivityReturnItemKeyStr}")
iflL:lL.debug(f"СЕРВЕР: Функция pyOpenRPA_Agent_A2O:: Активность была удалена из процессорной очереди. Идентификатор активности: {lActivityReturnItemKeyStr}")
iflL:lL.info(f"O2A: Start to send binary file via chunks. Chunk count: {lChunkCountInt}, From (Orch side): {inOrchestratorFilePathStr}, To (Agent side): {inAgentFilePathStr}")
iflL:lL.info(f"О2А: Старт передачи крупного бинарного файла по частям. Общее количество частей: {lChunkCountInt}, от (сторона оркестратора): {inOrchestratorFilePathStr}, на (сторона агента): {inAgentFilePathStr}")
f"Orchestrator has dump the GSettings (new dump mode from v1.2.7) before the restart.")
f"Оркестратор сохранил в рабочую директорию список РДП соединений и словарь DataStorage. При следующем запуске оркестратора информация востановится с диска")
exceptExceptionase:
exceptExceptionase:
iflL:lL.exception(f"Exception when dump data before restart the Orchestrator")
iflL:lL.exception(f"Произошла ошибка при сохранении данных в файл")
f"Scheduler:: Activity list is started in new thread. Parameters are not available to see.")# Logging
f"Модуль расписания (старая версия):: Активность была инициализирована в отдельном потоке. В целях информационной безопасности параметры недоступны для просмотра")# Logging
<td><p>Создать синоним (текстовый ключ) для инициации выполнения функции в том случае, если запрос на выполнения пришел из вне (передача функций невозможна).</p></td>
<td><p>Создать синоним (текстовый ключ) для инициации выполнения функции в том случае, если запрос на выполнения пришел из вне (передача функций невозможна).</p></td>
<td><p>Обновить синоним (текстовый ключ) для инициации выполнения функции в том случае, если запрос на выполнения пришел из вне (передача функций невозможна).</p></td>
<td><p>Обновить синоним (текстовый ключ) для инициации выполнения функции в том случае, если запрос на выполнения пришел из вне (передача функций невозможна).</p></td>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">OSRestart</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inForceBool</span><spanclass="o">=</span><spanclass="default_value">True</span></em>, <emclass="sig-param"><spanclass="n">inLogger</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#OSRestart"><spanclass="viewcode-link">[исходный код]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.OSRestart"title="Ссылка на это определение">¶</a></dt>
<dd><p>L+,W+: Отправить сигнал на перезагрузку операционной системы.</p>
<p>!ВНИМАНИЕ! Перезапуск будет принят, если учетная запись имеет полномочия на перезапуск на соответсвующей машине.</p>
<dlclass="field-list simple">
<dtclass="field-odd">Параметры</dt>
<ddclass="field-odd"><ulclass="simple">
<li><p><strong>inForceBool</strong>– True - принудительная перезагрузка; False - мягкая перезагрузка (дождаться окончания выполнения всех операций). По умолчанию True</p></li>
<li><p><strong>inLogger</strong>– Логгер, в который отправлять информацию о результате выполнения команды</p></li>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">Orchestrator</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span><spanclass="o">=</span><spanclass="default_value">None</span></em>, <emclass="sig-param"><spanclass="n">inDumpRestoreBool</span><spanclass="o">=</span><spanclass="default_value">True</span></em>, <emclass="sig-param"><spanclass="n">inRunAsAdministratorBool</span><spanclass="o">=</span><spanclass="default_value">True</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#Orchestrator"><spanclass="viewcode-link">[исходный код]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.Orchestrator"title="Ссылка на это определение">¶</a></dt>
<codeclass="sig-prename descclassname">pyOpenRPA.Orchestrator.__Orchestrator__.</code><codeclass="sig-name descname">Orchestrator</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">inGSettings</span><spanclass="o">=</span><spanclass="default_value">None</span></em>, <emclass="sig-param"><spanclass="n">inDumpRestoreBool</span><spanclass="o">=</span><spanclass="default_value">True</span></em>, <emclass="sig-param"><spanclass="n">inRunAsAdministratorBool</span><spanclass="o">=</span><spanclass="default_value">True</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/pyOpenRPA/Orchestrator/__Orchestrator__.html#Orchestrator"><spanclass="viewcode-link">[исходный код]</span></a><aclass="headerlink"href="#pyOpenRPA.Orchestrator.__Orchestrator__.Orchestrator"title="Ссылка на это определение">¶</a></dt>
<spanclass="n">lPyOpenRPASourceFolderPathStr</span><spanclass="o">=</span><spanclass="p">(</span><spanclass="sa">r</span><spanclass="s2">"../Sources"</span><spanclass="p">)</span><spanclass="c1"># Path for test pyOpenRPA package</span>
<spanclass="c1"># Operations</span>
<spanclass="k">if</span><spanclass="n">lPyOpenRPASourceFolderPathStr</span><spanclass="o">!=</span><spanclass="s2">""</span><spanclass="p">:</span><spanclass="n">sys</span><spanclass="o">.</span><spanclass="n">path</span><spanclass="o">.</span><spanclass="n">insert</span><spanclass="p">(</span><spanclass="mi">0</span><spanclass="p">,</span><spanclass="n">os</span><spanclass="o">.</span><spanclass="n">path</span><spanclass="o">.</span><spanclass="n">abspath</span><spanclass="p">(</span><spanclass="n">os</span><spanclass="o">.</span><spanclass="n">path</span><spanclass="o">.</span><spanclass="n">join</span><spanclass="p">(</span><spanclass="n">lPyOpenRPASourceFolderPathStr</span><spanclass="p">)))</span><spanclass="c1"># Path for test pyOpenRPA package</span>
<spanclass="c1"># Start import after config the pyOpenRPA folder</span>
<spanclass="nb">print</span><spanclass="p">(</span><spanclass="sa">f</span><spanclass="s2">"Orchestrator will be run as administrator!"</span><spanclass="p">)</span>
<spanclass="c1">#gSettings = SettingsTemplate.Create(inModeStr="BASIC") # Create GSettings with basic configuration - no more config is available from the box - you can create own</span>
<spanclass="kn">from</span><spanclass="nn">subprocess</span><spanclass="kn">import</span><spanclass="n">CREATE_NEW_CONSOLE</span><spanclass="c1"># Flag to create new process in another CMD</span>
<spanclass="k">if</span><spanclass="n">CrossOS</span><spanclass="o">.</span><spanclass="n">IS_WINDOWS_BOOL</span><spanclass="p">:</span><spanclass="kn">from</span><spanclass="nn">subprocess</span><spanclass="kn">import</span><spanclass="n">CREATE_NEW_CONSOLE</span><spanclass="c1"># Flag to create new process in another CMD</span>
<spanclass="n">lMessageStr</span><spanclass="o">=</span><spanclass="sa">f</span><spanclass="s2">"</span><spanclass="si">{</span><spanclass="n">lOSCMDKeyStr</span><spanclass="si">}</span><spanclass="s2">: # # # # AGENT CMD Process has been STARTED # # # # "</span>
<spanclass="n">lMessageStr</span><spanclass="o">=</span><spanclass="sa">f</span><spanclass="s2">"</span><spanclass="si">{</span><spanclass="n">lOSCMDKeyStr</span><spanclass="si">}</span><spanclass="s2">: # # # # AGENT CMD Process has been STARTED # # # # "</span>
<spanclass="sd">"""L+,W+: Отправить сигнал на перезагрузку операционной системы. </span>
<spanclass="sd"></span>
<spanclass="sd"> !ВНИМАНИЕ! Перезапуск будет принят, если учетная запись имеет полномочия на перезапуск на соответсвующей машине.</span>
<spanclass="sd"></span>
<spanclass="sd"> :param inForceBool: True - принудительная перезагрузка; False - мягкая перезагрузка (дождаться окончания выполнения всех операций). По умолчанию True</span>
<spanclass="sd"> :param inLogger: Логгер, в который отправлять информацию о результате выполнения команды</span>
<spanclass="sd"> :param inDriverExePathStr: Путь до компонента webdriver.exe, по умолчанию None (путь до webdriver.exe, который расположен в репозитории pyOpenRPA)</span>
<spanclass="sd"> :param inDriverExePathStr: Путь до компонента webdriver.exe, по умолчанию None (путь до webdriver.exe, который расположен в репозитории pyOpenRPA)</span>
<spanclass="sd"> :param inChromeExePathStr:Путь до компонента chrome.exe, по умолчанию None (путь до chrome.exe, который расположен в репозитории pyOpenRPA)</span>
<spanclass="sd"> :param inChromeExePathStr:Путь до компонента chrome.exe, по умолчанию None (путь до chrome.exe, который расположен в репозитории pyOpenRPA)</span>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">OrchestratorSessionSave() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorSessionSave">OrchestratorSessionSave() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorThreadStart">OrchestratorThreadStart() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OrchestratorThreadStart">OrchestratorThreadStart() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
</ul></td>
<tdstyle="width: 33%; vertical-align: top;"><ul>
<li><ahref="Agent/02_Defs.html#pyOpenRPA.Agent.__Agent__.OSCMD">OSCMD() (в модуле pyOpenRPA.Agent.__Agent__)</a>
<li><ahref="Agent/02_Defs.html#pyOpenRPA.Agent.__Agent__.OSCMD">OSCMD() (в модуле pyOpenRPA.Agent.__Agent__)</a>
<ul>
<ul>
@ -456,6 +475,8 @@
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSLogoff">OSLogoff() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSLogoff">OSLogoff() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
</li>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSRemotePCRestart">OSRemotePCRestart() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSRemotePCRestart">OSRemotePCRestart() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
</li>
<li><ahref="Orchestrator/02_Defs.html#pyOpenRPA.Orchestrator.__Orchestrator__.OSRestart">OSRestart() (в модуле pyOpenRPA.Orchestrator.__Orchestrator__)</a>
@ -24,52 +24,6 @@ if __name__ == "__main__": # New init way - allow run as module -m PyOpenRPA.Orc
Также вы можете выполнить более тонкую настройку параметров Оркестратора. Ниже пример такой настройки:
Также вы можете выполнить более тонкую настройку параметров Оркестратора. Ниже пример такой настройки:
```
import psutil, datetime, logging, os, sys
# Config settings
lPyOpenRPASourceFolderPathStr = (r"../Sources") # Path for test pyOpenRPA package
# Operations
if lPyOpenRPASourceFolderPathStr != "": sys.path.insert(0,os.path.abspath(os.path.join(lPyOpenRPASourceFolderPathStr))) # Path for test pyOpenRPA package
# Start import after config the pyOpenRPA folder
from pyOpenRPA.Orchestrator import SettingsTemplate # Import functionallity
from pyOpenRPA.Tools import CrossOS
from pyOpenRPA import Orchestrator # Import orchestrator main
#Run as administrator
if not Orchestrator.OrchestratorIsAdmin():
Orchestrator.OrchestratorRerunAsAdmin()
print(f"Orchestrator will be run as administrator!")
else:
gSettings = Orchestrator.GSettingsGet()
#gSettings = SettingsTemplate.Create(inModeStr="BASIC") # Create GSettings with basic configuration - no more config is available from the box - you can create own