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.
60 lines
2.8 KiB
60 lines
2.8 KiB
4 years ago
|
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]
|