[PATCH conductor] BZ#743377 Show deployable status in the pretty view

tsedovic at redhat.com tsedovic at redhat.com
Thu Feb 9 12:52:24 UTC 2012


From: Tomas Sedovic <tomas at sedovic.cz>

https://bugzilla.redhat.com/show_bug.cgi?id=743377

The deployment cards on the Monitor page now display a graphical status (with a
textual fallback for text-only browsers) of the deployment.

This makes it easy for the user to determine the status of the deployments at a
glance. For more detailed information (e.g. the statuses of individual
instances), the user still needs to drill down into the deployment in question.
---
 src/app/models/deployment.rb                     |   26 ++++++++----------
 src/app/stylesheets/layout.scss                  |   31 ++++++++++++++++++++++
 src/app/views/deployments/_list.html.haml        |    4 +-
 src/app/views/deployments/_pretty_view.html.haml |    2 +
 src/app/views/pools/_deployments.html.haml       |    3 ++
 src/config/locales/en.yml                        |    4 +++
 6 files changed, 54 insertions(+), 16 deletions(-)

diff --git a/src/app/models/deployment.rb b/src/app/models/deployment.rb
index 043b2b4..9593645 100644
--- a/src/app/models/deployment.rb
+++ b/src/app/models/deployment.rb
@@ -415,6 +415,16 @@ class Deployment < ActiveRecord::Base
     end
   end
 
+  def status
+    if instances.all? {|i| i.state == Instance::STATE_RUNNING}
+      :running
+    elsif instances.all? {|i| [Instance::STATE_STOPPED, Instance::STATE_ERROR, Instance::STATE_CREATE_FAILED].include? i.state}
+      :stopped
+    else
+      :pending
+    end
+  end
+
   # A deployment "starts" when _all_ instances begin to run
   def start_time
     if instances.deployed.count == instances.count && ev = events.find_by_status_code(:all_running)
