From 31fe71dc34a99d541d63a89093f549173e4ddbbf Mon Sep 17 00:00:00 2001 From: Daniel Molina Date: Tue, 16 Aug 2011 15:16:45 +0200 Subject: [PATCH] feature #720: Add resource filtering --- src/acct/watch_client.rb | 75 ++++++++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 23 deletions(-) diff --git a/src/acct/watch_client.rb b/src/acct/watch_client.rb index d24af7bf4b..8e0618eec4 100644 --- a/src/acct/watch_client.rb +++ b/src/acct/watch_client.rb @@ -6,7 +6,7 @@ module OneWatchClient def resource_monitoring(id, monitoring_resources=[], filter={}) # Retrieve Sequel resource - rsql = pool[id] + rsql = filter_resource(id, filter) return nil if rsql.nil? # By default show all the available monitoring resources. @@ -45,6 +45,7 @@ module OneWatchClient def total_monitoring(monitoring_resources=[], filter={}) # Retrieve Sequel resource rsql = filter_pool(filter) + return nil if rsql.nil? # By default show all the available monitoring resources. # If a set of monitoring resources is specified @@ -117,18 +118,6 @@ module OneWatchClient a end - - protected - - def filter_pool(filter) - if filter[:uid] - pool.filter(:uid=>filter[:uid]) - elsif filter[:gid] - pool.filter(:gid=>filter[:gid]) - else - pool - end - end end class HostWatchClient < WatchClient @@ -136,11 +125,6 @@ module OneWatchClient WatchHelper::Host end - def filter_pool(filter) - hosts = super(filter) - hosts.join(WatchHelper::HostSample, :host_id=>:id) - end - def allowed_samples WatchHelper::HOST_SAMPLE end @@ -156,6 +140,31 @@ module OneWatchClient def error(pool) pool.filter(:state=>3) end + + def filter_pool(filter) + if filter[:uid] + filter[:uid]==0 ? (hosts = pool) : (return nil) + elsif filter[:gid] + filter[:uid]==0 ? (hosts = pool) : (return nil) + else + hosts = pool + end + + hosts.join(WatchHelper::HostSample, :host_id=>:id) + end + + def filter_resource(id, filter) + rsql = pool[id] + return nil if rsql.nil? + + if filter[:uid] + filter[:uid]==0 ? rsql : nil + elsif filter[:gid] + filter[:gid]==0 ? rsql : nil + else + rsql + end + end end class VmWatchClient < WatchClient @@ -163,11 +172,6 @@ module OneWatchClient WatchHelper::Vm end - def filter_pool(filter) - vms = super(filter) - vms.join(WatchHelper::VmSample, :vm_id=>:id) - end - def allowed_samples WatchHelper::VM_SAMPLE end @@ -183,5 +187,30 @@ module OneWatchClient def error(pool) pool.filter(:state=>7) end + + def filter_pool(filter) + if filter[:uid] + vms = pool.filter(:uid=>filter[:uid]) + elsif filter[:gid] + vms = pool.filter(:gid=>filter[:gid]) + else + vms = pool + end + + vms.join(WatchHelper::VmSample, :vm_id=>:id) + end + + def filter_resource(id, filter) + rsql = pool[id] + return nil if rsql.nil? + + if filter[:uid] + filter[:uid]==rsql.uid ? rsql : nil + elsif filter[:gid] + filter[:gid]==rsql.gid ? rsql : nil + else + rsql + end + end end end \ No newline at end of file