You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ORPA-pyOpenRPA/Sources/pyOpenRPA/Orchestrator/RobotRDPActive/Recovery.py

60 lines
2.8 KiB

import time
def RetryMark(inRDPSessionKeyStr, inGSettings):
"""
Set mark that Orch will try to reconnect to RDP
:param inRDPSessionKeyStr: RDP Session key string - to monitor retry count by the RDP Session key
:param inGSettings: Orchestrator global settings dict (singleton)
:return: None
"""
lL = inGSettings.get("Logger", None) # Get the logger instance
# Create List by the RDP Session key if not exists
if inRDPSessionKeyStr not in inGSettings["RobotRDPActive"]["RecoveryDict"]["__StatisticsDict__"]:
inGSettings["RobotRDPActive"]["RecoveryDict"]["__StatisticsDict__"][inRDPSessionKeyStr] = []
inGSettings["RobotRDPActive"]["RecoveryDict"]["__StatisticsDict__"][inRDPSessionKeyStr].append(time.time())
def RetryIsTriggered(inRDPSessionKeyStr, inGSettings):
"""
Check if you can need to init recovery mode for the RDP
:param inRDPSessionKeyStr: RDP Session key string - to monitor retry count by the RDP Session key
:param inGSettings: Orchestrator global settings dict (singleton)
:return: True - Ready to start recovery mode - remotely restart PC; Falsew - else case
"""
lTimeNowFloat = time.time()
lResultBool = False
if inRDPSessionKeyStr in inGSettings["RobotRDPActive"]["RecoveryDict"]["__StatisticsDict__"]:
lTimeNewList = []
lCatchCounterInt = 0
for inTimeItemFloat in inGSettings["RobotRDPActive"]["RecoveryDict"]["__StatisticsDict__"][inRDPSessionKeyStr]:
lTimeDeltaFloat = lTimeNowFloat - inTimeItemFloat
# Remove item if very old
if lTimeDeltaFloat < inGSettings["RobotRDPActive"]["RecoveryDict"]["CatchPeriodSecFloat"]:
lTimeNewList.append(inTimeItemFloat)
lCatchCounterInt = lCatchCounterInt+1
# Set updated list
inGSettings["RobotRDPActive"]["RecoveryDict"]["__StatisticsDict__"][inRDPSessionKeyStr] = lTimeNewList
# Check if counter equal or more
if lCatchCounterInt>= inGSettings["RobotRDPActive"]["RecoveryDict"]["TriggerCountInt"]:
lResultBool = True
return lResultBool
def RetryHostClear(inHostStr, inGSettings):
"""
Clear retry stat by the host str
:param inHostStr: PC host str to be cleared (search the RDPSession keys)
:param inGSettings: Orchestrator global settings dict (singleton)
:return:
"""
for lRDPSessionKeyStr in inGSettings["RobotRDPActive"]["RDPList"]:
lRDPDict = inGSettings["RobotRDPActive"]["RDPList"][lRDPSessionKeyStr]
# Check if HOST in UPPER is equal
if lRDPDict["Host"].upper() == inHostStr.upper():
#Check if RDPSession key exist in stat
if lRDPSessionKeyStr in inGSettings["RobotRDPActive"]["RecoveryDict"]["__StatisticsDict__"]:
del inGSettings["RobotRDPActive"]["RecoveryDict"]["__StatisticsDict__"][lRDPSessionKeyStr]