Display process output as it happens. Fixes #2811

This commit is contained in:
Harshal Dhumal 2017-11-27 13:00:47 +00:00 committed by Dave Page
parent 80c4a3fb1a
commit 7db7da5b0e
2 changed files with 26 additions and 13 deletions

View File

@ -365,7 +365,7 @@ class BatchProcess(object):
if enc is None or enc == 'ascii': if enc is None or enc == 'ascii':
enc = 'utf-8' enc = 'utf-8'
def read_log(logfile, log, pos, ctime): def read_log(logfile, log, pos, ctime, ecode=None):
completed = True completed = True
idx = 0 idx = 0
c = re.compile(r"(\d+),(.*$)") c = re.compile(r"(\d+),(.*$)")
@ -376,6 +376,9 @@ class BatchProcess(object):
with open(logfile, 'rb') as f: with open(logfile, 'rb') as f:
eofs = os.fstat(f.fileno()).st_size eofs = os.fstat(f.fileno()).st_size
f.seek(pos, 0) f.seek(pos, 0)
if pos == eofs and ecode is None:
completed = False
while pos < eofs: while pos < eofs:
idx += 1 idx += 1
line = f.readline() line = f.readline()
@ -394,15 +397,12 @@ class BatchProcess(object):
completed = False completed = False
break break
if pos == eofs: if pos == eofs:
completed = True if ecode is None:
completed = False
break break
return pos, completed return pos, completed
if process_output:
out, out_completed = read_log(self.stdout, stdout, out, ctime)
err, err_completed = read_log(self.stderr, stderr, err, ctime)
j = Process.query.filter_by( j = Process.query.filter_by(
pid=self.id, user_id=current_user.id pid=self.id, user_id=current_user.id
).first() ).first()
@ -423,11 +423,11 @@ class BatchProcess(object):
execution_time = (etime - stime).total_seconds() execution_time = (etime - stime).total_seconds()
if process_output and self.ecode is not None and ( if process_output:
len(stdout) + len(stderr) < 1024 out, out_completed = read_log(self.stdout, stdout, out, ctime,
): self.ecode)
out, out_completed = read_log(self.stdout, stdout, out, ctime) err, err_completed = read_log(self.stderr, stderr, err, ctime,
err, err_completed = read_log(self.stderr, stderr, err, ctime) self.ecode)
else: else:
out_completed = err_completed = False out_completed = err_completed = False

View File

@ -159,8 +159,12 @@ define('misc.bgprocess', [
while (ie < err.length) { while (ie < err.length) {
res.push('<li class="pg-bg-res-err">' + escapeHTML(err[ie++][1]) + '</li>'); res.push('<li class="pg-bg-res-err">' + escapeHTML(err[ie++][1]) + '</li>');
} }
if (res.length) { if (res.length) {
self.logs.append(res.join('')); self.logs.append(res.join(''));
setTimeout(function() {
self.logs[0].scrollTop = self.logs[0].scrollHeight;
});
} }
if (self.stime) { if (self.stime) {
@ -301,9 +305,16 @@ define('misc.bgprocess', [
).append( ).append(
$('<span></span>').text(' ' + gettext('seconds')) $('<span></span>').text(' ' + gettext('seconds'))
); );
self.container.find('.pg-bg-status').empty().append( var $status_bar = $(self.container.find('.pg-bg-status'));
$status_bar.empty().append(
self.curr_status self.curr_status
); );
if (self.exit_code === 0) {
$status_bar.addClass('bg-success');
} else if (self.exit_code == 1){
$status_bar.addClass('bg-failed');
}
} else { } else {
self.show_detailed_view.apply(self) self.show_detailed_view.apply(self)
} }
@ -336,7 +347,9 @@ define('misc.bgprocess', [
if (is_new) { if (is_new) {
// set logs // set logs
$logs.html(self.logs); $logs.html(self.logs);
setTimeout(function() {
self.logs[0].scrollTop = self.logs[0].scrollHeight;
});
// set bgprocess detailed description // set bgprocess detailed description
$header.find('.bg-detailed-desc').html(self.detailed_desc); $header.find('.bg-detailed-desc').html(self.detailed_desc);
} }