Merge pull request #71 from sschneid/historic_redis_vm_metadata

(QENG-2057) Historic Redis VM metadata
This commit is contained in:
Colin 2015-03-25 12:48:56 -07:00
commit 91563c0408
6 changed files with 50 additions and 4 deletions

View file

@ -11,7 +11,7 @@ module Vmpooler
require 'timeout'
require 'yaml'
%w( api graphite logger pool_manager vsphere_helper ).each do |lib|
%w( api graphite janitor logger pool_manager vsphere_helper ).each do |lib|
begin
require "vmpooler/#{lib}"
rescue LoadError

View file

@ -340,6 +340,7 @@ module Vmpooler
unless vm.nil?
$redis.sadd('vmpooler__running__' + key, vm)
$redis.hset('vmpooler__active__' + key, vm, Time.now)
$redis.hset('vmpooler__vm__' + vm, 'checkout', Time.now)
result[key] ||= {}
@ -403,6 +404,7 @@ module Vmpooler
unless vm.nil?
$redis.sadd('vmpooler__running__' + template, vm)
$redis.hset('vmpooler__active__' + template, vm, Time.now)
$redis.hset('vmpooler__vm__' + vm, 'checkout', Time.now)
result[template] ||= {}

39
lib/vmpooler/janitor.rb Normal file
View file

@ -0,0 +1,39 @@
module Vmpooler
class Janitor
def initialize
# Load the configuration file
config_file = File.expand_path('vmpooler.yaml')
$config = YAML.load_file(config_file)
# Set some defaults
$config[:redis] ||= {}
$config[:redis]['server'] ||= 'localhost'
$config[:redis]['data_ttl'] ||= 168
# Load logger library
$logger = Vmpooler::Logger.new $config[:config]['logfile']
# Connect to Redis
$redis = Redis.new(host: $config[:redis]['server'])
end
def execute!
loop do
$redis.keys('vmpooler__vm__*').each do |key|
data = $redis.hgetall(key);
if data['destroy']
lifetime = (Time.now - Time.parse(data['destroy'])) / 60 / 60
if lifetime > $config[:redis]['data_ttl']
$redis.del(key)
end
end
end
sleep(600)
end
end
end
end

View file

@ -11,8 +11,8 @@ module Vmpooler
$config[:config]['task_limit'] ||= 10
$config[:config]['vm_checktime'] ||= 15
$config[:config]['vm_lifetime'] ||= 24
$config[:redis] ||= {}
$config[:redis]['server'] ||= 'localhost'
$config[:redis] ||= {}
$config[:redis]['server'] ||= 'localhost'
# Load logger library
$logger = Vmpooler::Logger.new $config[:config]['logfile']
@ -256,7 +256,7 @@ module Vmpooler
Thread.new do
$redis.srem('vmpooler__completed__' + pool, vm)
$redis.hdel('vmpooler__active__' + pool, vm)
$redis.del('vmpooler__vm__' + vm)
$redis.hset('vmpooler__vm__' + vm, 'destroy', Time.now)
host = $vsphere[pool].find_vm(vm) ||
$vsphere[pool].find_vm_heavy(vm)[vm]

View file

@ -6,6 +6,7 @@ require 'rubygems' unless defined?(Gem)
require 'lib/vmpooler'
Thread.new { Vmpooler::API.new.execute! }
Thread.new { Vmpooler::Janitor.new.execute! }
Thread.new { Vmpooler::PoolManager.new.execute! }
loop do

View file

@ -43,6 +43,10 @@
# - password
# The password used to authenticate Redis.
# (optional)
#
# - data_ttl
# How long (in hours) to retain metadata in Redis after VM destruction.
# (optional; default: '168')
# Example: