|
|
import psutil
|
|
|
import datetime
|
|
|
import logging
|
|
|
import os
|
|
|
#DEFINITIONS
|
|
|
lProcessName = "OpenRPA_RobotScreenActive.exe"
|
|
|
lStartFilePath = os.path.join(os.getcwd(), "RobotScreenActive\\pyOpenRPA.Tools.RobotScreenActive_x64.cmd")
|
|
|
def RenderRobotScreenActive(inGlobalConfiguration):
|
|
|
#Subheader Variants
|
|
|
lSubheaderRunTrueText="State: <span style=\"color:green\">Turned on</span>"
|
|
|
lSubheaderRunFalseText="State: <span style=\"color:red\">Turned off</span>"
|
|
|
#Run button
|
|
|
#Такое большое количество слэшей связано с тем, что этот текст отправляется сначала в браузер, рендерится там, а потом отправляется на процессор оркестратора
|
|
|
import os
|
|
|
lRobotScreenActivePath = lStartFilePath
|
|
|
lOnClickRunButton=f"mGlobal.Controller.CMDRunText('start cmd /K {lRobotScreenActivePath}');"
|
|
|
# Activity update orchestrator
|
|
|
lActivityOrchestratorBuildPath = os.getcwd()
|
|
|
lActivityOrchestratorBuildPathEscaped = lActivityOrchestratorBuildPath.replace("\\","\\\\")
|
|
|
lActivityOrchestratorUpdateStr = f"mGlobal.Controller.CMDRunText(\"taskkill /f /im OpenRPA_Orchestrator.exe & timeout 2 & cd {lActivityOrchestratorBuildPathEscaped} & git reset --hard & git pull origin master & pyOpenRPA.Orchestrator_x64_administrator_startup.cmd\");".replace("\"",""")
|
|
|
lActivityOrchestratorUpdateHTMLStr=f'<a onclick=\"{lActivityOrchestratorUpdateStr}\" style=\"color:orange\">Обновить orchestrator из GIT и перезапустить</a>'
|
|
|
#Force close button
|
|
|
lOnClickForceCloseButton=f"mGlobal.Controller.CMDRunText('taskkill /F /im {lProcessName}');"
|
|
|
#Result template
|
|
|
lResultDict={
|
|
|
"HeaderLeftText":"Keep active screen session",
|
|
|
"HeaderRightText":"Tech",
|
|
|
"DataStorageKey":"RobotScreenActive", #Use key for set current dict in mGlobal.DataStorage["DtaaStorageKey"] on client side
|
|
|
"SubheaderText":lSubheaderRunFalseText,
|
|
|
"BodyKeyValueList":[
|
|
|
{"Key":"Репозиторий","Value":lActivityOrchestratorUpdateHTMLStr}
|
|
|
],
|
|
|
"FooterText":"Last update: 9:38:00 09.10.2019",
|
|
|
"FooterButtonX2List":[
|
|
|
{"Text":"Turn on", "Color":"green", "Link":"", "OnClick": lOnClickRunButton.replace("\\","\\\\")}
|
|
|
],
|
|
|
"FooterButtonX1List":[
|
|
|
{"Text":"Kill", "Color":"red", "Link":"", "OnClick": lOnClickForceCloseButton.replace("\\","\\\\")}
|
|
|
]
|
|
|
}
|
|
|
#Check if process running
|
|
|
if CheckIfProcessRunning("OpenRPA_RobotScreenActive"):
|
|
|
lResultDict["SubheaderText"]=lSubheaderRunTrueText
|
|
|
#Process not running
|
|
|
lResultDict["FooterText"]=f'Last update: {datetime.datetime.now().strftime("%H:%M:%S %d.%m.%Y")}'
|
|
|
return lResultDict
|
|
|
|
|
|
def CheckIfProcessRunning(processName):
|
|
|
'''
|
|
|
Check if there is any running process that contains the given name processName.
|
|
|
'''
|
|
|
#Iterate over the all the running process
|
|
|
for proc in psutil.process_iter():
|
|
|
try:
|
|
|
# Check if process name contains the given name string.
|
|
|
if processName.lower() in proc.name().lower():
|
|
|
return True
|
|
|
except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):
|
|
|
pass
|
|
|
return False;
|
|
|
|
|
|
#Orchestrator settings
|
|
|
def SettingsUpdate(inDict):
|
|
|
#Add RobotRDPActive in control panel
|
|
|
inDict["ControlPanelDict"]["RobotList"].append({"RenderFunction": RenderRobotScreenActive,"KeyStr":"RobotScreenActive"})
|
|
|
return inDict |