From 1220717cd105a448eb055bdde3f2c04944e4431e Mon Sep 17 00:00:00 2001 From: Ivan Maslov Date: Sat, 6 Apr 2019 10:03:49 +0300 Subject: [PATCH] #OrchestratorDaemonPrototype(OnlyStartProcess) --- Help.txt | 5 ++- Orchestrator/RobotDaemon/robotDaemon.py | 36 +++++++++++++++++++ .../RobotDaemon/robotDaemonConfiguration.json | 29 +++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 Orchestrator/RobotDaemon/robotDaemon.py create mode 100644 Orchestrator/RobotDaemon/robotDaemonConfiguration.json diff --git a/Help.txt b/Help.txt index 61afb5ec..d20923fc 100644 --- a/Help.txt +++ b/Help.txt @@ -16,4 +16,7 @@ sys.stdin.read() (Ждет конец строки EOF) Нужно научиться конверить все строки в коды символов, чтобы небыло ложных срабатываний .encode("zlib_codec") -.decode("zlib_codec") \ No newline at end of file +.decode("zlib_codec") + +Стандартизированный формат даты для JSON (от JS) - учет часового пояса производится отдельно тк JS хранит все даты в UTC +2012-04-23T18:25:43.511Z \ No newline at end of file diff --git a/Orchestrator/RobotDaemon/robotDaemon.py b/Orchestrator/RobotDaemon/robotDaemon.py new file mode 100644 index 00000000..eea78514 --- /dev/null +++ b/Orchestrator/RobotDaemon/robotDaemon.py @@ -0,0 +1,36 @@ +import subprocess +import json +import datetime +import time +import codecs + +#Чтение конфигурации +lDaemonConfigurationFile = codecs.open("robotDaemonConfiguration.json", "r","utf_8_sig") +lDaemonConfigurationJSONString = lDaemonConfigurationFile.read() +#Закрыть файловый объект +lDaemonConfigurationFile.close() +#Преобразование в JSON +lDaemonConfigurationObject=json.loads(lDaemonConfigurationJSONString) + +#Инициализация настроечных параметров +lDaemonLoopSeconds=lDaemonConfigurationObject["loopSeconds"] +lDaemonProcessCodeProcessDict={} +lCurrentDateTime=datetime.datetime.now() +#Вечный цикл +while 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) + #Уснуть до следующего прогона + time.sleep(lDaemonLoopSeconds) diff --git a/Orchestrator/RobotDaemon/robotDaemonConfiguration.json b/Orchestrator/RobotDaemon/robotDaemonConfiguration.json new file mode 100644 index 00000000..745fa851 --- /dev/null +++ b/Orchestrator/RobotDaemon/robotDaemonConfiguration.json @@ -0,0 +1,29 @@ +{ "__loopSeconds":"Количество секунд, между циклами проверки действий", + "loopSeconds":45, + "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