import psutil
import datetime
import logging
import os
#DEFINITIONS
lProcessName = " OpenRPA_RobotScreenActive.exe "
lStartFilePath = os . path . join ( os . getcwd ( ) , " .. \\ Utils \\ 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 } ' ); "
#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 " : [
] ,
" 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