#RobotDaemonPrototype

dev-linux
Ivan Maslov 6 years ago
parent 47ffb571a7
commit bea1a402ef

@ -0,0 +1,2 @@
1. Настроить конфигурацию запуска/остановки robotDaemonConfiguration.json
2. Запустить исполняемый файл демона runProcessOpenRPARobotDaemon_x32.cmd

@ -5,6 +5,7 @@ import time
import codecs import codecs
import os import os
import signal import signal
import pdb
#Чтение конфигурации #Чтение конфигурации
lDaemonConfigurationFile = codecs.open("robotDaemonConfiguration.json", "r","utf_8_sig") lDaemonConfigurationFile = codecs.open("robotDaemonConfiguration.json", "r","utf_8_sig")
@ -16,10 +17,11 @@ lDaemonConfigurationObject=json.loads(lDaemonConfigurationJSONString)
#Инициализация настроечных параметров #Инициализация настроечных параметров
lDaemonLoopSeconds=lDaemonConfigurationObject["loopSeconds"] lDaemonLoopSeconds=lDaemonConfigurationObject["loopSeconds"]
lDaemonProcessCodeProcessDict={} lDaemonActivityLogDict={} #Словарь отработанных активностей, ключ - кортеж (<activityType>, <datetime>, <processPath || processName>, <processArgs>)
lCurrentDateTime=datetime.datetime.now() lDaemonStartDateTime=datetime.datetime.now()
#Вечный цикл #Вечный цикл
while True: while True:
lCurrentDateTime=datetime.datetime.now()
#Циклический обход правил #Циклический обход правил
lFlagSearchActivityType=True lFlagSearchActivityType=True
for lItem in lDaemonConfigurationObject["activityList"]: for lItem in lDaemonConfigurationObject["activityList"]:
@ -30,30 +32,35 @@ while True:
#Сформировать временной штамп, относительно которого надо будет проверять время #Сформировать временной штамп, относительно которого надо будет проверять время
#часовой пояс пока не учитываем #часовой пояс пока не учитываем
lActivityDateTime=datetime.datetime.strptime(lItem["time"],"%H:%M") lActivityDateTime=datetime.datetime.strptime(lItem["time"],"%H:%M")
lActivityDateTime.replace(year=lCurrentDateTime.year,month=lCurrentDateTime.month,day=lCurrentDateTime.day) lActivityDateTime=lActivityDateTime.replace(year=lCurrentDateTime.year,month=lCurrentDateTime.month,day=lCurrentDateTime.day)
#Убедиться в том, что время наступило #Убедиться в том, что время наступило
if lCurrentDateTime>=lActivityDateTime and lItem["processCode"] not in lDaemonProcessCodeProcessDict: if (
lActivityDateTime>=lDaemonStartDateTime and
lCurrentDateTime>=lActivityDateTime and
(lItem["activityType"],lActivityDateTime,lItem["processPath"],lItem["processArgs"]) not in lDaemonActivityLogDict):
#Выполнить операцию #Выполнить операцию
print("ProcessStart:"+lItem["processPath"]) print("ProcessStart:"+lItem["processPath"])
lFlagSearchActivityType=False #Запись в массив отработанных активностей
lDaemonProcessCodeProcessDict[lItem["processCode"]]=subprocess.Popen([lItem["processPath"],lItem["processArgs"]],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) lDaemonActivityLogDict[(lItem["activityType"],lActivityDateTime,lItem["processPath"],lItem["processArgs"])]={"ActivityStartDateTime":lCurrentDateTime}
#Запустить процесс
subprocess.Popen([lItem["processPath"],lItem["processArgs"]],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
#Определить вид активности #Определить вид активности
if lItem["activityType"]=="processEnd": if lItem["activityType"]=="processStop":
#Вид активности - остановка процесса #Вид активности - остановка процесса
#Сформировать временной штамп, относительно которого надо будет проверять время #Сформировать временной штамп, относительно которого надо будет проверять время
#часовой пояс пока не учитываем #часовой пояс пока не учитываем
lActivityDateTime=datetime.datetime.strptime(lItem["time"],"%H:%M") lActivityDateTime=datetime.datetime.strptime(lItem["time"],"%H:%M")
lActivityDateTime.replace(year=lCurrentDateTime.year,month=lCurrentDateTime.month,day=lCurrentDateTime.day) lActivityDateTime=lActivityDateTime.replace(year=lCurrentDateTime.year,month=lCurrentDateTime.month,day=lCurrentDateTime.day)
#Убедиться в том, что время наступило #Убедиться в том, что время наступило
if lCurrentDateTime>=lActivityDateTime and lItem["processCode"] in lDaemonProcessCodeProcessDict: if (
print() lActivityDateTime>=lDaemonStartDateTime and
#Выполнить операцию lCurrentDateTime>=lActivityDateTime and
lProcess=lDaemonProcessCodeProcessDict[lItem["processCode"]] (lItem["activityType"],lActivityDateTime,lItem["processName"]) not in lDaemonActivityLogDict):
lProcess.kill() #Запись в массив отработанных активностей
#os.kill(lProcess.pid, signal.SIGTERM) # Send the signal to all the process groups lDaemonActivityLogDict[(lItem["activityType"],lActivityDateTime,lItem["processName"])]={"ActivityStartDateTime":lCurrentDateTime}
lFlagSearchActivityType=False #Завершить процесс
#Очистить словарь os.system('taskkill /f /im '+lItem["processName"])
del lDaemonProcessCodeProcessDict[lItem["processCode"]] print("ProcessStop "+lItem["processName"])
#Уснуть до следующего прогона #Уснуть до следующего прогона
time.sleep(lDaemonLoopSeconds) time.sleep(lDaemonLoopSeconds)

@ -1,29 +0,0 @@
{ "__loopSeconds":"Количество секунд, между циклами проверки действий",
"loopSeconds":5,
"activityList":[
{
"description":"Запуск Python консоли",
"__processCode":"Код процесса в openRPA daemon. Данные код может использоваться в дальнейшем для того, чтобы завершить именно тот процесс, который пораждался этой программой",
"processCode":"PythonDebug",
"__activityType":"processStart/processEnd",
"activityType":"processStart",
"__time":"__Время запуска активности",
"time":"09:25",
"__timeZone":"Часовой пояс, в рамках которого указано время. По-умолчанию часовой пояс МСК (GMT+4). Формат UTC offset in the form ±HHMM[SS[.ffffff]] ",
"timeZone":"+0400",
"__processPath":"Полный путь/наименование процесса. Запуск производится через subprocess. Идентификатор процесса в дальнейшем сохраняется и его можно будет закрыть с помощью параметра processCode",
"___processPath":"C:\\Abs\\Archive\\scopeSrcUL\\OpenRPA\\OpenRPA_32.cmd",
"processPath":"C:\\Abs\\Archive\\scopeSrcUL\\OpenRPA\\WPy32-3720\\IDLE (Python GUI).exe",
"__processArgs":"Аргументы, передаваемые при запуске процесса",
"processArgs":""
},
{
"description":"Остановка Python консоли",
"activityType":"processEnd",
"time":"18:26",
"timeZone":"4",
"processCode":"PythonDebug"
}
]
}

@ -5,24 +5,36 @@
"description":"Запуск Python консоли", "description":"Запуск Python консоли",
"__processCode":"Код процесса в openRPA daemon. Данные код может использоваться в дальнейшем для того, чтобы завершить именно тот процесс, который пораждался этой программой", "__processCode":"Код процесса в openRPA daemon. Данные код может использоваться в дальнейшем для того, чтобы завершить именно тот процесс, который пораждался этой программой",
"processCode":"PythonDebug", "processCode":"PythonDebug",
"__activityType":"processStart/processEnd", "__activityType":"processStart/processStop",
"activityType":"processStart", "activityType":"processStart",
"__time":"__Время запуска активности", "__time":"__Время запуска активности",
"time":"09:25", "time":"09:18",
"__timeZone":"Часовой пояс, в рамках которого указано время. По-умолчанию часовой пояс МСК (GMT+4). Формат UTC offset in the form ±HHMM[SS[.ffffff]] ", "__timeZone":"Часовой пояс, в рамках которого указано время. По-умолчанию часовой пояс МСК (GMT+4). Формат UTC offset in the form ±HHMM[SS[.ffffff]] ",
"timeZone":"+0400", "timeZone":"+0400",
"__processPath":"Полный путь/наименование процесса. Запуск производится через subprocess. Идентификатор процесса в дальнейшем сохраняется и его можно будет закрыть с помощью параметра processCode", "__processPath":"Полный путь/наименование процесса. Запуск производится через subprocess. Идентификатор процесса в дальнейшем сохраняется и его можно будет закрыть с помощью параметра processCode",
"____processPath":"C:\\Abs\\Archive\\scopeSrcUL\\OpenRPA\\OpenRPA_32.cmd", "____processPath":"C:\\Abs\\Archive\\scopeSrcUL\\OpenRPA\\OpenRPA_32.cmd",
"processPath":"C:\\Abs\\Archive\\scopeSrcUL\\OpenRPA\\WPy32-3720\\IDLE (Python GUI).exe", "processPath":"C:\\Abs\\Archive\\scopeSrcUL\\OpenRPA\\Orchestrator\\RobotDaemon\\runProcessOpenRPARobotDaemon_x32.cmd",
"__processArgs":"Аргументы, передаваемые при запуске процесса", "__processArgs":"Аргументы, передаваемые при запуске процесса",
"processArgs":"" "processArgs":""
}, },
{
"description":"Запуск Python консоли",
"__activityType":"processStart/processStop",
"activityType":"processStart",
"__time":"__Время запуска активности",
"time":"09:19",
"__timeZone":"Часовой пояс, в рамках которого указано время. По-умолчанию часовой пояс МСК (GMT+4). Формат UTC offset in the form ±HHMM[SS[.ffffff]] ",
"timeZone":"+0400",
"__processPath":"Полный путь/наименование процесса. Запуск производится через subprocess. Идентификатор процесса в дальнейшем сохраняется и его можно будет закрыть с помощью параметра processCode",
"processPath":"notepad",
"processArgs":""
},
{ {
"description":"Остановка Python консоли", "description":"Остановка Python консоли",
"activityType":"processEnd", "activityType":"processStop",
"time":"22:22", "time":"9:20",
"timeZone":"4", "timeZone":"4",
"processCode":"PythonDebug" "processName":"OpenRPARobotDaemon.exe"
} }
] ]

@ -0,0 +1,3 @@
cd %~dp0
copy /Y ..\..\WPy32-3720\python-3.7.2\python.exe ..\..\WPy32-3720\python-3.7.2\OpenRPARobotDaemon.exe
.\..\..\WPy32-3720\python-3.7.2\OpenRPARobotDaemon.exe robotDaemon.py
Loading…
Cancel
Save