From a02f63eadc43543256fa1a1fb4767d123f468ab6 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Wed, 19 Feb 2014 14:08:46 -0800 Subject: [PATCH 1/4] Changing project name to 'vmpooler' All instances of 'vmware-host-pooler' and 'vmware_host_pool' changed to 'vmpooler'. --- LICENSE | 2 +- lib/logger.rb | 2 +- lib/vsphere_helper.rb | 2 +- vmware-host-pooler | 100 ++++++++++++++++++++--------------------- vmware-host-pooler-api | 36 +++++++-------- 5 files changed, 71 insertions(+), 71 deletions(-) diff --git a/LICENSE b/LICENSE index c589db9..a1d1454 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ - vmware-host-pooler + vmpooler Copyright (C) 2014 Scott Schneider diff --git a/lib/logger.rb b/lib/logger.rb index 4ad90db..2ec8918 100755 --- a/lib/logger.rb +++ b/lib/logger.rb @@ -2,7 +2,7 @@ require 'rubygems' unless defined?(Gem) class Logger def initialize( - f = '/var/log/vmware-host-pooler.log' + f = '/var/log/vmpooler.log' ) @file = f end diff --git a/lib/vsphere_helper.rb b/lib/vsphere_helper.rb index afb52e3..1dfa018 100755 --- a/lib/vsphere_helper.rb +++ b/lib/vsphere_helper.rb @@ -11,7 +11,7 @@ class VsphereHelper Dir.chdir(File.dirname(__FILE__)) - config_file = File.expand_path('../vmware-host-pooler.yaml') + config_file = File.expand_path('../vmpooler.yaml') vsphere = YAML.load_file(config_file)[:vsphere] @connection = RbVmomi::VIM.connect :host => vsphere['server'], diff --git a/vmware-host-pooler b/vmware-host-pooler index 234833f..96c0ffd 100755 --- a/vmware-host-pooler +++ b/vmware-host-pooler @@ -14,7 +14,7 @@ require 'lib/vsphere_helper' Dir.chdir(File.dirname(__FILE__)) # Load the configuration file -config_file = File.expand_path('vmware-host-pooler.yaml') +config_file = File.expand_path('vmpooler.yaml') $config = YAML.load_file(config_file) pools = $config[:pools] @@ -64,18 +64,18 @@ def check_pending_vm vm, pool, timeout rescue end - $redis.smove('vmware_host_pool__pending__'+pool, 'vmware_host_pool__ready__'+pool, vm) + $redis.smove('vmpooler__pending__'+pool, 'vmpooler__ready__'+pool, vm) $logger.log('s', "[>] [#{pool}] '#{vm}' moved to 'ready' queue") end else - clone_stamp = $redis.hget('vmware_host_pool__vm__'+vm, 'clone') + clone_stamp = $redis.hget('vmpooler__vm__'+vm, 'clone') if ( (clone_stamp) and (((Time.now - Time.parse(clone_stamp))/60) > timeout) ) - $redis.smove('vmware_host_pool__pending__'+pool, 'vmware_host_pool__completed__'+pool, vm) + $redis.smove('vmpooler__pending__'+pool, 'vmpooler__completed__'+pool, vm) $logger.log('d', "[!] [#{pool}] '#{vm}' marked as 'failed' after #{timeout} minutes") end @@ -93,18 +93,18 @@ def check_ready_vm vm, pool, ttl (host.runtime.powerState) and (host.runtime.powerState != 'poweredOn') ) - $redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm) + $redis.smove('vmpooler__ready__'+pool, 'vmpooler__completed__'+pool, vm) $logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off or dead") else if ((((Time.now - host.runtime.bootTime)/60).to_s[/^\d+\.\d{1}/].to_f) > ttl) - $redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm) + $redis.smove('vmpooler__ready__'+pool, 'vmpooler__completed__'+pool, vm) $logger.log('d', "[!] [#{pool}] '#{vm}' reached end of TTL after #{ttl} minutes") end end else - $redis.srem('vmware_host_pool__ready__'+pool, vm) + $redis.srem('vmpooler__ready__'+pool, vm) $logger.log('s', "[!] [#{pool}] '#{vm}' not found in vCenter inventory") end @@ -120,7 +120,7 @@ def check_running_vm vm, pool, ttl (host.runtime) and (host.runtime.powerState != 'poweredOn') ) - $redis.smove('vmware_host_pool__running__'+pool, 'vmware_host_pool__completed__'+pool, vm) + $redis.smove('vmpooler__running__'+pool, 'vmpooler__completed__'+pool, vm) $logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off or dead") else @@ -129,7 +129,7 @@ def check_running_vm vm, pool, ttl (host.runtime.bootTime) ((((Time.now - host.runtime.bootTime)/60).to_s[/^\d+\.\d{1}/].to_f) > ttl) ) - $redis.smove('vmware_host_pool__running__'+pool, 'vmware_host_pool__completed__'+pool, vm) + $redis.smove('vmpooler__running__'+pool, 'vmpooler__completed__'+pool, vm) $logger.log('d', "[!] [#{pool}] '#{vm}' reached end of TTL after #{ttl} minutes") end @@ -163,8 +163,8 @@ def clone_vm template, pool, folder, datastore vm['hostname'] = o[rand(25)]+(0...14).map{o[rand(o.length)]}.join # Add VM to Redis inventory ('pending' pool) - $redis.sadd('vmware_host_pool__pending__'+vm['template'], vm['hostname']) - $redis.hset('vmware_host_pool__vm__'+vm['hostname'], 'clone', Time.now) + $redis.sadd('vmpooler__pending__'+vm['template'], vm['hostname']) + $redis.hset('vmpooler__vm__'+vm['hostname'], 'clone', Time.now) # Annotate with creation time, origin template, etc. configSpec = RbVmomi::VIM.VirtualMachineConfigSpec( @@ -206,10 +206,10 @@ def clone_vm template, pool, folder, datastore $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") - $redis.srem('vmware_host_pool__pending__'+vm['template'], vm['hostname']) + $redis.srem('vmpooler__pending__'+vm['template'], vm['hostname']) end - $redis.decr('vmware_host_pool__tasks__clone') + $redis.decr('vmpooler__tasks__clone') begin $graphite.log("vcloud.clone.#{vm['template']}", finish) if defined? $graphite @@ -221,9 +221,9 @@ end # Destroy a VM def destroy_vm vm, pool Thread.new { - $redis.srem('vmware_host_pool__completed__'+pool, vm) - $redis.hdel('vmware_host_pool__active__'+pool, vm) - $redis.del('vmware_host_pool__vm__'+vm) + $redis.srem('vmpooler__completed__'+pool, vm) + $redis.hdel('vmpooler__active__'+pool, vm) + $redis.del('vmpooler__vm__'+vm) host = $vsphere[pool].find_vm(vm) || $vsphere[pool].find_vm_heavy(vm)[vm] @@ -264,13 +264,13 @@ def check_pool pool base.vm.each do |vm| if ( - (! $redis.sismember('vmware_host_pool__running__'+pool['name'], vm['name'])) and - (! $redis.sismember('vmware_host_pool__ready__'+pool['name'], vm['name'])) and - (! $redis.sismember('vmware_host_pool__pending__'+pool['name'], vm['name'])) and - (! $redis.sismember('vmware_host_pool__completed__'+pool['name'], vm['name'])) and - (! $redis.sismember('vmware_host_pool__discovered__'+pool['name'], vm['name'])) + (! $redis.sismember('vmpooler__running__'+pool['name'], vm['name'])) and + (! $redis.sismember('vmpooler__ready__'+pool['name'], vm['name'])) and + (! $redis.sismember('vmpooler__pending__'+pool['name'], vm['name'])) and + (! $redis.sismember('vmpooler__completed__'+pool['name'], vm['name'])) and + (! $redis.sismember('vmpooler__discovered__'+pool['name'], vm['name'])) ) - $redis.sadd('vmware_host_pool__discovered__'+pool['name'], vm['name']) + $redis.sadd('vmpooler__discovered__'+pool['name'], vm['name']) $logger.log('s', "[?] [#{pool['name']}] '#{vm['name']}' added to 'discovered' queue") end @@ -281,7 +281,7 @@ def check_pool pool end # RUNNING - $redis.smembers('vmware_host_pool__running__'+pool['name']).each do |vm| + $redis.smembers('vmpooler__running__'+pool['name']).each do |vm| if (inventory[vm]) if (pool['running_ttl']) begin @@ -298,7 +298,7 @@ def check_pool pool end # READY - $redis.smembers('vmware_host_pool__ready__'+pool['name']).each do |vm| + $redis.smembers('vmpooler__ready__'+pool['name']).each do |vm| if (inventory[vm]) if (pool['ready_ttl']) begin @@ -310,7 +310,7 @@ def check_pool pool end # PENDING - $redis.smembers('vmware_host_pool__pending__'+pool['name']).each do |vm| + $redis.smembers('vmpooler__pending__'+pool['name']).each do |vm| pool['timeout'] ||= 15 if (inventory[vm]) @@ -322,47 +322,47 @@ def check_pool pool end # COMPLETED - $redis.smembers('vmware_host_pool__completed__'+pool['name']).each do |vm| + $redis.smembers('vmpooler__completed__'+pool['name']).each do |vm| if (inventory[vm]) begin destroy_vm(vm, pool['name']) rescue $logger.log('s', "[!] [#{pool['name']}] '#{vm}' destroy appears to have failed") - $redis.srem('vmware_host_pool__completed__'+pool['name'], vm) - $redis.hdel('vmware_host_pool__active__'+pool['name'], vm) - $redis.del('vmware_host_pool__vm__'+vm) + $redis.srem('vmpooler__completed__'+pool['name'], vm) + $redis.hdel('vmpooler__active__'+pool['name'], vm) + $redis.del('vmpooler__vm__'+vm) end else $logger.log('s', "[!] [#{pool['name']}] '#{vm}' not found in inventory, removed from 'completed' queue") - $redis.srem('vmware_host_pool__completed__'+pool['name'], vm) - $redis.hdel('vmware_host_pool__active__'+pool['name'], vm) - $redis.del('vmware_host_pool__vm__'+vm) + $redis.srem('vmpooler__completed__'+pool['name'], vm) + $redis.hdel('vmpooler__active__'+pool['name'], vm) + $redis.del('vmpooler__vm__'+vm) end end # DISCOVERED - $redis.smembers('vmware_host_pool__discovered__'+pool['name']).each do |vm| + $redis.smembers('vmpooler__discovered__'+pool['name']).each do |vm| ['pending', 'ready', 'running', 'completed'].each do |queue| - if ($redis.sismember('vmware_host_pool__'+queue+'__'+pool['name'], vm)) + if ($redis.sismember('vmpooler__'+queue+'__'+pool['name'], vm)) $logger.log('d', "[!] [#{pool['name']}] '#{vm}' found in '#{queue}', removed from 'discovered' queue") - $redis.srem('vmware_host_pool__discovered__'+pool['name'], vm) + $redis.srem('vmpooler__discovered__'+pool['name'], vm) end end - if ($redis.sismember('vmware_host_pool__discovered__'+pool['name'], vm)) - $redis.smove('vmware_host_pool__discovered__'+pool['name'], 'vmware_host_pool__completed__'+pool['name'], vm) + if ($redis.sismember('vmpooler__discovered__'+pool['name'], vm)) + $redis.smove('vmpooler__discovered__'+pool['name'], 'vmpooler__completed__'+pool['name'], vm) end end # LONG-RUNNING - $redis.smembers('vmware_host_pool__running__'+pool['name']).each do |vm| - if ($redis.hget('vmware_host_pool__active__'+pool['name'], vm)) - running = (Time.now - Time.parse($redis.hget('vmware_host_pool__active__'+pool['name'], vm)))/60/60 + $redis.smembers('vmpooler__running__'+pool['name']).each do |vm| + if ($redis.hget('vmpooler__active__'+pool['name'], vm)) + running = (Time.now - Time.parse($redis.hget('vmpooler__active__'+pool['name'], vm)))/60/60 if ( ($config[:config]['vm_lifetime'] > 0) and (running > $config[:config]['vm_lifetime']) ) - $redis.smove('vmware_host_pool__running__'+pool['name'], 'vmware_host_pool__completed__'+pool['name'], vm) + $redis.smove('vmpooler__running__'+pool['name'], 'vmpooler__completed__'+pool['name'], vm) $logger.log('d', "[!] [#{pool['name']}] '#{vm}' reached end of TTL after #{$config[:config]['vm_lifetime']} hours") end @@ -370,13 +370,13 @@ def check_pool pool end # REPOPULATE - total = $redis.scard('vmware_host_pool__ready__'+pool['name']) + - $redis.scard('vmware_host_pool__pending__'+pool['name']) + total = $redis.scard('vmpooler__ready__'+pool['name']) + + $redis.scard('vmpooler__pending__'+pool['name']) begin if (defined? $graphite) - $graphite.log('vcloud.ready.'+pool['name'], $redis.scard('vmware_host_pool__ready__'+pool['name'])) - $graphite.log('vcloud.running.'+pool['name'], $redis.scard('vmware_host_pool__running__'+pool['name'])) + $graphite.log('vcloud.ready.'+pool['name'], $redis.scard('vmpooler__ready__'+pool['name'])) + $graphite.log('vcloud.running.'+pool['name'], $redis.scard('vmpooler__running__'+pool['name'])) end rescue end @@ -384,9 +384,9 @@ def check_pool pool if (total < pool['size']) (1..(pool['size'] - total)).each { |i| - if ($redis.get('vmware_host_pool__tasks__clone').to_i < $config[:config]['task_limit']) + if ($redis.get('vmpooler__tasks__clone').to_i < $config[:config]['task_limit']) begin - $redis.incr('vmware_host_pool__tasks__clone') + $redis.incr('vmpooler__tasks__clone') clone_vm( pool['template'], @@ -396,7 +396,7 @@ def check_pool pool ) rescue $logger.log('s', "[!] [#{pool['name']}] clone appears to have failed") - $redis.decr('vmware_host_pool__tasks__clone') + $redis.decr('vmpooler__tasks__clone') end end } @@ -409,10 +409,10 @@ end -$logger.log('d', "starting vmware-host-pooler") +$logger.log('d', "starting vmpooler") # Clear out the tasks manager, as we don't know about any tasks at this point -$redis.set('vmware_host_pool__tasks__clone', 0) +$redis.set('vmpooler__tasks__clone', 0) loop do pools.each do |pool| diff --git a/vmware-host-pooler-api b/vmware-host-pooler-api index 24b7444..689f4f0 100755 --- a/vmware-host-pooler-api +++ b/vmware-host-pooler-api @@ -15,7 +15,7 @@ require 'lib/require_relative' Dir.chdir(File.dirname(__FILE__)) # Load the configuration file -config_file = File.expand_path('vmware-host-pooler.yaml') +config_file = File.expand_path('vmpooler.yaml') $config = YAML.load_file(config_file) pools = $config[:pools] @@ -34,7 +34,7 @@ $redis = Redis.new(:host => $config[:redis]['server']) # Sinatra! get '/' do erb :dashboard, locals: { - site_name: $config[:config]['site_name'] || 'vmware-host-pooler', + site_name: $config[:config]['site_name'] || 'vmpooler', } end @@ -48,13 +48,13 @@ get '/dashboard/stats/vcloud/numbers' do result['completed'] = 0 $config[:pools].each do |pool| - result['pending'] += $redis.scard( 'vmware_host_pool__pending__' + pool['name'] ) - result['ready'] += $redis.scard( 'vmware_host_pool__ready__' + pool['name'] ) - result['running'] += $redis.scard( 'vmware_host_pool__running__' + pool['name'] ) - result['completed'] += $redis.scard( 'vmware_host_pool__completed__' + pool['name'] ) + result['pending'] += $redis.scard( 'vmpooler__pending__' + pool['name'] ) + result['ready'] += $redis.scard( 'vmpooler__ready__' + pool['name'] ) + result['running'] += $redis.scard( 'vmpooler__running__' + pool['name'] ) + result['completed'] += $redis.scard( 'vmpooler__completed__' + pool['name'] ) end - result['cloning'] = $redis.get( 'vmware_host_pool__tasks__clone' ) + result['cloning'] = $redis.get( 'vmpooler__tasks__clone' ) result['booting'] = result['pending'].to_i - result['cloning'].to_i result['booting'] = 0 if result['booting'] < 0 result['total'] = result['pending'].to_i + result['ready'].to_i + result['running'].to_i + result['completed'].to_i @@ -69,7 +69,7 @@ get '/dashboard/stats/vcloud/pool' do $config[:pools].each do |pool| result[pool['name']] ||= Hash.new result[pool['name']]['size'] = pool['size'] - result[pool['name']]['ready'] = $redis.scard( 'vmware_host_pool__ready__' + pool['name'] ) + result[pool['name']]['ready'] = $redis.scard( 'vmpooler__ready__' + pool['name'] ) end if ( params[:history] ) @@ -106,7 +106,7 @@ get '/dashboard/stats/vcloud/pool' do else $config[:pools].each do |pool| result[pool['name']] ||= Hash.new - result[pool['name']]['history'] = [ $redis.scard( 'vmware_host_pool__ready__' + pool['name'] ) ] + result[pool['name']]['history'] = [ $redis.scard( 'vmpooler__ready__' + pool['name'] ) ] end end end @@ -119,7 +119,7 @@ get '/dashboard/stats/vcloud/running' do result = Hash.new $config[:pools].each do |pool| - running = $redis.scard( 'vmware_host_pool__running__' + pool['name'] ) + running = $redis.scard( 'vmpooler__running__' + pool['name'] ) pool['major'] = $1 if pool['name'] =~ /^(\w+)\-/ result[pool['major']] ||= Hash.new @@ -181,7 +181,7 @@ get '/vm/:template' do result = {} result[params[:template]] = {} - result[params[:template]]['hosts'] = $redis.smembers('vmware_host_pool__ready__'+params[:template]) + result[params[:template]]['hosts'] = $redis.smembers('vmpooler__ready__'+params[:template]) JSON.pretty_generate(result) end @@ -192,12 +192,12 @@ post '/vm/:template' do result = {} result[params[:template]] = {} - if ( $redis.scard('vmware_host_pool__ready__'+params[:template]) > 0 ) - vm = $redis.spop('vmware_host_pool__ready__'+params[:template]) + if ( $redis.scard('vmpooler__ready__'+params[:template]) > 0 ) + vm = $redis.spop('vmpooler__ready__'+params[:template]) unless (vm.nil?) - $redis.sadd('vmware_host_pool__running__'+params[:template], vm) - $redis.hset('vmware_host_pool__active__'+params[:template], vm, Time.now) + $redis.sadd('vmpooler__running__'+params[:template], vm) + $redis.hset('vmpooler__active__'+params[:template], vm, Time.now) result[params[:template]]['ok'] = true result[params[:template]]['hostname'] = vm @@ -219,9 +219,9 @@ delete '/vm/:hostname' do result['ok'] = false pools.each do |pool| - if $redis.sismember('vmware_host_pool__running__'+pool['name'], params[:hostname]) - $redis.srem('vmware_host_pool__running__'+pool['name'], params[:hostname]) - $redis.sadd('vmware_host_pool__completed__'+pool['name'], params[:hostname]) + if $redis.sismember('vmpooler__running__'+pool['name'], params[:hostname]) + $redis.srem('vmpooler__running__'+pool['name'], params[:hostname]) + $redis.sadd('vmpooler__completed__'+pool['name'], params[:hostname]) result['ok'] = true end end From aa8f6b03e595ecb46862d4df2529b850325a32a8 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Wed, 19 Feb 2014 14:12:09 -0800 Subject: [PATCH 2/4] Update filenames --- vmware-host-pooler => vmpooler | 0 vmware-host-pooler-api => vmpooler-api | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename vmware-host-pooler => vmpooler (100%) rename vmware-host-pooler-api => vmpooler-api (100%) diff --git a/vmware-host-pooler b/vmpooler similarity index 100% rename from vmware-host-pooler rename to vmpooler diff --git a/vmware-host-pooler-api b/vmpooler-api similarity index 100% rename from vmware-host-pooler-api rename to vmpooler-api From 1af16bcc47d2d823cc399543d0a0d3faa65495d0 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Wed, 19 Feb 2014 14:50:54 -0800 Subject: [PATCH 3/4] Replace the inaccurate term 'vcloud' with 'vmpooler' --- public/lib/stats-vcloud-running.js | 189 ------------------ ...d-numbers.js => stats-vmpooler-numbers.js} | 66 +++--- ...-vcloud-pool.js => stats-vmpooler-pool.js} | 60 +++--- public/lib/stats-vmpooler-running.js | 189 ++++++++++++++++++ views/dashboard.erb | 20 +- vmpooler | 8 +- vmpooler-api | 10 +- 7 files changed, 271 insertions(+), 271 deletions(-) delete mode 100644 public/lib/stats-vcloud-running.js rename public/lib/{stats-vcloud-numbers.js => stats-vmpooler-numbers.js} (75%) rename public/lib/{stats-vcloud-pool.js => stats-vmpooler-pool.js} (67%) create mode 100644 public/lib/stats-vmpooler-running.js diff --git a/public/lib/stats-vcloud-running.js b/public/lib/stats-vcloud-running.js deleted file mode 100644 index d7072fc..0000000 --- a/public/lib/stats-vcloud-running.js +++ /dev/null @@ -1,189 +0,0 @@ -var running_url = '/dashboard/stats/vcloud/running'; -var running_height = 120; - -var colorscale = d3.scale.category20(); -var color = {}; - -var stats_vcloud_running__data = {}; -var stats_vcloud_running__svg = {}; - -var stats_vcloud_running__data__total = 0; - -d3.json( running_url+'?history=1', - - function( stats_vcloud_running__data ) { - - if ( typeof stats_vcloud_running__data[ 'stack' ] === 'undefined' ) { - stats_vcloud_running__data[ 'stack' ] = []; - stats_vcloud_running__data[ 'stack_t' ] = []; - } - - for ( var key in stats_vcloud_running__data ) { - if ( stats_vcloud_running__data[ key ][ 'history' ] ) { - for ( var c = 0; c < stats_vcloud_running__data[ key ][ 'history' ].length; c++ ) { - if ( typeof stats_vcloud_running__data[ 'stack' ][ c ] === 'undefined' ) { - stats_vcloud_running__data[ 'stack' ][ c ] = {}; - } - - stats_vcloud_running__data[ 'stack' ][ c ][ key ] = stats_vcloud_running__data[ key ][ 'history' ][ c ]; - } - } - } - - for ( var c in stats_vcloud_running__data[ 'stack' ] ) { - for ( var n = 0; n < 8; n++ ) { - stats_vcloud_running__data[ 'stack_t' ].push( stats_vcloud_running__data[ 'stack' ][ c ] ); - } - } - - stats_vcloud_running__data[ 'stack' ] = stats_vcloud_running__data[ 'stack_t' ]; - delete stats_vcloud_running__data[ 'stack_t' ]; - - ( function tick() { - setTimeout( function() { - - var stats_vcloud_running__data__live = ( function() { - var stats_vcloud_running__data__live = null; - - $.ajax( { - 'url': running_url, - 'async': false, - 'global': false, - 'dataType': 'json', - 'success': function( data ) { - stats_vcloud_running__data__live = data; - } - } ); - - return stats_vcloud_running__data__live; - } )(); - - var stats_vcloud_running__data__keys = []; - - for ( var key in stats_vcloud_running__data__live ) { - stats_vcloud_running__data__keys.push( key ); - for ( var c = 0; c < Object.keys(stats_vcloud_running__data__keys).length; c++ ) { color[key] = colorscale( c ); } - } - - $( '#stats-vcloud-running' ).empty(); - - var x = d3.scale.linear().domain( [ 0, 500 ] ).range( [ 0, document.getElementById( 'stats-vcloud-running' ).offsetWidth ] ); - var y = d3.scale.linear().domain( [ 0, stats_vcloud_running__data__total ] ).range( [ running_height, 0 ] ); - - var area = d3.svg.area() - .x( function( d, i ) { return x( i ); } ) - .y0( function( d ) { return y( d.y0 ); } ) - .y1( function( d ) { return y( d.y0 + d.y ); } ); - - var path = d3.svg.line() - .x( function( d, i ) { return x( i ); } ) - .y( function( d ) { return y( d.y0 + d.y ); } ); - - var stack = d3.layout.stack() - .values( function( d ) { return d.values; } ); - - if ( typeof stats_vcloud_running__data[ 'stack' ] === 'undefined' ) { - stats_vcloud_running__data[ 'stack' ] = []; - } - - stats_vcloud_running__data[ 'tmp' ] = {}; - - for ( var key in stats_vcloud_running__data__live ) { - stats_vcloud_running__data[ 'tmp' ][ key ] = stats_vcloud_running__data__live[ key ][ 'running' ]; - } - - stats_vcloud_running__data[ 'stack' ].push( stats_vcloud_running__data[ 'tmp' ] ); - - var stats_vcloud_running__data__graph = stack( - stats_vcloud_running__data__keys.sort().map( - function( name ) { - return { - name: name, - values: stats_vcloud_running__data[ 'stack' ].map( function( d ) { - return { y: d[ name ] }; - }) - } - } - ) - ); - - stats_vcloud_running__data__total = d3.max( - stats_vcloud_running__data__graph, function( layer ) { - return d3.max( layer.values, function( d ) { - return d.y0 + d.y; - } ); - } - ); - - var svg = d3.select( '#stats-vcloud-running' ) - .append( 'svg' ) - .attr( 'height', running_height ) - .attr( 'width', '100%' ) - .style( 'margin-top', '15px' ) - .style( 'margin-bottom', '10px' ) - .append( 'g' ); - - var mysvg = svg.selectAll( '#stats-vcloud-running' ) - .data( stats_vcloud_running__data__graph ) - .enter() - .append( 'g' ); - - mysvg.append( 'path' ) - .attr( 'd', function( d ) { return area( d.values ); } ) - .attr( 'clas', 'area' ) - .attr( 'opacity', '0.25' ) - .style( 'fill', function( d ) { return color[ d.name ]; } ); - - mysvg.append( 'path' ) - .attr( 'd', function( d ) { return path( d.values ); } ) - .attr( 'class', 'line' ) - .attr( 'stroke', function( d ) { return '#888'; } ) - .attr( 'stroke-width', '1' ); - - stats_vcloud_running__data__keys.sort().map( - function( key ) { - stats_vcloud_running__svg[ key ] = d3.select( '#stats-vcloud-running' ) - .append( 'svg' ) - .style( 'margin', '0px 0px 0px 0px' ) - .style( 'padding', '0px 10px 10px 10px' ) - .attr( 'width', '130px' ) - .attr( 'height', '12px' ); - - stats_vcloud_running__svg[ key ] - .append( 'rect' ) - .attr( { - 'x': '5', - 'y': '3', - 'width': '10', - 'height': '10', - 'opacity': '0.25', - 'fill': function( d ) { return color[ key ]; } - } ); - - stats_vcloud_running__svg[ key ] - .append( 'text' ) - .text( - ( key ) - ) - .attr( { - 'x': '20', - 'y': '12', - 'font-face': '\'PT Sans\', sans-serif', - 'font-size': '12px', - 'font-weight': 'bold', - 'fill': '#888' - } ); - } - ); - - if ( stats_vcloud_running__data[ 'stack' ].length > 500 ) { - stats_vcloud_running__data[ 'stack' ].shift(); - } - - tick(); - }, 5000 ); - } )(); - - } - -); diff --git a/public/lib/stats-vcloud-numbers.js b/public/lib/stats-vmpooler-numbers.js similarity index 75% rename from public/lib/stats-vcloud-numbers.js rename to public/lib/stats-vmpooler-numbers.js index b13ea1a..87b47e2 100644 --- a/public/lib/stats-vcloud-numbers.js +++ b/public/lib/stats-vmpooler-numbers.js @@ -1,18 +1,18 @@ -var numbers_url = '/dashboard/stats/vcloud/numbers'; +var numbers_url = '/dashboard/stats/vmpooler/numbers'; var numbers_width = 130; var numbers_height = 50; -var stats_vcloud_numbers__data = {}; -var stats_vcloud_numbers__svg = {}; +var stats_vmpooler_numbers__data = {}; +var stats_vmpooler_numbers__svg = {}; d3.json( numbers_url, - function( stats_vcloud_numbers__data ) { + function( stats_vmpooler_numbers__data ) { ( function tick() { setTimeout( function() { - var stats_vcloud_numbers__data__live = ( function() { - var stats_vcloud_numbers__data__live = null; + var stats_vmpooler_numbers__data__live = ( function() { + var stats_vmpooler_numbers__data__live = null; $.ajax( { 'url': numbers_url, @@ -20,23 +20,23 @@ d3.json( numbers_url, 'global': false, 'dataType': 'json', 'success': function( data ) { - stats_vcloud_numbers__data__live = data; + stats_vmpooler_numbers__data__live = data; } } ); - return stats_vcloud_numbers__data__live; + return stats_vmpooler_numbers__data__live; } )(); - $( '#stats-vcloud-numbers' ).empty(); + $( '#stats-vmpooler-numbers' ).empty(); - stats_vcloud_numbers__svg[ 'total' ] = d3.select( '#stats-vcloud-numbers' ) + stats_vmpooler_numbers__svg[ 'total' ] = d3.select( '#stats-vmpooler-numbers' ) .append( 'svg' ) .style( 'margin', '15px 0px 0px 0px' ) .style( 'padding', '0px 10px 20px 10px' ) .attr( 'width', numbers_width + 'px' ) .attr( 'height', numbers_height + 'px' ); - stats_vcloud_numbers__svg[ 'total' ] + stats_vmpooler_numbers__svg[ 'total' ] .append( 'text' ) .text( ( 'total VMs' ) @@ -50,10 +50,10 @@ d3.json( numbers_url, 'fill': '#888' } ); - stats_vcloud_numbers__svg[ 'total' ] + stats_vmpooler_numbers__svg[ 'total' ] .append( 'text' ) .text( - ( stats_vcloud_numbers__data__live[ 'total' ] ) + ( stats_vmpooler_numbers__data__live[ 'total' ] ) ) .attr( { 'x': '0', @@ -65,14 +65,14 @@ d3.json( numbers_url, 'fill': '#444' } ); - stats_vcloud_numbers__svg[ 'ready' ] = d3.select( '#stats-vcloud-numbers' ) + stats_vmpooler_numbers__svg[ 'ready' ] = d3.select( '#stats-vmpooler-numbers' ) .append( 'svg' ) .style( 'margin', '15px 0px 0px 0px' ) .style( 'padding', '0px 10px 20px 10px' ) .attr( 'width', numbers_width + 'px' ) .attr( 'height', numbers_height + 'px' ); - stats_vcloud_numbers__svg[ 'ready' ] + stats_vmpooler_numbers__svg[ 'ready' ] .append( 'text' ) .text( ( 'ready and waiting' ) @@ -86,10 +86,10 @@ d3.json( numbers_url, 'fill': '#888' } ); - stats_vcloud_numbers__svg[ 'ready' ] + stats_vmpooler_numbers__svg[ 'ready' ] .append( 'text' ) .text( - ( stats_vcloud_numbers__data__live[ 'ready' ] ) + ( stats_vmpooler_numbers__data__live[ 'ready' ] ) ) .attr( { 'x': '0', @@ -101,14 +101,14 @@ d3.json( numbers_url, 'fill': '#444' } ); - stats_vcloud_numbers__svg[ 'cloning' ] = d3.select( '#stats-vcloud-numbers' ) + stats_vmpooler_numbers__svg[ 'cloning' ] = d3.select( '#stats-vmpooler-numbers' ) .append( 'svg' ) .style( 'margin', '15px 0px 0px 0px' ) .style( 'padding', '0px 10px 20px 10px' ) .attr( 'width', numbers_width + 'px' ) .attr( 'height', numbers_height + 'px' ); - stats_vcloud_numbers__svg[ 'cloning' ] + stats_vmpooler_numbers__svg[ 'cloning' ] .append( 'text' ) .text( ( 'being cloned' ) @@ -122,10 +122,10 @@ d3.json( numbers_url, 'fill': '#888' } ); - stats_vcloud_numbers__svg[ 'cloning' ] + stats_vmpooler_numbers__svg[ 'cloning' ] .append( 'text' ) .text( - ( stats_vcloud_numbers__data__live[ 'cloning' ] ) + ( stats_vmpooler_numbers__data__live[ 'cloning' ] ) ) .attr( { 'x': '0', @@ -137,14 +137,14 @@ d3.json( numbers_url, 'fill': '#444' } ); - stats_vcloud_numbers__svg[ 'booting' ] = d3.select( '#stats-vcloud-numbers' ) + stats_vmpooler_numbers__svg[ 'booting' ] = d3.select( '#stats-vmpooler-numbers' ) .append( 'svg' ) .style( 'margin', '15px 0px 0px 0px' ) .style( 'padding', '0px 10px 20px 10px' ) .attr( 'width', numbers_width + 'px' ) .attr( 'height', numbers_height + 'px' ); - stats_vcloud_numbers__svg[ 'booting' ] + stats_vmpooler_numbers__svg[ 'booting' ] .append( 'text' ) .text( ( 'booting up' ) @@ -158,10 +158,10 @@ d3.json( numbers_url, 'fill': '#888' } ); - stats_vcloud_numbers__svg[ 'booting' ] + stats_vmpooler_numbers__svg[ 'booting' ] .append( 'text' ) .text( - ( stats_vcloud_numbers__data__live[ 'booting' ] ) + ( stats_vmpooler_numbers__data__live[ 'booting' ] ) ) .attr( { 'x': '0', @@ -179,14 +179,14 @@ d3.json( numbers_url, - stats_vcloud_numbers__svg[ 'running' ] = d3.select( '#stats-vcloud-numbers' ) + stats_vmpooler_numbers__svg[ 'running' ] = d3.select( '#stats-vmpooler-numbers' ) .append( 'svg' ) .style( 'margin', '15px 0px 0px 0px' ) .style( 'padding', '0px 10px 20px 10px' ) .attr( 'width', numbers_width + 'px' ) .attr( 'height', numbers_height + 'px' ); - stats_vcloud_numbers__svg[ 'running' ] + stats_vmpooler_numbers__svg[ 'running' ] .append( 'text' ) .text( ( 'running tests' ) @@ -200,10 +200,10 @@ d3.json( numbers_url, 'fill': '#888' } ); - stats_vcloud_numbers__svg[ 'running' ] + stats_vmpooler_numbers__svg[ 'running' ] .append( 'text' ) .text( - ( stats_vcloud_numbers__data__live[ 'running' ] ) + ( stats_vmpooler_numbers__data__live[ 'running' ] ) ) .attr( { 'x': '0', @@ -215,14 +215,14 @@ d3.json( numbers_url, 'fill': '#444' } ); - stats_vcloud_numbers__svg[ 'completed' ] = d3.select( '#stats-vcloud-numbers' ) + stats_vmpooler_numbers__svg[ 'completed' ] = d3.select( '#stats-vmpooler-numbers' ) .append( 'svg' ) .style( 'margin', '15px 0px 0px 0px' ) .style( 'padding', '0px 10px 20px 10px' ) .attr( 'width', numbers_width + 'px' ) .attr( 'height', numbers_height + 'px' ); - stats_vcloud_numbers__svg[ 'completed' ] + stats_vmpooler_numbers__svg[ 'completed' ] .append( 'text' ) .text( ( 'waiting to die' ) @@ -236,10 +236,10 @@ d3.json( numbers_url, 'fill': '#888' } ); - stats_vcloud_numbers__svg[ 'completed' ] + stats_vmpooler_numbers__svg[ 'completed' ] .append( 'text' ) .text( - ( stats_vcloud_numbers__data__live[ 'completed' ] ) + ( stats_vmpooler_numbers__data__live[ 'completed' ] ) ) .attr( { 'x': '0', diff --git a/public/lib/stats-vcloud-pool.js b/public/lib/stats-vmpooler-pool.js similarity index 67% rename from public/lib/stats-vcloud-pool.js rename to public/lib/stats-vmpooler-pool.js index 1bf5c38..83d343f 100644 --- a/public/lib/stats-vcloud-pool.js +++ b/public/lib/stats-vmpooler-pool.js @@ -1,30 +1,30 @@ -var pool_url = '/dashboard/stats/vcloud/pool'; +var pool_url = '/dashboard/stats/vmpooler/pool'; var pool_width = 130; var pool_height = 80; -var stats_vcloud_pool__data = {}; -var stats_vcloud_pool__svg = {}; +var stats_vmpooler_pool__data = {}; +var stats_vmpooler_pool__svg = {}; d3.json( pool_url+'?history=1', - function( stats_vcloud_pool__data ) { + function( stats_vmpooler_pool__data ) { - var stats_vcloud_pool__data__keys = []; + var stats_vmpooler_pool__data__keys = []; - for ( var key in stats_vcloud_pool__data ) { - stats_vcloud_pool__data__keys.push( key ); + for ( var key in stats_vmpooler_pool__data ) { + stats_vmpooler_pool__data__keys.push( key ); } - stats_vcloud_pool__data__keys.sort().map( + stats_vmpooler_pool__data__keys.sort().map( function( pool ) { - stats_vcloud_pool__data[ pool ][ 'r' ] = stats_vcloud_pool__data[ pool ][ 'history' ]; + stats_vmpooler_pool__data[ pool ][ 'r' ] = stats_vmpooler_pool__data[ pool ][ 'history' ]; } ); ( function tick() { setTimeout( function() { - var stats_vcloud_pool__data__live = ( function() { - var stats_vcloud_pool__data__live = null; + var stats_vmpooler_pool__data__live = ( function() { + var stats_vmpooler_pool__data__live = null; $.ajax( { 'url': pool_url, @@ -32,19 +32,19 @@ d3.json( pool_url+'?history=1', 'global': false, 'dataType': 'json', 'success': function( data ) { - stats_vcloud_pool__data__live = data; + stats_vmpooler_pool__data__live = data; } } ); - return stats_vcloud_pool__data__live; + return stats_vmpooler_pool__data__live; } )(); - $( '#stats-vcloud-pool' ).empty(); + $( '#stats-vmpooler-pool' ).empty(); - stats_vcloud_pool__data__keys.sort().map( + stats_vmpooler_pool__data__keys.sort().map( function( pool ) { var x = d3.scale.linear().domain( [ 0, 500 ] ).range( [ 0, pool_width ] ); - var y = d3.scale.linear().domain( [ parseInt( stats_vcloud_pool__data__live[ pool ][ 'size' ] ), 0 ] ).range( [ 0, pool_height - 15 ] ); + var y = d3.scale.linear().domain( [ parseInt( stats_vmpooler_pool__data__live[ pool ][ 'size' ] ), 0 ] ).range( [ 0, pool_height - 15 ] ); var area = d3.svg.area() .interpolate( 'basis' ) @@ -57,24 +57,24 @@ d3.json( pool_url+'?history=1', .x( function( d, i ) { return x( i ); } ) .y( function( d ) { return y( d ); } ); - stats_vcloud_pool__data[ pool ][ 'r' ].push( parseInt( stats_vcloud_pool__data__live[ pool ][ 'ready' ] ) ); + stats_vmpooler_pool__data[ pool ][ 'r' ].push( parseInt( stats_vmpooler_pool__data__live[ pool ][ 'ready' ] ) ); - var pool_current = stats_vcloud_pool__data[ pool ][ 'r' ].slice( -1 )[ 0 ]; - var pool_size = stats_vcloud_pool__data[ pool ][ 'size' ] + var pool_current = stats_vmpooler_pool__data[ pool ][ 'r' ].slice( -1 )[ 0 ]; + var pool_size = stats_vmpooler_pool__data[ pool ][ 'size' ] var pool_pct = Math.floor( ( pool_current / pool_size ) * 100 ); var statuscolor = '#78a830'; if ( pool_pct < 50 ) { statuscolor = '#f0a800'; } if ( pool_pct < 25 ) { statuscolor = '#d84830'; } - stats_vcloud_pool__svg[ pool ] = d3.select( '#stats-vcloud-pool' ) + stats_vmpooler_pool__svg[ pool ] = d3.select( '#stats-vmpooler-pool' ) .append( 'svg' ) .style( 'margin', '15px 0px 0px 0px' ) .style( 'padding', '0px 10px 10px 10px' ) .attr( 'width', pool_width ) .attr( 'height', pool_height ); - stats_vcloud_pool__svg[ pool ] + stats_vmpooler_pool__svg[ pool ] .append( 'g' ) .attr( 'class', 'x tick' ) .attr( 'transform', 'translate( 0,' + ( pool_height - 15 ) + ')' ) @@ -89,7 +89,7 @@ d3.json( pool_url+'?history=1', .orient( 'bottom' ) ); - stats_vcloud_pool__svg[ pool ] + stats_vmpooler_pool__svg[ pool ] .append( 'text' ) .text( ( pool ) @@ -103,7 +103,7 @@ d3.json( pool_url+'?history=1', 'fill': '#888' } ); - stats_vcloud_pool__svg[ pool ] + stats_vmpooler_pool__svg[ pool ] .append( 'text' ) .text( ( pool_pct + '%' ) @@ -118,7 +118,7 @@ d3.json( pool_url+'?history=1', 'fill': '#888' } ); - stats_vcloud_pool__svg[ pool ] + stats_vmpooler_pool__svg[ pool ] .append( 'text' ) .text( ( '( ' ) + @@ -136,22 +136,22 @@ d3.json( pool_url+'?history=1', 'fill': '#888' } ); - stats_vcloud_pool__svg[ pool ] + stats_vmpooler_pool__svg[ pool ] .append( 'path' ) .attr( 'class', 'area' ) .attr( 'fill', statuscolor ) .attr( 'opacity', '0.25' ) - .attr( 'd', area( stats_vcloud_pool__data[ pool ][ 'r' ] ) ); + .attr( 'd', area( stats_vmpooler_pool__data[ pool ][ 'r' ] ) ); - stats_vcloud_pool__svg[ pool ] + stats_vmpooler_pool__svg[ pool ] .append( 'path' ) .attr( 'class', 'line' ) .attr( 'stroke', statuscolor ) .attr( 'stroke-width', '1' ) - .attr( 'd', path( stats_vcloud_pool__data[ pool ][ 'r' ] ) ); + .attr( 'd', path( stats_vmpooler_pool__data[ pool ][ 'r' ] ) ); - if ( stats_vcloud_pool__data[ pool ][ 'r' ].length > 500 ) { - stats_vcloud_pool__data[ pool ][ 'r' ].shift(); + if ( stats_vmpooler_pool__data[ pool ][ 'r' ].length > 500 ) { + stats_vmpooler_pool__data[ pool ][ 'r' ].shift(); } } ) diff --git a/public/lib/stats-vmpooler-running.js b/public/lib/stats-vmpooler-running.js new file mode 100644 index 0000000..2e0bced --- /dev/null +++ b/public/lib/stats-vmpooler-running.js @@ -0,0 +1,189 @@ +var running_url = '/dashboard/stats/vmpooler/running'; +var running_height = 120; + +var colorscale = d3.scale.category20(); +var color = {}; + +var stats_vmpooler_running__data = {}; +var stats_vmpooler_running__svg = {}; + +var stats_vmpooler_running__data__total = 0; + +d3.json( running_url+'?history=1', + + function( stats_vmpooler_running__data ) { + + if ( typeof stats_vmpooler_running__data[ 'stack' ] === 'undefined' ) { + stats_vmpooler_running__data[ 'stack' ] = []; + stats_vmpooler_running__data[ 'stack_t' ] = []; + } + + for ( var key in stats_vmpooler_running__data ) { + if ( stats_vmpooler_running__data[ key ][ 'history' ] ) { + for ( var c = 0; c < stats_vmpooler_running__data[ key ][ 'history' ].length; c++ ) { + if ( typeof stats_vmpooler_running__data[ 'stack' ][ c ] === 'undefined' ) { + stats_vmpooler_running__data[ 'stack' ][ c ] = {}; + } + + stats_vmpooler_running__data[ 'stack' ][ c ][ key ] = stats_vmpooler_running__data[ key ][ 'history' ][ c ]; + } + } + } + + for ( var c in stats_vmpooler_running__data[ 'stack' ] ) { + for ( var n = 0; n < 8; n++ ) { + stats_vmpooler_running__data[ 'stack_t' ].push( stats_vmpooler_running__data[ 'stack' ][ c ] ); + } + } + + stats_vmpooler_running__data[ 'stack' ] = stats_vmpooler_running__data[ 'stack_t' ]; + delete stats_vmpooler_running__data[ 'stack_t' ]; + + ( function tick() { + setTimeout( function() { + + var stats_vmpooler_running__data__live = ( function() { + var stats_vmpooler_running__data__live = null; + + $.ajax( { + 'url': running_url, + 'async': false, + 'global': false, + 'dataType': 'json', + 'success': function( data ) { + stats_vmpooler_running__data__live = data; + } + } ); + + return stats_vmpooler_running__data__live; + } )(); + + var stats_vmpooler_running__data__keys = []; + + for ( var key in stats_vmpooler_running__data__live ) { + stats_vmpooler_running__data__keys.push( key ); + for ( var c = 0; c < Object.keys(stats_vmpooler_running__data__keys).length; c++ ) { color[key] = colorscale( c ); } + } + + $( '#stats-vmpooler-running' ).empty(); + + var x = d3.scale.linear().domain( [ 0, 500 ] ).range( [ 0, document.getElementById( 'stats-vmpooler-running' ).offsetWidth ] ); + var y = d3.scale.linear().domain( [ 0, stats_vmpooler_running__data__total ] ).range( [ running_height, 0 ] ); + + var area = d3.svg.area() + .x( function( d, i ) { return x( i ); } ) + .y0( function( d ) { return y( d.y0 ); } ) + .y1( function( d ) { return y( d.y0 + d.y ); } ); + + var path = d3.svg.line() + .x( function( d, i ) { return x( i ); } ) + .y( function( d ) { return y( d.y0 + d.y ); } ); + + var stack = d3.layout.stack() + .values( function( d ) { return d.values; } ); + + if ( typeof stats_vmpooler_running__data[ 'stack' ] === 'undefined' ) { + stats_vmpooler_running__data[ 'stack' ] = []; + } + + stats_vmpooler_running__data[ 'tmp' ] = {}; + + for ( var key in stats_vmpooler_running__data__live ) { + stats_vmpooler_running__data[ 'tmp' ][ key ] = stats_vmpooler_running__data__live[ key ][ 'running' ]; + } + + stats_vmpooler_running__data[ 'stack' ].push( stats_vmpooler_running__data[ 'tmp' ] ); + + var stats_vmpooler_running__data__graph = stack( + stats_vmpooler_running__data__keys.sort().map( + function( name ) { + return { + name: name, + values: stats_vmpooler_running__data[ 'stack' ].map( function( d ) { + return { y: d[ name ] }; + }) + } + } + ) + ); + + stats_vmpooler_running__data__total = d3.max( + stats_vmpooler_running__data__graph, function( layer ) { + return d3.max( layer.values, function( d ) { + return d.y0 + d.y; + } ); + } + ); + + var svg = d3.select( '#stats-vmpooler-running' ) + .append( 'svg' ) + .attr( 'height', running_height ) + .attr( 'width', '100%' ) + .style( 'margin-top', '15px' ) + .style( 'margin-bottom', '10px' ) + .append( 'g' ); + + var mysvg = svg.selectAll( '#stats-vmpooler-running' ) + .data( stats_vmpooler_running__data__graph ) + .enter() + .append( 'g' ); + + mysvg.append( 'path' ) + .attr( 'd', function( d ) { return area( d.values ); } ) + .attr( 'clas', 'area' ) + .attr( 'opacity', '0.25' ) + .style( 'fill', function( d ) { return color[ d.name ]; } ); + + mysvg.append( 'path' ) + .attr( 'd', function( d ) { return path( d.values ); } ) + .attr( 'class', 'line' ) + .attr( 'stroke', function( d ) { return '#888'; } ) + .attr( 'stroke-width', '1' ); + + stats_vmpooler_running__data__keys.sort().map( + function( key ) { + stats_vmpooler_running__svg[ key ] = d3.select( '#stats-vmpooler-running' ) + .append( 'svg' ) + .style( 'margin', '0px 0px 0px 0px' ) + .style( 'padding', '0px 10px 10px 10px' ) + .attr( 'width', '130px' ) + .attr( 'height', '12px' ); + + stats_vmpooler_running__svg[ key ] + .append( 'rect' ) + .attr( { + 'x': '5', + 'y': '3', + 'width': '10', + 'height': '10', + 'opacity': '0.25', + 'fill': function( d ) { return color[ key ]; } + } ); + + stats_vmpooler_running__svg[ key ] + .append( 'text' ) + .text( + ( key ) + ) + .attr( { + 'x': '20', + 'y': '12', + 'font-face': '\'PT Sans\', sans-serif', + 'font-size': '12px', + 'font-weight': 'bold', + 'fill': '#888' + } ); + } + ); + + if ( stats_vmpooler_running__data[ 'stack' ].length > 500 ) { + stats_vmpooler_running__data[ 'stack' ].shift(); + } + + tick(); + }, 5000 ); + } )(); + + } + +); diff --git a/views/dashboard.erb b/views/dashboard.erb index 5d0e811..dd03205 100644 --- a/views/dashboard.erb +++ b/views/dashboard.erb @@ -1,33 +1,33 @@ - +
the numbers
-
+
Loading data...
- +
- +
VMs running tests
-
+
Loading data...
- +
- + -
vCloud pool status
+
vmpooler pool status
-
+
Loading data...
- + diff --git a/vmpooler b/vmpooler index 96c0ffd..b753b61 100755 --- a/vmpooler +++ b/vmpooler @@ -212,7 +212,7 @@ def clone_vm template, pool, folder, datastore $redis.decr('vmpooler__tasks__clone') begin - $graphite.log("vcloud.clone.#{vm['template']}", finish) if defined? $graphite + $graphite.log("vmpooler.clone.#{vm['template']}", finish) if defined? $graphite rescue end } @@ -245,7 +245,7 @@ def destroy_vm vm, pool $logger.log('s', "[-] [#{pool}] '#{vm}' destroyed in #{finish} seconds") - $graphite.log("vcloud.destroy.#{pool}", finish) if defined? $graphite + $graphite.log("vmpooler.destroy.#{pool}", finish) if defined? $graphite end } end @@ -375,8 +375,8 @@ def check_pool pool begin if (defined? $graphite) - $graphite.log('vcloud.ready.'+pool['name'], $redis.scard('vmpooler__ready__'+pool['name'])) - $graphite.log('vcloud.running.'+pool['name'], $redis.scard('vmpooler__running__'+pool['name'])) + $graphite.log('vmpooler.ready.'+pool['name'], $redis.scard('vmpooler__ready__'+pool['name'])) + $graphite.log('vmpooler.running.'+pool['name'], $redis.scard('vmpooler__running__'+pool['name'])) end rescue end diff --git a/vmpooler-api b/vmpooler-api index 689f4f0..89c9386 100755 --- a/vmpooler-api +++ b/vmpooler-api @@ -38,7 +38,7 @@ get '/' do } end -get '/dashboard/stats/vcloud/numbers' do +get '/dashboard/stats/vmpooler/numbers' do result = Hash.new result['pending'] = 0 result['cloning'] = 0 @@ -63,7 +63,7 @@ get '/dashboard/stats/vcloud/numbers' do JSON.pretty_generate(result) end -get '/dashboard/stats/vcloud/pool' do +get '/dashboard/stats/vmpooler/pool' do result = Hash.new $config[:pools].each do |pool| @@ -77,7 +77,7 @@ get '/dashboard/stats/vcloud/pool' do history ||= Hash.new begin - buffer = open( 'http://'+$config[:config]['graphite']+'/render?target=vcloud.ready.*&from=-1hour&format=json' ).read + buffer = open( 'http://'+$config[:config]['graphite']+'/render?target=vmpooler.ready.*&from=-1hour&format=json' ).read history = JSON.parse( buffer ) history.each do |pool| @@ -115,7 +115,7 @@ get '/dashboard/stats/vcloud/pool' do JSON.pretty_generate(result) end -get '/dashboard/stats/vcloud/running' do +get '/dashboard/stats/vmpooler/running' do result = Hash.new $config[:pools].each do |pool| @@ -130,7 +130,7 @@ get '/dashboard/stats/vcloud/running' do if ( params[:history] ) if ( $config[:config]['graphite'] ) begin - buffer = open( 'http://'+$config[:config]['graphite']+'/render?target=vcloud.running.*&from=-1hour&format=json' ).read + buffer = open( 'http://'+$config[:config]['graphite']+'/render?target=vmpooler.running.*&from=-1hour&format=json' ).read JSON.parse( buffer ).each do |pool| if pool['target'] =~ /.*\.(.*)$/ pool['name'] = $1 From 6c3ffae1dc1ddae06af99f51e1e3745efe3d1da3 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Thu, 20 Feb 2014 14:39:17 -0800 Subject: [PATCH 4/4] s/vm_host_pool__/vmpooler__/g --- vmpooler | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/vmpooler b/vmpooler index 4f5fbb9..a304eca 100755 --- a/vmpooler +++ b/vmpooler @@ -89,19 +89,19 @@ def check_ready_vm vm, pool, ttl Thread.new { if (ttl > 0) if ((((Time.now - host.runtime.bootTime)/60).to_s[/^\d+\.\d{1}/].to_f) > ttl) - $redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm) + $redis.smove('vmpooler__ready__'+pool, 'vmpooler__completed__'+pool, vm) $logger.log('d', "[!] [#{pool}] '#{vm}' reached end of TTL after #{ttl} minutes, removed from 'ready' queue") end end - check_stamp = $redis.hget('vmware_host_pool__vm__'+vm, 'check') + check_stamp = $redis.hget('vmpooler__vm__'+vm, 'check') if ( (! check_stamp) or (((Time.now - Time.parse(check_stamp))/60) > $config[:config]['vm_checktime']) ) - $redis.hset('vmware_host_pool__vm__'+vm, 'check', Time.now) + $redis.hset('vmpooler__vm__'+vm, 'check', Time.now) host = $vsphere[pool].find_vm(vm) || $vsphere[pool].find_vm_heavy(vm)[vm] @@ -112,7 +112,7 @@ def check_ready_vm vm, pool, ttl (host.runtime.powerState) and (host.runtime.powerState != 'poweredOn') ) - $redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm) + $redis.smove('vmpooler__ready__'+pool, 'vmpooler__completed__'+pool, vm) $logger.log('d', "[!] [#{pool}] '#{vm}' appears to be powered off, removed from 'ready' queue") end @@ -122,12 +122,12 @@ def check_ready_vm vm, pool, ttl (host.summary.guest.hostName) and (host.summary.guest.hostName != vm) ) - $redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm) + $redis.smove('vmpooler__ready__'+pool, 'vmpooler__completed__'+pool, vm) $logger.log('d', "[!] [#{pool}] '#{vm}' has mismatched hostname, removed from 'ready' queue") end else - $redis.srem('vmware_host_pool__ready__'+pool, vm) + $redis.srem('vmpooler__ready__'+pool, vm) $logger.log('s', "[!] [#{pool}] '#{vm}' not found in vCenter inventory, removed from 'ready' queue") end @@ -137,7 +137,7 @@ def check_ready_vm vm, pool, ttl TCPSocket.new vm, 22 } rescue - if ($redis.smove('vmware_host_pool__ready__'+pool, 'vmware_host_pool__completed__'+pool, vm)) + if ($redis.smove('vmpooler__ready__'+pool, 'vmpooler__completed__'+pool, vm)) $logger.log('d', "[!] [#{pool}] '#{vm}' is unreachable, removed from 'ready' queue") end end