From: Daniel Pittman <[email protected]> Now that we perform various tasks, such as report imports, in the background we don't have any immediate way to give users feedback on the outcome of their task.
This adds infrastructure for collecting and displaying those problems to the user as part of the normal operation of the dashboard. The UI is partially completed; all the data is present, but the design is awful. This merges in sufficient functionality for our UX team to work on. Paired-With: Josh Cooper <[email protected]> Paired-With: Matt Robinson <[email protected]> Signed-off-by: Josh Cooper <[email protected]> --- Local-branch: feature/master/7967-display-report-import-failures app/controllers/delayed_job_failures_controller.rb | 24 ++++++++++++++++++++ app/models/delayed_job_failure.rb | 5 ++++ app/models/report.rb | 4 +++ app/views/delayed_job_failures/index.html.haml | 17 ++++++++++++++ app/views/shared/_node_manager_sidebar.html.haml | 5 ++++ .../20110620111500_create_delayed_job_failures.rb | 14 +++++++++++ .../controllers/delayed_job_failures_controller.rb | 15 ++++++++++++ 7 files changed, 84 insertions(+), 0 deletions(-) create mode 100644 app/controllers/delayed_job_failures_controller.rb create mode 100644 app/models/delayed_job_failure.rb create mode 100644 app/views/delayed_job_failures/index.html.haml create mode 100644 db/migrate/20110620111500_create_delayed_job_failures.rb create mode 100644 spec/controllers/delayed_job_failures_controller.rb diff --git a/app/controllers/delayed_job_failures_controller.rb b/app/controllers/delayed_job_failures_controller.rb new file mode 100644 index 0000000..e121d9d --- /dev/null +++ b/app/controllers/delayed_job_failures_controller.rb @@ -0,0 +1,24 @@ +class DelayedJobFailuresController < ApplicationController + def index + respond_to do |format| + format.html do + @delayed_job_failures = paginate_scope(DelayedJobFailure.all(:order => 'created_at DESC')) + end + + format.all do + @delayed_job_failures = DelayedJobFailure.all(:order => 'created_at DESC') + end + end + + if params.has_key? :mark_all_read then + DelayedJobFailure.transaction do + # Can't just update_all, because this is a WillPaginate collection, + # and it has a limited API. Alas. --daniel 2011-06-20 + @delayed_job_failures.each do |event| + event.read = true + event.save! + end + end + end + end +end diff --git a/app/models/delayed_job_failure.rb b/app/models/delayed_job_failure.rb new file mode 100644 index 0000000..c046d75 --- /dev/null +++ b/app/models/delayed_job_failure.rb @@ -0,0 +1,5 @@ +class DelayedJobFailure < ActiveRecord::Base + def self.per_page; 25 end + + named_scope :unread, :conditions => { :read => nil } +end diff --git a/app/models/report.rb b/app/models/report.rb index 5012b04..09c2b9e 100644 --- a/app/models/report.rb +++ b/app/models/report.rb @@ -83,6 +83,10 @@ class Report < ActiveRecord::Base report = create_from_yaml(File.read(report_file)) File.unlink(report_file) if options[:delete] return report + rescue Exception => e + DelayedJobFailure.create!(:summary => "Importing report #{File.basename(report_file)}", + :details => e.to_s) + return nil end def self.create_from_yaml(report_yaml) diff --git a/app/views/delayed_job_failures/index.html.haml b/app/views/delayed_job_failures/index.html.haml new file mode 100644 index 0000000..cb1e0e6 --- /dev/null +++ b/app/views/delayed_job_failures/index.html.haml @@ -0,0 +1,17 @@ +#sidebar= render 'shared/node_manager_sidebar' +#main + .header + %h2 + Delayed Job Failures + %span.count= page_entries_info(@delayed_job_failures, { :entry_name => "failure" } ) + - form_tag request.url, :class => 'REVISIT', :method => :post do + %button{:name => :mark_all_read} Mark all Read + + .item + %ul + - @delayed_job_failures.each do |e| + %li{:class => e.read ? :read : :unread} + &= "#{e.summary} (#{e.created_at})" + %pre + &= e.details + = pagination_for @delayed_job_failures diff --git a/app/views/shared/_node_manager_sidebar.html.haml b/app/views/shared/_node_manager_sidebar.html.haml index 109175b..1ccb186 100644 --- a/app/views/shared/_node_manager_sidebar.html.haml +++ b/app/views/shared/_node_manager_sidebar.html.haml @@ -1,4 +1,9 @@ .group + %h3= link_to "Delayed Job Status", "/delayed_job_failures" + %h4= link_to "#{DelayedJobFailure.unread.count} unread failures", "/delayed_job_failures" + %h4= "#{Delayed::Job.count} pending reports" + +.group %h3{:class => active_if(controller_name == "nodes" && action_name == "index")}= link_to "Nodes", nodes_path -# %span.count= Node.unhidden.count %p.help diff --git a/db/migrate/20110620111500_create_delayed_job_failures.rb b/db/migrate/20110620111500_create_delayed_job_failures.rb new file mode 100644 index 0000000..23a9ac4 --- /dev/null +++ b/db/migrate/20110620111500_create_delayed_job_failures.rb @@ -0,0 +1,14 @@ +class CreateDelayedJobFailures < ActiveRecord::Migration + def self.up + create_table :delayed_job_failures do |t| + t.string :summary, :limit => 255 + t.text :details + t.boolean :read + t.timestamps + end + end + + def self.down + drop_table :delayed_job_failures + end +end diff --git a/spec/controllers/delayed_job_failures_controller.rb b/spec/controllers/delayed_job_failures_controller.rb new file mode 100644 index 0000000..5b9433d --- /dev/null +++ b/spec/controllers/delayed_job_failures_controller.rb @@ -0,0 +1,15 @@ +require File.expand_path(File.dirname(__FILE__) + '/../spec_helper') + +require 'shared_behaviors/controller_mixins' + +describe DelayedJobFailuresController do + def model; DelayedJobFailure end + it_should_behave_like "without JSON pagination" + + it "should mark events read when asked" do + event = DelayedJobFailure.create!(:summary => "foo").id + DelayedJobFailure.find(event).read.should be_false + post :index, :mark_all_read => nil + DelayedJobFailure.find(event).read.should be_true + end +end -- 1.7.4.4 -- You received this message because you are subscribed to the Google Groups "Puppet Developers" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-dev?hl=en.
