From c45bf1cb4ad9b0803dcf19b7d7f5466f90057a27 Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Wed, 10 Apr 2019 22:42:15 +0300 Subject: [PATCH] #OrchestratorUpdate (Start&Close) #CmdRunFix --- OpenRPA_32.cmd | 1 + Orchestrator/RobotDaemon/robotDaemon.py | 47 ++++++++++++++----- .../robotDaemonConfiguration - Copy.json | 29 ++++++++++++ .../RobotDaemon/robotDaemonConfiguration.json | 6 +-- PythonDebug_32.cmd | 1 + 5 files changed, 69 insertions(+), 15 deletions(-) create mode 100644 Orchestrator/RobotDaemon/robotDaemonConfiguration - Copy.json diff --git a/OpenRPA_32.cmd b/OpenRPA_32.cmd index 55c27b41..f9e41e00 100644 --- a/OpenRPA_32.cmd +++ b/OpenRPA_32.cmd @@ -1 +1,2 @@ +cd %~dp0 .\WPy32-3720\python-3.7.2\python.exe daemon.py \ No newline at end of file diff --git a/Orchestrator/RobotDaemon/robotDaemon.py b/Orchestrator/RobotDaemon/robotDaemon.py index eea78514..88382661 100644 --- a/Orchestrator/RobotDaemon/robotDaemon.py +++ b/Orchestrator/RobotDaemon/robotDaemon.py @@ -3,6 +3,8 @@ import json import datetime import time import codecs +import os +import signal #Чтение конфигурации lDaemonConfigurationFile = codecs.open("robotDaemonConfiguration.json", "r","utf_8_sig") @@ -19,18 +21,39 @@ lCurrentDateTime=datetime.datetime.now() #Вечный цикл while True: #Циклический обход правил + lFlagSearchActivityType=True for lItem in lDaemonConfigurationObject["activityList"]: - #Определить вид активности - if lItem["activityType"]=="processStart": - #Вид активности - запуск процесса - #Сформировать временной штамп, относительно которого надо будет проверять время - #часовой пояс пока не учитываем - lActivityDateTime=datetime.datetime.strptime(lItem["time"],"%H:%M") - lActivityDateTime.replace(year=lCurrentDateTime.year,month=lCurrentDateTime.month,day=lCurrentDateTime.day) - #Убедиться в том, что время наступило - if lCurrentDateTime>=lActivityDateTime: - #Выполнить операцию - print("ProcessStart:"+lItem["processPath"]) - lDaemonProcessCodeProcessDict[lItem["processCode"]]=subprocess.Popen([lItem["processPath"],lItem["processArgs"]],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) + if lFlagSearchActivityType: + #Определить вид активности + if lItem["activityType"]=="processStart": + #Вид активности - запуск процесса + #Сформировать временной штамп, относительно которого надо будет проверять время + #часовой пояс пока не учитываем + lActivityDateTime=datetime.datetime.strptime(lItem["time"],"%H:%M") + lActivityDateTime.replace(year=lCurrentDateTime.year,month=lCurrentDateTime.month,day=lCurrentDateTime.day) + #Убедиться в том, что время наступило + if lCurrentDateTime>=lActivityDateTime and lItem["processCode"] not in lDaemonProcessCodeProcessDict: + #Выполнить операцию + print("ProcessStart:"+lItem["processPath"]) + lFlagSearchActivityType=False + lDaemonProcessCodeProcessDict[lItem["processCode"]]=subprocess.Popen([lItem["processPath"],lItem["processArgs"]],stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE) + #Определить вид активности + if lItem["activityType"]=="processEnd": + #Вид активности - остановка процесса + #Сформировать временной штамп, относительно которого надо будет проверять время + #часовой пояс пока не учитываем + lActivityDateTime=datetime.datetime.strptime(lItem["time"],"%H:%M") + lActivityDateTime.replace(year=lCurrentDateTime.year,month=lCurrentDateTime.month,day=lCurrentDateTime.day) + #Убедиться в том, что время наступило + if lCurrentDateTime>=lActivityDateTime and lItem["processCode"] in lDaemonProcessCodeProcessDict: + print() + #Выполнить операцию + lProcess=lDaemonProcessCodeProcessDict[lItem["processCode"]] + lProcess.kill() + #os.kill(lProcess.pid, signal.SIGTERM) # Send the signal to all the process groups + lFlagSearchActivityType=False + #Очистить словарь + del lDaemonProcessCodeProcessDict[lItem["processCode"]] #Уснуть до следующего прогона time.sleep(lDaemonLoopSeconds) + diff --git a/Orchestrator/RobotDaemon/robotDaemonConfiguration - Copy.json b/Orchestrator/RobotDaemon/robotDaemonConfiguration - Copy.json new file mode 100644 index 00000000..02ceb10f --- /dev/null +++ b/Orchestrator/RobotDaemon/robotDaemonConfiguration - Copy.json @@ -0,0 +1,29 @@ +{ "__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" + } + + ] +} \ No newline at end of file diff --git a/Orchestrator/RobotDaemon/robotDaemonConfiguration.json b/Orchestrator/RobotDaemon/robotDaemonConfiguration.json index 745fa851..e92fdcf9 100644 --- a/Orchestrator/RobotDaemon/robotDaemonConfiguration.json +++ b/Orchestrator/RobotDaemon/robotDaemonConfiguration.json @@ -1,5 +1,5 @@ { "__loopSeconds":"Количество секунд, между циклами проверки действий", - "loopSeconds":45, + "loopSeconds":5, "activityList":[ { "description":"Запуск Python консоли", @@ -12,7 +12,7 @@ "__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\\OpenRPA_32.cmd", "processPath":"C:\\Abs\\Archive\\scopeSrcUL\\OpenRPA\\WPy32-3720\\IDLE (Python GUI).exe", "__processArgs":"Аргументы, передаваемые при запуске процесса", "processArgs":"" @@ -20,7 +20,7 @@ { "description":"Остановка Python консоли", "activityType":"processEnd", - "time":"18:26", + "time":"22:22", "timeZone":"4", "processCode":"PythonDebug" } diff --git a/PythonDebug_32.cmd b/PythonDebug_32.cmd index f0253401..33cc7f1b 100644 --- a/PythonDebug_32.cmd +++ b/PythonDebug_32.cmd @@ -1 +1,2 @@ +cd %~dp0 .\WPy32-3720\python-3.7.2\python.exe \ No newline at end of file