From 3af680f86033111e6415bfdfadfa99916ddb0614 Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Thu, 6 Mar 2014 10:53:27 -0800 Subject: [PATCH] Allow a configurable Graphite namespace (prefix) --- lib/vmpooler/api.rb | 19 ++++++++++++------- lib/vmpooler/pool_manager.rb | 27 +++++++++++++-------------- vmpooler.yaml.example | 25 ++++++++++++++++++++----- 3 files changed, 45 insertions(+), 26 deletions(-) diff --git a/lib/vmpooler/api.rb b/lib/vmpooler/api.rb index c2d6b57..abe091f 100644 --- a/lib/vmpooler/api.rb +++ b/lib/vmpooler/api.rb @@ -5,13 +5,14 @@ module Vmpooler config_file = File.expand_path('vmpooler.yaml') $config = YAML.load_file(config_file) - pools = $config[:pools] - redis = $config[:redis] - # Set some defaults $config[:redis] ||= Hash.new $config[:redis]['server'] ||= 'localhost' + if ($config[:graphite]['server']) + $config[:graphite]['prefix'] ||= 'vmpooler' + end + # Connect to Redis $redis = Redis.new(:host => $config[:redis]['server']) end @@ -62,11 +63,13 @@ module Vmpooler end if ( params[:history] ) - if ( $config[:config]['graphite'] ) + if ( $config[:graphite]['server'] ) history ||= Hash.new begin - buffer = open( 'http://'+$config[:config]['graphite']+'/render?target=vmpooler.ready.*&from=-1hour&format=json' ).read + buffer = open( + 'http://'+$config[:graphite]['server']+'/render?target='+$config[:graphite]['prefix']+'.ready.*&from=-1hour&format=json' + ).read history = JSON.parse( buffer ) history.each do |pool| @@ -117,9 +120,11 @@ module Vmpooler end if ( params[:history] ) - if ( $config[:config]['graphite'] ) + if ( $config[:graphite]['server'] ) begin - buffer = open( 'http://'+$config[:config]['graphite']+'/render?target=vmpooler.running.*&from=-1hour&format=json' ).read + buffer = open( + 'http://'+$config[:graphite]['server']+'/render?target='+$config[:graphite]['prefix']+'.running.*&from=-1hour&format=json' + ).read JSON.parse( buffer ).each do |pool| if pool['target'] =~ /.*\.(.*)$/ pool['name'] = $1 diff --git a/lib/vmpooler/pool_manager.rb b/lib/vmpooler/pool_manager.rb index 20e25f3..a990d70 100644 --- a/lib/vmpooler/pool_manager.rb +++ b/lib/vmpooler/pool_manager.rb @@ -6,16 +6,6 @@ module Vmpooler $config = YAML.load_file(config_file) $pools = $config[:pools] - vsphere = $config[:vsphere] - redis = $config[:redis] - - # Load logger library - $logger = Vmpooler::Logger.new $config[:config]['logfile'] - - # Load Graphite helper library (if configured) - if (defined? $config[:config]['graphite']) - $graphite = Vmpooler::Graphite.new $config[:config]['graphite'] - end # Set some defaults $config[:config]['task_limit'] ||= 10 @@ -24,6 +14,15 @@ module Vmpooler $config[:redis] ||= Hash.new $config[:redis]['server'] ||= 'localhost' + # Load logger library + $logger = Vmpooler::Logger.new $config[:config]['logfile'] + + # Load Graphite helper library (if configured) + if (defined? $config[:graphite]['server']) + $config[:graphite]['prefix'] ||= 'vmpooler' + $graphite = Vmpooler::Graphite.new $config[:graphite]['server'] + end + # Connect to Redis $redis = Redis.new(:host => $config[:redis]['server']) @@ -232,7 +231,7 @@ module Vmpooler $redis.decr('vmpooler__tasks__clone') begin - $graphite.log("vmpooler.clone.#{vm['template']}", finish) if defined? $graphite + $graphite.log($config[:graphite]['prefix']+".clone.#{vm['template']}", finish) if defined? $graphite rescue end } @@ -265,7 +264,7 @@ module Vmpooler $logger.log('s', "[-] [#{pool}] '#{vm}' destroyed in #{finish} seconds") - $graphite.log("vmpooler.destroy.#{pool}", finish) if defined? $graphite + $graphite.log($config[:graphite]['prefix']+".destroy.#{pool}", finish) if defined? $graphite end } end @@ -393,8 +392,8 @@ module Vmpooler begin if (defined? $graphite) - $graphite.log('vmpooler.ready.'+pool['name'], $redis.scard('vmpooler__ready__'+pool['name'])) - $graphite.log('vmpooler.running.'+pool['name'], $redis.scard('vmpooler__running__'+pool['name'])) + $graphite.log($config[:graphite]['prefix']+'.ready.'+pool['name'], $redis.scard('vmpooler__ready__'+pool['name'])) + $graphite.log($config[:graphite]['prefix']+'.running.'+pool['name'], $redis.scard('vmpooler__running__'+pool['name'])) end rescue end diff --git a/vmpooler.yaml.example b/vmpooler.yaml.example index 4746db2..c0d4b44 100644 --- a/vmpooler.yaml.example +++ b/vmpooler.yaml.example @@ -49,6 +49,26 @@ :redis: server: 'redis.company.com' +# :graphite: +# +# This section contains the connection information required to store +# historical data in an external Graphite database. +# +# Available configuration parameters: +# +# - server +# The FQDN hostname of the Graphite server. +# (optional) +# +# - prefix +# The prefix to use while storing Graphite data. +# (optional; default: 'vmpooler') + +# Example: + +:graphite: + server: 'graphite.company.com' + # :config: # # This section contains global configuration information. @@ -63,10 +83,6 @@ # The path to vmpooler's log file. # (optional; default: '/var/log/vmpooler.log') # -# - graphite -# The FQDN hostname of the Graphite server. -# (optional) -# # - task_limit # The number of concurrent VMware vSphere tasks to perform. # (optional; default: '10') @@ -84,7 +100,6 @@ :config: site_name: 'vmpooler' logfile: '/var/log/vmpooler.log' - graphite: 'graphite.company.com' task_limit: 10 vm_checktime: 15 vm_lifetime: 12