From: Jiri Tomasek jtomasek@redhat.com
--- src/app/controllers/deployables_controller.rb | 4 +- src/app/helpers/deployables_helper.rb | 13 +++++++ src/app/models/deployable.rb | 28 ++++++++-------- src/app/stylesheets/layout.scss | 27 +++++++++++++-- src/app/views/deployables/show.html.haml | 45 +++++++++++-------------- src/config/locales/en.yml | 6 +++ src/public/images/build_status.png | Bin 0 -> 1182 bytes 7 files changed, 79 insertions(+), 44 deletions(-) create mode 100644 src/app/helpers/deployables_helper.rb create mode 100644 src/public/images/build_status.png
diff --git a/src/app/controllers/deployables_controller.rb b/src/app/controllers/deployables_controller.rb index 3f6116a..e7726bd 100644 --- a/src/app/controllers/deployables_controller.rb +++ b/src/app/controllers/deployables_controller.rb @@ -56,8 +56,8 @@ class DeployablesController < ApplicationController @providers = Provider.all @catalogs_options = Catalog.list_for_user(current_user, Privilege::VIEW).select {|c| !@deployable.catalogs.include?(c)} add_permissions_inline(@deployable) - @image_details = @deployable.get_image_details - @image_details.each do |assembly| + @images_details = @deployable.get_image_details + @images_details.each do |assembly| assembly.keys.each do |key| flash[:error] = assembly[key] if key.to_s =~ /^error\w+/ end diff --git a/src/app/helpers/deployables_helper.rb b/src/app/helpers/deployables_helper.rb new file mode 100644 index 0000000..2c9ad8e --- /dev/null +++ b/src/app/helpers/deployables_helper.rb @@ -0,0 +1,13 @@ +module DeployablesHelper + def image_ready?(assembly) + if @missing_images.empty? + "image is ready" + else + if @missing_images.include?(assembly[:image_uuid]) + "Image specified in xml does not exist" + else + "image is ready" + end + end + end +end diff --git a/src/app/models/deployable.rb b/src/app/models/deployable.rb index a148543..f5eb873 100644 --- a/src/app/models/deployable.rb +++ b/src/app/models/deployable.rb @@ -108,32 +108,32 @@ class Deployable < ActiveRecord::Base
#get details of image for deployable#show def get_image_details - stored_xml = Nokogiri::XML(xml) - result_array ||= [] - stored_xml.xpath("//assembly").each do |assembly| - if assembly.attr('name') - assembly_hash ||= {:name => assembly.attr('name')} + deployable_xml = DeployableXML.new(xml) + assemblies_array ||= [] + deployable_xml.assemblies.each do |assembly| + if assembly.name + assembly_hash ||= {:name => assembly.name} else assembly_hash ||= {:error_name => I18n.t('deployables.error.attribute_not_exist')} end - if assembly.attr('hwp') - hwp_name = stored_xml.xpath("//assembly").attr('hwp').value + assembly_hash[:image_uuid] = assembly.image_id + if assembly.hwp + hwp_name = assembly.hwp hwp = HardwareProfile.find_by_name(hwp_name) if hwp - assembly_hash[:hwp] = {:name => hwp_name} - assembly_hash[:hwp][:hdd] = hwp.storage.value - assembly_hash[:hwp][:ram] = hwp.memory.value - assembly_hash[:hwp][:arch] = hwp.architecture.value + assembly_hash[:hwp_name] = hwp.name + assembly_hash[:hwp_hdd] = hwp.storage.value + assembly_hash[:hwp_ram] = hwp.memory.value + assembly_hash[:hwp_arch] = hwp.architecture.value else assembly_hash[:error_hwp] = I18n.t('deployables.error.hwp_not_exists', :name => hwp_name) end else assembly_hash[:error_hwp] = I18n.t('deployables.error.attribute_not_exist') end - result_array << assembly_hash + assemblies_array << assembly_hash end - #returned value [{:name => 'assembly1',{:hwp => {...}}, {:error => "msg"}, {assembly3} ..] - result_array + assemblies_array end
def build_status(images, account) diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss index 9d67a87..d75ef69 100644 --- a/src/app/stylesheets/layout.scss +++ b/src/app/stylesheets/layout.scss @@ -2397,12 +2397,28 @@ ul.instances-array{
table.light_table{ margin: 10px; - td,th{ padding: 10px; } + td,th{ padding: 5px 10px; vertical-align: middle;} th{border-bottom: 1px solid #CCCCCC;} td:first-child, th:first-child{padding-left: 0px;} td:last-child, th:last-child{padding-right: 0px;} }
+div.build_status{ + float: right; + .build_status_icon{ + display: inline-block; + vertical-align: middle; + width: 18px; height: 18px; + margin-left: 10px; + + &.not_built{ background: transparent url(../../images/build_status.png) no-repeat left center; } + &.building{ background: transparent url(../../images/spinner.gif) no-repeat center center; } + &.not_pushed{ background: transparent url(../../images/build_status.png) no-repeat center center; } + &.pushing{ background: transparent url(../../images/spinner.gif) no-repeat center center; } + &.pushed{ background: transparent url(../../images/build_status.png) no-repeat right center; } + } +} + /************************************************************************** */ /********************************************* Launch from catalog elements */ /************************************************************************** */ @@ -2499,9 +2515,13 @@ ul.catalog_pretty { margin: 10px 0px 10px 0px; li{ list-style-type: none; - &:not(:first-child){border-top: 1px solid #ccc;}
+ &:first-child div.summary{ -webkit-border-radius: 7px 7px 0px 0px; -moz-border-radius: 7px 7px 0px 0px; border-radius: 7px 7px 0px 0px; } + &:last-child div.summary{ -webkit-border-radius: 0px 0px 7px 7px; -moz-border-radius: 0px 0px 7px 7px; border-radius: 0px 0px 7px 7px; } + &:last-child div.details{ -webkit-border-radius: 0px 0px 7px 7px; -moz-border-radius: 0px 0px 7px 7px; border-radius: 0px 0px 7px 7px; } + &:only-child div.summary{ -webkit-border-radius: 7px 7px 7px 7px; -moz-border-radius: 7px 7px 7px 7px; border-radius: 7px 7px 7px 7px; } + &:only-child div.details{ -webkit-border-radius: 0px 0px 7px 7px; -moz-border-radius: 0px 0px 7px 7px; border-radius: 0px 0px 7px 7px; } div.summary{ padding: 10px; background-color: #efefef; @@ -2537,8 +2557,9 @@ ul.catalog_pretty { div.details.collapsible{ background: #eee; border-top: 1px solid #ccc; + padding: 10px; table{ - margin: 10px 10px 10px 42px; + margin: 0px 0px 0px 32px; td,th{ padding: 10px; } td:first-child, th:first-child{padding-left: 0px;} td:last-child, th:last-child{padding-right: 0px;} diff --git a/src/app/views/deployables/show.html.haml b/src/app/views/deployables/show.html.haml index f89ac19..c367633 100644 --- a/src/app/views/deployables/show.html.haml +++ b/src/app/views/deployables/show.html.haml @@ -24,21 +24,21 @@ %th.align-center=t'.ram' %th.align-center=t'.arch' %tbody - - @image_details.each do |assembly| + - @images_details.each do |assembly| %tr - %td image ready + %td= image_ready?(assembly) - if assembly.has_key?(:name) %td %strong=assembly[:name] -else %td=assembly[:error_name] - -if assembly.has_key?(:hwp) - %td=assembly[:hwp][:name] - %td.align-center=assembly[:hwp][:hdd] - %td.align-center=assembly[:hwp][:ram] - %td.align-center=assembly[:hwp][:arch] + -if assembly.has_key?(:hwp_name) + %td=assembly[:hwp_name] + %td.align-center=assembly[:hwp_hdd] + %td.align-center=assembly[:hwp_ram] + %td.align-center=assembly[:hwp_arch] -else - %td Not exist in DB + %td{:colspan => 4}= assembly[:error_hwp]
%section.admin-content-section - if @missing_images.empty? @@ -53,23 +53,18 @@
%ul#providers-list.catalog_pretty - @build_results.each do |provider_type, results| - %li.collapse_entity - .summary - .info - %h2= provider_type - .controls - = link_to t(".details"),"#", :class => "collapse" - .details.collapsible - %table - %tr - %th=t'.provider' - %th=t'.account' - %th.align-center=t'.status' - - results.each do |result| - %tr - %td= result[:provider] - %td= result[:account] - %td.align-center= result[:status] + - results.each do |result| + %li + .summary + .info + %h2= provider_type + %span= result[:provider] + | + %span= result[:account] + .controls + .build_status + %span= t("catalog_entries.build_statuses_descriptions.#{result[:status]}") + %div{:class => "build_status_icon #{result[:status]}"} - else %header %h2= t('.build') diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml index 4dab401..8b0f2d4 100644 --- a/src/config/locales/en.yml +++ b/src/config/locales/en.yml @@ -653,6 +653,12 @@ en: deleted: Catalog entry deleted. preset_filters: all_catalog_entries: All Catalog Entries + build_statuses_descriptions: + not_built: "Images are not Built" + building: "Images are being built." + not_pushed: "Some of the images are not pushed" + pushing: "Images are being pushed." + pushed: "All Images are pushed and recent." catalogs: catalogs: Catalogs new_catalog: New Catalog diff --git a/src/public/images/build_status.png b/src/public/images/build_status.png new file mode 100644 index 0000000000000000000000000000000000000000..5fca76b0ca151514ad349e36d9d8052f3de48f8e GIT binary patch literal 1182 zcmV;P1Y!G$P)<h;3K|Lk000e1NJLTq0024w000sQ1^@s63PjCw00004b3#c}2nYxW zd<bNS00009a7bBm000XT000XT0n*)m`~Uy|9CSrkbW?9;ba!ELWdK2BZ(?O2Mrm?o zcW-iQb09-gHF34$HUIzs7IZ~ebVG7wVRUJ4ZXi@?ZDjy4F)uSPFEKG)yq8S?00Z_( zL_t(oh0T{wPa8)Vho2dHjlI~0xJ`Cd2&$B}7le!oRdda)0yRy1ujE{i&$;K+e1}MI zsH5I7Qb2rxNR28Gf1);#dTA)AS<=L&#E!k|-RS{#<u%4@svdZy_u%#HGw*L^ezP-z zuGrYv7zK)_neY002PgyO+1c3|fKn>dKnQUuc_GT?=H{K#h9mTkBcM1lGqcjKu*<{? zC|g@wMc_v`83jMPJN5H4?oCfmmwOd<*?0nAdwcs1Pyz5f4`thYw7QD1w1j3^062z$ zwXnduxj7gbLQ3hw?&kCPmCnx2@RZHf#42WD2~D2zJcGaN1>V|oATGvpmBUN#XEwZ5 z-cto2%@w|q-|~h0nz%@u;fdYd-BI8VV8nG@Xf*h|PzVHehhrH0zPt>&PAnFKlV$Sh z)YMcB;Q90CVV>7ua;ShN&fzJ8Ut7x{2jkgZlb`GdyjRtpytKH&_lX}!$Yh8og%Cv{ z#E4P~)oO90P(WH1F7!-kS==ZTP_33f;v+(cV#f>wJiHc@vVi7TVAC@-$6`_zP+l~z z?b$qTKH#Wb#dYbKN9`()n-6e2JH(Sx%A%AK*L4|LTSN2_>8G$PM%LDFT^A`OQp%vP zPTt3?q1oq)48+<NSBd8R=02n5oG;SPnp5S4`z*whLWsN&0;LqAi;IyW{Ty9f#PdAg z{J}Qg$upXZks|#xn$f(c^(T=c{d`(~65_>u(<-IlbT$VH%R(vDX?lMK0-o0F?aN-F zVWEcl^Qum7U-pWsTMgA0@BB^;EV3iIKj@*~_W#Rs|3iWP`@xI~A+QaD*g3mxcesY( zum8~VPM+f#XzjsxPCS}7OpbrtcLVXVv0R8Jg%CSJ2x74q^-^hIk2Xpr;_<lefgQht zPTpa*G_Xexv(da;+1mqq^j7wEh$p3#Who`Pu2Y|%r)`>%BHN}(V}71gD&>z_xnl+b z-Wz=$N12f#9cA)%IGUGF-XtS)ks>oPM?Q5k#FIjZvJm1((=<|<47Ez7uh_O}Qma%* zq|^S09SI?V!a8|LJ;Te-Dma`k*1_b(jS5;anm4Scxj*)>uh@*tasQKt=*i&_PXN4n z^(r`GH5v_?$Hyes*NHuPgn0cL0A-rEr4shs97EYG$z;+u`rV0%iO`Yl4DZ7+*Q)DW z`|}a;)(NjYWb$Ub#NW9&68gn>^$+jas{g|J;R-e9#IvJXj&H7h$CsI#q*LiLykJY) z+uJL0dT4eWheo4;<2ZPp=Pw}=i3GZ?6OYIJ*X~`vemxj{zp%^53+?6m`}-HV291x8 w_q|qKCZ6bSad2=j(8YFaY;2&5@@3)u3tzAnL|D+P4gdfE07*qoM6N<$f>&NT@Bjb+
literal 0 HcmV?d00001