Пример #1
0
def child_timed_out(child):
    global children
    child_write_out(child,"Timed out.")
    child.process.terminate();
    child.task.end_time = datetime.now()
    child.status = scheduledb.ERROR_TIMEOUT       
    scheduledb.update_task_mult(child.task,[
            ['end_time',child.end_time],
            ['status',child.status]                        
    ])
    if ( child.fout != stdout ):
        child.fout.close()
    children.remove(child)
Пример #2
0
def child_died(child, retval):
    global children
    child.task.end_time = datetime.now()
    if ( retval != 0 ): # assume error
        child.task.status = scheduledb.ERROR_CRASH
    else:
        child.task.status = scheduledb.DONE        
        
    scheduledb.update_task_mult(child.task,[
            ['end_time',child.task.end_time],
            ['status',child.task.status]                        
    ])
    if ( child.fout != sys.stdout ):
        child.fout.close()
        
    children.remove(child)
Пример #3
0
def child_kill(child):
    global children
    if child.status != scheduledb.RUNNING:
        print "Can't kill task %d because it isn't running"%(child.task.id)
        
    child_write_out(child,"Killed.")
    child.process.terminate();
    child.task.end_time = datetime.now()
    child.status = scheduledb.STOPPED
    scheduledb.update_task_mult(child.task,[
            ['end_time',child.task.end_time],
            ['status',child.status]                        
    ])
    if ( child.fout != stdout ):
        child.fout.close()
    children.remove(child)
Пример #4
0
def child_write_out(child, msg):
    msg = msg.rstrip();
    m = statexpr.match(msg)
    if m :
        child.task.progress_steps_done = m.group('stepd')
        child.task.progress_steps_total= m.group('stept')
        child.task.step_description    = m.group('stepn')
        child.task.step_progress_str   = m.group('prog')
        
        scheduledb.update_task_mult(child.task,[
             ['progress_steps_done', child.task.progress_steps_done],
             ['progress_steps_total', child.task.progress_steps_total],
             ['step_description', child.task.step_description],
             ['step_progress_str',child.task.step_progress_str]
        ])
        
    lines = msg.split('\n')
    for line in lines:
        print >> child.fout,line    
Пример #5
0
    child = ChildProcess()
    children.append(child)
    child.task = task;
    try:
        child.fout = open(child.task.log_file,'a',0)
    except IOError,msg:
        child.fout = sys.stdout
        child_write_out(child,"Couldn't open log file for writing: "+str(msg))
        
    try:
        child.process = asyncprocess.Popen(shlex.split(task.command), stdin=asyncprocess.PIPE, stderr=asyncprocess.PIPE, stdout=asyncprocess.PIPE, bufsize=1, universal_newlines=True);
        child.task.pid = child.process.pid
        child.task.status = scheduledb.RUNNING
        child.start_time = datetime.now()
        scheduledb.update_task_mult(child.task,[['start_time',child.start_time],
                                                ['status',child.task.status],
                                                ['pid',child.task.pid]
                                                ])
    except OSError,msg:
        child_write_out(child,"Couldn't start process: "+str(msg))
        child.process = None;
        child_died(child,-1);
    
def child_timed_out(child):
    global children
    child_write_out(child,"Timed out.")
    child.process.terminate();
    child.task.end_time = datetime.now()
    child.status = scheduledb.ERROR_TIMEOUT       
    scheduledb.update_task_mult(child.task,[
            ['end_time',child.end_time],
            ['status',child.status]