@@ -437,7 +447,8 @@ class Deployment < ActiveRecord::Base
   def as_json(options={})
     json = super(options).merge({
       :deployable_xml_name => deployable_xml.name,
-      :deployment_state => deployment_state,
+      :status => status,
+      :status_description => I18n.t("deployments.status.#{status}"),
       :instances_count => instances.count,
       :failed_instances_count => failed_instances.count,
       :instances_count_text => I18n.t('instances.instances', :count => instances.count.to_i),
@@ -461,19 +472,6 @@ class Deployment < ActiveRecord::Base
     json
   end
 
-  def deployment_state
-    unless instances.empty?
-      return instances.first.state if not instances.empty? and instances.length == 1
-      oracle = instances.first.state
-      instances.each do |i|
-        return STATE_MIXED if i.state != oracle
-      end
-      return oracle
-    else
-      return
-    end
-  end
-
   def failed_instances
     instances.select {|instance| instance.failed?}
   end
diff --git a/src/app/stylesheets/layout.scss b/src/app/stylesheets/layout.scss
index 9f385fe..dc51b67 100644
--- a/src/app/stylesheets/layout.scss
+++ b/src/app/stylesheets/layout.scss
@@ -2254,6 +2254,21 @@ ul.deployment-array.large{
 
     }
 
+    .status {
+      text-indent: -3000px;
+      display: block;
+      background: url('../../images/build_status.png') no-repeat;
+      width: 18px;
+      height: 18px;
+      position: absolute;
+      bottom: 5px;
+      right: 5px;
+
+      &.stopped { background-position: 0px center; }
+      &.pending { background-position: -20px center; }
+      &.running { background-position: -40px center; }
+    }
+
     dl.statistics{
       margin-top: 8px;
       ul{list-style: none; margin-left: 12px;}
@@ -2345,6 +2360,7 @@ ul.deployment-array.small{
   height: 100%;
 
   li.deployment{
+    position: relative;
     display: table-cell;
     float: left;
     border: 1px solid #ccc;
@@ -2362,6 +2378,21 @@ ul.deployment-array.small{
       margin-bottom: 14px;
     }
 
+    .status {
+      text-indent: -3000px;
+      display: block;
+      background: url('../../images/build_status.png') no-repeat;
+      width: 18px;
+      height: 18px;
+      position: absolute;
+      bottom: 5px;
+      right: 5px;
+
+      &.stopped { background-position: 0px center; }
+      &.pending { background-position: -20px center; }
+      &.running { background-position: -40px center; }
+    }
+
     dl.statistics{
       ul{list-style: none;}
       li{@include display_inline_block;}
diff --git a/src/app/views/deployments/_list.html.haml b/src/app/views/deployments/_list.html.haml
index 75b7f3d..bbf7b9b 100644
--- a/src/app/views/deployments/_list.html.haml
+++ b/src/app/views/deployments/_list.html.haml
@@ -35,7 +35,7 @@
     %td= link_to(deployment.name, deployment_path(deployment, :view => :filter))
     %td= deployment.created_at
     %td= deployment.deployable_xml.name
-    %td= deployment.deployment_state
+    %td= deployment.status
     %td{:class => 'center'}= deployment.instances.count
     %td= link_to deployment.pool.name, pool_path(deployment.pool, :view => :filter)
     %td= owner_name(deployment)
@@ -59,7 +59,7 @@
       <td><a href="#{deployment_path('replace_id', :view => :filter).sub('replace_id', '${id}')}">${name}</a></td>
       <td>${created_at}</td>
       <td>${deployable_xml_name}</td>
-      <td>${deployment_state}</td>
+      <td>${status}</td>
       <td class="center">${instances_count}</td>
       <td><a href="#{pool_path('replace_id', :view => :filter).sub('replace_id', '${pool.id}')}">${pool.name}</a></td>
       <td>${owner}</td>
diff --git a/src/app/views/deployments/_pretty_view.html.haml b/src/app/views/deployments/_pretty_view.html.haml
index 97c586e..f29e8d4 100644
--- a/src/app/views/deployments/_pretty_view.html.haml
+++ b/src/app/views/deployments/_pretty_view.html.haml
@@ -5,6 +5,7 @@
         %li.deployment
           %h3.name
             = link_to deployment.name, deployment_path(deployment)
+          %span{ :class => "status #{deployment.status}", :title => deployment.as_json[:status_description]}
           %dl.statistics
             %ul
               %li.uptime
@@ -32,6 +33,7 @@
       <h3 class="name">
         <a href="#{deployment_path('replace_id').sub('replace_id', '${id}')}">${name}</a>
       </h3>
+      <span class="status ${status}" title="${status_description}">${status}</span>
       <dl class="statistics">
         <ul>
           <li class="uptime">
diff --git a/src/app/views/pools/_deployments.html.haml b/src/app/views/pools/_deployments.html.haml
index 0aa6143..b4aed1d 100644
--- a/src/app/views/pools/_deployments.html.haml
+++ b/src/app/views/pools/_deployments.html.haml
@@ -5,6 +5,8 @@
         %li.deployment
           %h3.name
             = link_to deployment.name, deployment_path(deployment)
+          %span{ :class => "status #{deployment.status}", :title => deployment.as_json[:status_description]}
+            = deployment.status
           %dl.statistics
             %ul
               %li.right
@@ -21,6 +23,7 @@
       <h3 class="name">
         <a href="#{deployment_path('replace_id').sub('replace_id', '${id}')}">${name}</a>
       </h3>
+      <span class="status ${status}" title="${status_description}">${status}</span>
       <dl class="statistics">
         <ul>
           <li class="right">
diff --git a/src/config/locales/en.yml b/src/config/locales/en.yml
index 822962d..a30fc28 100644
--- a/src/config/locales/en.yml
+++ b/src/config/locales/en.yml
@@ -174,6 +174,10 @@ en:
     confirm_delete: "Are you sure you want to delete this deployment?"
     list_of_events: List of deployment events
     state: State
+    status:
+      running: All instances are running
+      pending: Some (but not all) instances are running
+      stopped: No instances are currently running
     launch_time_params:
       configure_launch_time_params: "Configure launch-time parameters for your deployment:"
       finalize: Finalize
-- 
1.7.6.5




More information about the aeolus-devel mailing list