diff --git a/lib/vmpooler/api.rb b/lib/vmpooler/api.rb index 62e57f0..e0e29dd 100644 --- a/lib/vmpooler/api.rb +++ b/lib/vmpooler/api.rb @@ -168,6 +168,47 @@ module Vmpooler JSON.pretty_generate(result) end + get '/status/?' do + content_type :json + + result = {} + clone_times = [] + + result['capacity_current'] = 0 + result['capacity_total'] = 0 + + result['status'] = 1 + + $config[:pools].each do |pool| + pool['capacity_current'] = $redis.scard( 'vmpooler__ready__' + pool['name'] ).to_i + + result['capacity_current'] += pool['capacity_current'] + result['capacity_total'] += pool['size'].to_i + + if ( pool['capacity_current'] == 0 ) + result['empty'] ||= [] + result['empty'].push( pool['name'] ) + end + + $redis.smembers( 'vmpooler__ready__'+pool['name'] ).each do |vm| + clone_time = $redis.hget( 'vmpooler__vm__'+vm, 'clone_time' ) + clone_times.push( clone_time ) if clone_time.to_f > 0 + end + end + + if ( result['empty'] ) + result['status'] = 0 + end + + if ( clone_times.any? ) + result['clone_average'] = clone_times.map( &:to_f ).reduce( :+ ) / clone_times.size + end + + result['capacity_perecent'] = ( result['capacity_current'].to_f / result['capacity_total'].to_f ) * 100.0 + + JSON.pretty_generate(Hash[result.sort_by{|k,v| k}]) + end + get '/vm/?' do content_type :json diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index de8eb88..07762fe 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -230,6 +230,8 @@ module Vmpooler ).wait_for_completion finish = '%.2f' % (Time.now-start) + $redis.hset('vmpooler__vm__'+vm['hostname'], 'clone_time', finish) + $logger.log('s', "[+] [#{vm['template']}] '#{vm['hostname']}' cloned from '#{vm['template']}' in #{finish} seconds") rescue $logger.log('s', "[!] [#{vm['template']}] '#{vm['hostname']}' clone appears to have failed")