Skip to content

Commit

Permalink
Merge pull request #558 from h-kataria/ansible_service_summary_screen
Browse files Browse the repository at this point in the history
Ansible Service summary screen
  • Loading branch information
Dan Clarizio authored Mar 13, 2017
2 parents f1ed389 + be2e5b0 commit ecd75e7
Show file tree
Hide file tree
Showing 6 changed files with 208 additions and 8 deletions.
9 changes: 8 additions & 1 deletion app/assets/javascripts/miq_application.js
Original file line number Diff line number Diff line change
Expand Up @@ -1070,7 +1070,7 @@ function miq_tabs_init(id, url) {
$(id + ' > ul.nav-tabs a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
// Refresh CodeMirror when its tab is toggled
if ($($(e.target).attr('href')).hasClass('cm-tab') && typeof(ManageIQ.editor) != 'undefined') {
ManageIQ.editor.refresh();
miq_refresh_code_mirror();
}
});

Expand All @@ -1092,6 +1092,13 @@ function miq_tabs_init(id, url) {
}
}

// refresh multiple/single code mirror textboxes on screen
function miq_refresh_code_mirror() {
$('.CodeMirror').each(function(_i, el){
el.CodeMirror.refresh();
});
}

function miq_tabs_disable_inactive(id) {
$(id + ' ul.nav-tabs > li:not(.active)').addClass('disabled');
}
Expand Down
16 changes: 15 additions & 1 deletion app/controllers/service_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,24 @@ def service_form_fields
private

def textual_group_list
[%i(properties lifecycle relationships miq_custom_attributes), %i(vm_totals tags)]
if @record.type == "ServiceAnsiblePlaybook"
[%i(properties)]
else
[%i(properties lifecycle relationships miq_custom_attributes), %i(vm_totals tags)]
end
end
helper_method :textual_group_list

def textual_provisioning_group_list
[%i(provisioning_results provisioning_plays), %i(provisioning_details provisioning_credentials)]
end
helper_method :textual_provisioning_group_list

def textual_retirement_group_list
[%i(retirement_results retirement_plays), %i(retirement_details retirement_credentials)]
end
helper_method :textual_retirement_group_list

