[Ovirt-devel] [PATCH server] UI for accumulated uptime for VMs.
Scott Seago
sseago at redhat.com
Mon Jun 29 13:49:29 UTC 2009
There's still a problem with this working on the cloud side, but that can be resolved in a subsequent commit.
---
src/app/controllers/pool_controller.rb | 2 +-
src/app/controllers/resources_controller.rb | 7 ++++++-
src/app/controllers/smart_pools_controller.rb | 5 ++---
src/app/helpers/application_helper.rb | 14 ++++++++++++++
src/app/models/vm.rb | 5 +++++
src/app/views/cloud/instance/_list.rhtml | 3 +++
src/app/views/vm/_grid.rhtml | 1 +
src/app/views/vm/show.rhtml | 4 +++-
8 files changed, 35 insertions(+), 6 deletions(-)
diff --git a/src/app/controllers/pool_controller.rb b/src/app/controllers/pool_controller.rb
index 74a958c..44cb780 100644
--- a/src/app/controllers/pool_controller.rb
+++ b/src/app/controllers/pool_controller.rb
@@ -96,7 +96,7 @@ class PoolController < ApplicationController
def vms_json(args)
attr_list = [:id, :description, :uuid,
:num_vcpus_allocated, :memory_allocated_in_mb,
- :vnic_mac_addr, :state, :id]
+ :vnic_mac_addr, :state, :calc_uptime, :id]
if (@pool.is_a? VmResourcePool) and @pool.get_hardware_pool.can_view(@user)
attr_list.insert(3, [:host, :hostname])
end
diff --git a/src/app/controllers/resources_controller.rb b/src/app/controllers/resources_controller.rb
index 9d1074a..7188db8 100644
--- a/src/app/controllers/resources_controller.rb
+++ b/src/app/controllers/resources_controller.rb
@@ -63,7 +63,12 @@ class ResourcesController < PoolController
def vms_json
svc_show(params[:id])
- super(:full_items => @pool.vms, :find_opts => {}, :include_pool => :true)
+ super(:full_items => @pool.vms, :find_opts => {:select => "*, case
+ when state='running' then
+ (cast(total_uptime || ' sec' as interval) +
+ (now() - total_uptime_timestamp))
+ else cast(total_uptime || ' sec' as interval)
+ end as calc_uptime"}, :include_pool => :true)
end
def delete
diff --git a/src/app/controllers/smart_pools_controller.rb b/src/app/controllers/smart_pools_controller.rb
index 8762ac0..b355f4b 100644
--- a/src/app/controllers/smart_pools_controller.rb
+++ b/src/app/controllers/smart_pools_controller.rb
@@ -76,11 +76,10 @@ class SmartPoolsController < PoolController
end
- def items_json_internal(item_class, item_assoc)
+ def items_json_internal(item_class, item_assoc, find_opts = {})
if params[:id]
svc_show(params[:id])
full_items = @pool.send(item_assoc)
- find_opts = {}
include_pool = false
else
# FIXME: no permissions or usage checks here yet
@@ -93,7 +92,7 @@ class SmartPoolsController < PoolController
else
conditions = ["#{item_class.table_name}.id not in (?)", pool_items]
end
- find_opts = {:conditions => conditions}
+ find_opts[:conditions] = conditions
include_pool = true
end
{ :full_items => full_items, :find_opts => find_opts, :include_pool => include_pool}
diff --git a/src/app/helpers/application_helper.rb b/src/app/helpers/application_helper.rb
index 0178ad0..0c6562e 100644
--- a/src/app/helpers/application_helper.rb
+++ b/src/app/helpers/application_helper.rb
@@ -171,4 +171,18 @@ module ApplicationHelper
def flash_path(source)
compute_public_path(source, 'swfs', 'swf')
end
+
+ def number_to_duration(input_num)
+ input_int = input_num.to_i
+ hours_to_seconds = [input_int/3600 % 24,
+ input_int/60 % 60,
+ input_int % 60].map{|t| t.to_s.rjust(2,'0')}.join(':')
+ days = input_int / 86400
+ day_str = ""
+ if days > 0
+ day_label = (days > 1) ? "days" : "day"
+ day_str = "#{days} #{day_label} "
+ end
+ day_str + hours_to_seconds
+ end
end
diff --git a/src/app/models/vm.rb b/src/app/models/vm.rb
index 1a57a14..355ce6d 100644
--- a/src/app/models/vm.rb
+++ b/src/app/models/vm.rb
@@ -421,6 +421,11 @@ class Vm < ActiveRecord::Base
:conditions => ["privileges.name=:priv
and permissions.uid=:user",
{ :user => user, :priv => priv }],
+ :select => "*, case when state='running' then
+ (cast(total_uptime || ' sec' as interval) +
+ (now() - total_uptime_timestamp))
+ else cast(total_uptime || ' sec' as interval)
+ end as calc_uptime",
:per_page => 5,
:page => page,
:order => order)
diff --git a/src/app/views/cloud/instance/_list.rhtml b/src/app/views/cloud/instance/_list.rhtml
index 1fa46de..bed7b3b 100644
--- a/src/app/views/cloud/instance/_list.rhtml
+++ b/src/app/views/cloud/instance/_list.rhtml
@@ -14,6 +14,9 @@
<th scope="col" class="sortable <%= sort_td_class_helper "state" %>">
<div><%= sort_link_helper "State", "state" %></div>
</th>
+ <th scope="col" class="sortable <%= sort_td_class_helper "calc_uptime" %>">
+ <div><%= sort_link_helper "Total Run Time", "calc_uptime" %></div>
+ </th>
<th scope="col"><div>IP Address</div></th>
<th scope="col"><div>Load</div></th>
</thead>
diff --git a/src/app/views/vm/_grid.rhtml b/src/app/views/vm/_grid.rhtml
index b137de6..a110011 100644
--- a/src/app/views/vm/_grid.rhtml
+++ b/src/app/views/vm/_grid.rhtml
@@ -36,6 +36,7 @@
{display: 'Memory (MB)', name : 'memory_allocated', width : 60, sortable : true, align: 'right'},
{display: 'vNIC Mac Addr', name : 'vnic_mac_addr', width : 60, sortable : true, align: 'right'},
{display: 'State', name : 'state', width : 50, sortable : true, align: 'right'},
+ {display: 'Total Run Time', name : 'calc_uptime', width : 50, align: 'right'},
{display: 'Load', name : 'load', width: 180, sortable : false, align: 'left', process: <%= table_id %>_load_widget }
],
sortname: "description",
diff --git a/src/app/views/vm/show.rhtml b/src/app/views/vm/show.rhtml
index 0f70da8..ffe5055 100644
--- a/src/app/views/vm/show.rhtml
+++ b/src/app/views/vm/show.rhtml
@@ -111,6 +111,7 @@
Provisioning source:<br/>
State:<br/>
Pending State:<br/>
+ Total Run Time:<br/>
</div>
<div class="selection_value">
<%=h @vm.uuid %><br/>
@@ -128,7 +129,8 @@
<%unless @vm.needs_restart.nil? or @vm.needs_restart == 0 -%>
(needs restart)
<% end -%><br/>
- <%=h @vm.get_pending_state %>
+ <%=h @vm.get_pending_state %><br/>
+ <%=h number_to_duration(@vm.get_calculated_uptime) %>
</div>
<!-- FIXME: show storage volumes
--
1.6.0.6
More information about the ovirt-devel
mailing list