@ -8,6 +8,13 @@ import signal
import pdb
import orchestratorServer
import orchestratorTimer
import logging
#Создать файл логирования
# add filemode="w" to overwrite
if not os . path . exists ( " Reports " ) :
os . makedirs ( " Reports " )
logging . basicConfig ( filename = " Reports \ ReportRun_ " + datetime . datetime . now ( ) . strftime ( " % Y_ % m_ %d __ % H_ % M_ % S " ) + " .log " , level = logging . INFO , format = " %(asctime)s - %(name)s - %(levelname)s - %(message)s " )
lGlobalDict = { }
#"JSONConfigurationDict":<JSON>
@ -44,6 +51,9 @@ while True:
#Циклический обход правил
lFlagSearchActivityType = True
for lItem in lDaemonConfigurationObject [ " activityList " ] :
#Проверка дней недели, в рамках которых можно запускать активность
lItemWeekdayList = lItem . get ( " weekdayNumList " , [ 0 , 1 , 2 , 3 , 4 , 5 , 6 ] )
if lCurrentDateTime . weekday ( ) in lItemWeekdayList :
if lFlagSearchActivityType :
#Определить вид активности
if lItem [ " activityType " ] == " processStart " :
@ -59,6 +69,7 @@ while True:
( lItem [ " activityType " ] , lActivityDateTime , lItem [ " processPath " ] ) not in lDaemonActivityLogDict ) :
#Выполнить операцию
print ( datetime . datetime . now ( ) . isoformat ( ) + " :: ProcessStart: " + lItem [ " processPath " ] )
logging . info ( " ProcessStart: " + lItem [ " processPath " ] )
#Запись в массив отработанных активностей
lDaemonActivityLogDict [ ( lItem [ " activityType " ] , lActivityDateTime , lItem [ " processPath " ] ) ] = { " ActivityStartDateTime " : lCurrentDateTime }
#Лог
@ -84,31 +95,33 @@ while True:
#Сформировать команду на завершение
lActivityCloseCommand = ' taskkill /im ' + lItem [ " processName " ]
#TODO Сделать безопасную обработку,если параметра нет в конфигурации
if lItem [ ' flagCloseForce ' ] :
if lItem . get ( ' flagCloseForce ' , False ) :
lActivityCloseCommand + = " /F "
#Завершить процессы только текущего пользоваиеля
if lItem [ ' flagCloseOnlyCurrentUser ' ] :
if lItem . get ( ' flagCloseOnlyCurrentUser ' , False ) :
lActivityCloseCommand + = ' /fi " username eq %u sername % " '
#Лог
lGlobalDict [ " ActivityLogScheduleList " ] . append ( { " activityType " : lItem [ " activityType " ] , " activityDateTime " : str ( lActivityDateTime ) , " processPath " : lItem [ " process Path " ] , " activityStartDateTime " : str ( lCurrentDateTime ) } )
lGlobalDict [ " ActivityLogScheduleList " ] . append ( { " activityType " : lItem [ " activityType " ] , " activityDateTime " : str ( lActivityDateTime ) , " processPath " : lItem [ " process Name " ] , " activityStartDateTime " : str ( lCurrentDateTime ) } )
#Завершить процесс
os . system ( lActivityCloseCommand )
print ( datetime . datetime . now ( ) . isoformat ( ) + " :: ProcessStop " + lItem [ " processName " ] )
logging . info ( " ProcessStop " + lItem [ " processName " ] )
#Вид активности - запуск отдельного потока с циклическим вызовом
if lItem [ " activityType " ] == " loopActivity " :
#Сформировать временной штамп, относительно которого надо будет проверять время
#часовой пояс пока не учитываем
lActivityDateTime = datetime . datetime . strptime ( lItem [ " loopTimeStart " ] , " % H: % M " )
lActivityDateTime = lActivityDateTime . replace ( year = lCurrentDateTime . year , month = lCurrentDateTime . month , day = lCurrentDateTime . day )
lActivityTimeEndDateTime = datetime . datetime . strptime ( lItem [ " loopTimeEnd " ] , " % H: % M " )
lActivityTimeEndDateTime = lActivityTimeEndDateTime . replace ( year = lCurrentDateTime . year , month = lCurrentDateTime . month , day = lCurrentDateTime . day )
#Убедиться в том, что время наступило
if (
lActivityDateTime > = lDaemonStart DateTime and
lCurrentDateTime < lActivityTimeEnd DateTime and
lCurrentDateTime > = lActivityDateTime and
( lItem [ " activityType " ] , lActivityDateTime , lItem [ " processPath " ] ) not in lDaemonActivityLogDict ) :
logging . info ( " ActivityLoop Start " )
#Запись в массив отработанных активностей
lDaemonActivityLogDict [ ( lItem [ " activityType " ] , lActivityDateTime , lItem [ " processPath " ] ) ] = { " ActivityStartDateTime " : lCurrentDateTime }
lActivityTimeEndDateTime = datetime . datetime . strptime ( lItem [ " loopTimeEnd " ] , " % H: % M " )
lActivityTimeEndDateTime = lActivityTimeEndDateTime . replace ( year = lCurrentDateTime . year , month = lCurrentDateTime . month , day = lCurrentDateTime . day )
#Лог
lGlobalDict [ " ActivityLogScheduleList " ] . append ( { " activityType " : lItem [ " activityType " ] , " activityDateTime " : str ( lActivityDateTime ) , " processPath " : lItem [ " processPath " ] , " activityStartDateTime " : str ( lCurrentDateTime ) } )
#Запуск циклической процедуры