From 1af16bcc47d2d823cc399543d0a0d3faa65495d0 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Wed, 19 Feb 2014 14:50:54 -0800 Subject: [PATCH] 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