From 6158340185e96a6b2e7f8c58282781d22480d485 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Luka=C5=A1=C3=ADk?= Date: Fri, 27 Jan 2017 19:13:48 +0100 Subject: [PATCH] Introduce Chargeback Preview page For the ability to quickly view chargeback of a single VM. That is usuful to get a quick notion of costs associated with the given VM. --- .../application_controller/explorer.rb | 2 +- app/controllers/mixins/chargeback_preview.rb | 26 +++++++++++++++++++ app/controllers/vm_common.rb | 5 ++++ .../application_helper/toolbar/x_vm_center.rb | 6 +++++ app/views/vm_common/_chargeback.html.haml | 2 ++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 app/controllers/mixins/chargeback_preview.rb create mode 100644 app/views/vm_common/_chargeback.html.haml diff --git a/app/controllers/application_controller/explorer.rb b/app/controllers/application_controller/explorer.rb index 681a7e0cd91..821254b9296 100644 --- a/app/controllers/application_controller/explorer.rb +++ b/app/controllers/application_controller/explorer.rb @@ -42,7 +42,7 @@ def x_history 'guest_restart' => :s1, 'retire_now' => :s1, 'snapshot_revert' => :s1, 'start' => :s1, 'stop' => :s1, 'suspend' => :s1, 'reset' => :s1, 'terminate' => :s1, 'pause' => :s1, - 'shelve' => :s1, 'shelve_offload' => :s1, + 'shelve' => :s1, 'shelve_offload' => :s1, 'chargeback' => :s1, # group 2 'clone' => :s2, 'compare' => :s2, 'drift' => :s2, diff --git a/app/controllers/mixins/chargeback_preview.rb b/app/controllers/mixins/chargeback_preview.rb new file mode 100644 index 00000000000..c934d0208d2 --- /dev/null +++ b/app/controllers/mixins/chargeback_preview.rb @@ -0,0 +1,26 @@ +module ChargebackPreview + extend ActiveSupport::Concern + + def vm_chargeback + @sb[:action] ||= 'chargeback' + @vm = @record = identify_record(params[:id], VmOrTemplate) + + if params[:task_id] + miq_task = MiqTask.find(params[:task_id]) + if !miq_task.results_ready? + add_flash(_("Report preview generation returned: Status [%{status}] Message [%{message}]") % + {:status => miq_task.status, :message => miq_task.message}, :error) + else + rr = miq_task.miq_report_result + @html = report_build_html_table(rr.report_results, rr.html_rows.join) + @refresh_partial = 'vm_common/chargeback' + miq_task.destroy + end + else + rpt = perf_get_chart_rpt('vm_chargeback') + rpt.db_options[:options][:entity_id] = @vm.id + # TODO: Use user's timezone + initiate_wait_for_task(:task_id => rpt.async_generate_table(:userid => session[:userid])) + end + end +end diff --git a/app/controllers/vm_common.rb b/app/controllers/vm_common.rb index 112b93897bd..946d37d4601 100644 --- a/app/controllers/vm_common.rb +++ b/app/controllers/vm_common.rb @@ -1,6 +1,7 @@ module VmCommon extend ActiveSupport::Concern include ActionView::Helpers::JavaScriptHelper + include ChargebackPreview # handle buttons pressed on the button bar def button @@ -1662,6 +1663,10 @@ def set_right_cell_vars header = _("Editing %{vm_or_template} \"%{name}\"") % {:name => name, :vm_or_template => ui_lookup(:table => table)} action = "edit_vm" + when 'chargeback' + partial = @refresh_partial + header = _('Chargeback preview for "%{vm_name}"') % { :vm_name => name } + action = 'vm_chargeback' when "evm_relationship" partial = "vm_common/evm_relationship" header = _("Edit %{product} Server Relationship for %{vm_or_template} \"%{name}\"") % diff --git a/app/helpers/application_helper/toolbar/x_vm_center.rb b/app/helpers/application_helper/toolbar/x_vm_center.rb index 56b5a57bf31..f95686a2e51 100644 --- a/app/helpers/application_helper/toolbar/x_vm_center.rb +++ b/app/helpers/application_helper/toolbar/x_vm_center.rb @@ -164,6 +164,12 @@ class ApplicationHelper::Toolbar::XVmCenter < ApplicationHelper::Toolbar::Basic N_('Timelines'), :url_parms => "?display=timeline", :klass => ApplicationHelper::Button::VmTimeline), + button( + :vm_chargeback, + 'product product-report fa-lg', + N_('Show Chargeback preview'), + N_('Chargeback Preview') + ), ] ), ]) diff --git a/app/views/vm_common/_chargeback.html.haml b/app/views/vm_common/_chargeback.html.haml new file mode 100644 index 00000000000..ba7b115b3fa --- /dev/null +++ b/app/views/vm_common/_chargeback.html.haml @@ -0,0 +1,2 @@ += render :partial => 'layouts/flash_msg' += render :partial => 'layouts/report_html'