diff --git a/hawk/app/assets/javascripts/module/reports.js b/hawk/app/assets/javascripts/module/reports.js index 66b4e6e7..c1433f72 100644 --- a/hawk/app/assets/javascripts/module/reports.js +++ b/hawk/app/assets/javascripts/module/reports.js @@ -28,7 +28,11 @@ $(function() { clearInterval(running_timeout); running_timeout = null; } - $.growl({ message: __("Report generation is complete.") }, { type: 'success' }); + if (state.report_generated) { + $.growl({ message: __("Report generation is complete.") }, { type: 'success' }); + } else { + $.growl({ message: __("Failed to create the report: " + state.msg ) }, { type: 'danger' }); + } $('#reports #middle table.reports').bootstrapTable('refresh'); build_tabs(); } diff --git a/hawk/app/controllers/reports_controller.rb b/hawk/app/controllers/reports_controller.rb index 2f4aca69..66fa8339 100644 --- a/hawk/app/controllers/reports_controller.rb +++ b/hawk/app/controllers/reports_controller.rb @@ -109,7 +109,8 @@ def running @hb_report = HbReport.new running = @hb_report.running? t = running ? @hb_report.lasttime : nil - render json: { running: running, time: (t || ["", ""]) } + rc = @hb_report.report_generated? + render json: { running: running, time: (t || ["", ""]), report_generated: rc[:code], msg: rc[:msg] } end end end diff --git a/hawk/app/lib/hb_report.rb b/hawk/app/lib/hb_report.rb index ed2258c2..7e125a7c 100644 --- a/hawk/app/lib/hb_report.rb +++ b/hawk/app/lib/hb_report.rb @@ -38,6 +38,23 @@ def running? Util.child_active(@pidfile) end + def report_generated? + return { code: false, msg: '' } if !File.exist?(@exitfile) || !File.exist?(@timefile) + + rc = File.read(@exitfile).to_i + return { code: true, msg: '' } if rc==0 + + lt = lasttime + errfile = Rails.root.join('tmp', 'reports', "hawk-#{lt[0]}-#{lt[1]}.stderr").to_s + # .stderr file must exist even if there was no error + return { code: false, msg: '' } if !File.exist?(errfile) + + err_text = File.read(errfile).split("\n") + err_msg = '
' + err_text[0] + err_msg += '
...
' + err_text[-1] if err_text.length() > 1 + return { code: false, msg: err_msg } + end + def cancel! pid = File.new(@pidfile).read.to_i return 0 if pid <= 0