def features
[ApplicationController::Feature.new_with_hash(:role => "service",
:role_any => true,
Expand Down
134 changes: 134 additions & 0 deletions app/helpers/service_helper/textual_summary.rb
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,46 @@ def textual_group_properties
TextualGroup.new(_("Properties"), %i(name description guid))
end

def textual_group_provisioning_results
return nil unless provisioning_get_job
TextualGroup.new(_("Results"), %i(status start_time finish_time elapsed_time owner))
end

def textual_group_provisioning_details
return nil unless provisioning_get_job
TextualGroup.new(_("Details"), %i(playbook repository verbosity hosts))
end

def textual_group_provisioning_credentials
return nil unless provisioning_get_job
TextualGroup.new(_("Credentials"), %i(machine_credential network_credential cloud_credential))
end

def textual_group_provisioning_plays
return nil unless provisioning_get_job
fetch_job_plays
end

def textual_group_retirement_results
return nil unless retirement_get_job
TextualGroup.new(_("Results"), %i(status start_time finish_time elapsed_time owner))
end

def textual_group_retirement_details
return nil unless retirement_get_job
TextualGroup.new(_("Details"), %i(playbook repository verbosity hosts))
end

def textual_group_retirement_credentials
return nil unless retirement_get_job
TextualGroup.new(_("Credentials"), %i(machine_credential network_credential cloud_credential))
end

def textual_group_retirement_plays
return nil unless retirement_get_job
fetch_job_plays
end

def textual_group_vm_totals
TextualGroup.new(
_("Totals for Service VMs"),
Expand Down Expand Up @@ -141,4 +181,98 @@ def textual_miq_custom_attributes
return nil if attrs.blank?
attrs.sort_by(&:name).collect { |a| {:label => a.name, :value => a.value} }
end

def textual_status
{:label => _("Status"), :value => @job.status}
end

def textual_start_time
{:label => _("Started"), :value => format_timezone(@job.start_time)}
end

def textual_finish_time
{:label => _("Finished"), :value => format_timezone(@job.finish_time)}
end

def textual_elapsed_time
{:label => _("Elapsed"), :value => @job.finish_time && @job.start_time ? calculate_elapsed_time(@job.start_time, @job.finish_time) : "N/A"}
end

def textual_playbook
return nil unless @job.playbook
{:label => _("Playbook"), :value => @job.playbook.name}
end

def textual_repository
return nil unless @job.playbook
{:label => _("Repository"), :value => @job.playbook.configuration_script_source.name}
end

def textual_verbosity
{:label => _("Verbosity"), :value => @job.verbosity}
end

def textual_hosts
{:label => _("Hosts"), :value => @job.hosts.join(", ")}
end

def textual_machine_credential
credential = @job.authentications.find_by(:type => 'ManageIQ::Providers::EmbeddedAnsible::AutomationManager::MachineCredential')
return nil unless credential
credential(credential, _("Machine"))
end

def textual_network_credential
credential = @job.authentications.find_by(:type => 'ManageIQ::Providers::EmbeddedAnsible::AutomationManager::NetworkCredential')
return nil unless credential
credential(credential, _("Network"))
end

def textual_cloud_credential
credential = @job.authentications.find_by(:type => 'ManageIQ::Providers::EmbeddedAnsible::AutomationManager::CloudCredential')
return nil unless credential
credential(credential, _("Cloud"))
end

def credential(credential, label)
{:label => label, :value => credential.name}
end

def provisioning_get_job
fetch_job("Provision")
end

def retirement_get_job
fetch_job("Retirement")
end

def fetch_job(type)
@job = @record.try(:job, type)
@job
end

def fetch_job_plays
items = @job.job_plays.sort_by(&:start_time).collect do |play|
[
play.name,
format_timezone(play.start_time),
format_timezone(play.finish_time),
play.finish_time && play.start_time ? calculate_elapsed_time(play.start_time, play.finish_time) : '/A'
]
end.sort

TextualTable.new(
_("Plays"),
items,
[_("Name"), _("Started"), _("Finished"), _("Elapsed")]
)
end

def calculate_elapsed_time(stime, ftime)
val = (ftime - stime)
hours = val / 3600
mins = val / 60
secs = val % 60
("%02d:%02d:%02d" % [hours, mins, secs])
end
end
16 changes: 16 additions & 0 deletions app/views/layouts/_textual_code_mirror.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.row
.col-md-12.col-lg-12
%hr
%h3= _("#{label}")
= text_area(text_area_id, "data",
:value => "#{value}",
:size => "90x20",
:disabled => true,
:style => "display:none;")
-# Create a MyCodeMirror editor for the text area
= render(:partial => "/layouts/my_code_mirror",
:locals => {:text_area_id => "#{text_area_id}_data",
:mode => "#{mode}",
:line_numbers => true,
:read_only => true})

2 changes: 2 additions & 0 deletions app/views/layouts/_textual_groups_tabs.html.haml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-# each tab can have different set of boxes
= render :partial => "layouts/textual_groups_raw", :locals => {:textual_group_list => textual_group_list}
39 changes: 33 additions & 6 deletions app/views/service/_svcs_show.html.haml
Original file line number Diff line number Diff line change
@@ -1,8 +1,35 @@
= render :partial => "layouts/textual_groups_generic"
.row
.col-md-12.col-lg-6
%h3
= _('VMs')
- if @record.type == "ServiceAnsiblePlaybook"
#services_tab
- job = @record.try(:job, "Retirement")
- unless job
-# show header when Retirement tab is not visible,
-# tabs are only displayed when there are are more than 1 tab on screen
%hr
%h3= _("Provisioning")
%ul.nav.nav-tabs
= miq_tab_header("provisioning") do
= _("Provisioning")
- if job
= miq_tab_header("retirement") do
= _("Retirement")
.tab-content
= miq_tab_content("provisioning", 'default', :class => 'cm-tab') do
= render :partial => "layouts/textual_groups_tabs", :locals => {:textual_group_list => textual_provisioning_group_list}
- if @job && @job.try(:raw_stdout)
= render :partial => "layouts/textual_code_mirror", :locals => {:label => 'Standard Output', :value => @job.raw_stdout, :mode => "htmlmixed", :text_area_id => "provision_output"}
- if job
= miq_tab_content("retirement", 'default', :class => 'cm-tab') do
= render :partial => "layouts/textual_groups_tabs", :locals => {:textual_group_list => textual_retirement_group_list}
= render :partial => "layouts/textual_code_mirror", :locals => {:label => 'Standard Output', :value => job.raw_stdout, :mode => "htmlmixed", :text_area_id => "retirement_output"}
:javascript
miq_tabs_init('#services_tab');
miq_refresh_code_mirror();
- else
.row
.col-md-12.col-lg-6
%h3
= _('VMs')

- if @view
= render :partial => "layouts/gtl", :locals => {:view => @view}
- if @view
= render :partial => "layouts/gtl", :locals => {:view => @view}

0 comments on commit ecd75e7

Please sign in to comment.