mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 01:58:41 -05:00
(POOLER-134) Ship VM usage stats
This commit updates vmpooler to ship VM usage stats when a VM is destroyed. The stats are gathered for jobs based on user and pool name. If a jenkins build URL is present then this is broken down by user, instance, value stream, branch and project. Additionally, if present then the RMM_COMPONENT_TO_TEST_NAME will be listed after project. Without this change we do not collect stats on per VM usage and its correlation to users and pools.
This commit is contained in:
parent
e3e51afc05
commit
9a57c6d1b5
7 changed files with 270 additions and 4 deletions
|
|
@ -66,6 +66,7 @@ module Vmpooler
|
|||
parsed_config[:config]['create_template_delta_disks'] = ENV['CREATE_TEMPLATE_DELTA_DISKS'] if ENV['CREATE_TEMPLATE_DELTA_DISKS']
|
||||
parsed_config[:config]['experimental_features'] = ENV['EXPERIMENTAL_FEATURES'] if ENV['EXPERIMENTAL_FEATURES']
|
||||
parsed_config[:config]['purge_unconfigured_folders'] = ENV['PURGE_UNCONFIGURED_FOLDERS'] if ENV['PURGE_UNCONFIGURED_FOLDERS']
|
||||
parsed_config[:config]['usage_stats'] = ENV['USAGE_STATS'] if ENV['USAGE_STATS']
|
||||
|
||||
parsed_config[:redis] = parsed_config[:redis] || {}
|
||||
parsed_config[:redis]['server'] = ENV['REDIS_SERVER'] || parsed_config[:redis]['server'] || 'localhost'
|
||||
|
|
|
|||
|
|
@ -319,10 +319,66 @@ module Vmpooler
|
|||
finish = format('%.2f', Time.now - start)
|
||||
$logger.log('s', "[-] [#{pool}] '#{vm}' destroyed in #{finish} seconds")
|
||||
$metrics.timing("destroy.#{pool}", finish)
|
||||
get_vm_usage_labels(vm)
|
||||
end
|
||||
dereference_mutex(vm)
|
||||
end
|
||||
|
||||
def get_vm_usage_labels(vm)
|
||||
return unless $config[:config]['usage_stats']
|
||||
checkout = $redis.hget("vmpooler__vm__#{vm}", 'checkout')
|
||||
return if checkout.nil?
|
||||
jenkins_build_url = $redis.hget("vmpooler__vm__#{vm}", 'tag:jenkins_build_url')
|
||||
user = $redis.hget("vmpooler__vm__#{vm}", 'token:user') || 'unauthenticated'
|
||||
poolname = $redis.hget("vmpooler__vm__#{vm}", "template")
|
||||
|
||||
unless jenkins_build_url
|
||||
$metrics.increment("usage.#{user}.#{poolname}")
|
||||
return
|
||||
end
|
||||
|
||||
url_parts = jenkins_build_url.split('/')[2..-1]
|
||||
instance = url_parts[0].gsub('.', '_')
|
||||
value_stream_parts = url_parts[2].split('_')
|
||||
value_stream = value_stream_parts.shift
|
||||
branch = value_stream_parts.pop
|
||||
project = value_stream_parts.shift
|
||||
job_name = value_stream_parts.join('_')
|
||||
build_metadata_parts = url_parts[3]
|
||||
component_to_test = component_to_test('RMM_COMPONENT_TO_TEST_NAME', build_metadata_parts)
|
||||
|
||||
metric_parts = [
|
||||
'usage',
|
||||
user,
|
||||
instance,
|
||||
value_stream,
|
||||
branch,
|
||||
project,
|
||||
job_name,
|
||||
component_to_test,
|
||||
poolname
|
||||
]
|
||||
|
||||
metric_parts = metric_parts.reject { |s| s.nil? }
|
||||
|
||||
$metrics.increment(metric_parts.join('.'))
|
||||
rescue => err
|
||||
logger.log('d', "[!] [#{poolname}] failed while evaluating usage labels on '#{vm}' with an error: #{err}")
|
||||
end
|
||||
|
||||
def component_to_test(match, labels_string)
|
||||
return if labels_string.nil?
|
||||
labels_string_parts = labels_string.split(',')
|
||||
labels_string_parts.each do |part|
|
||||
key, value = part.split('=')
|
||||
next if value.nil?
|
||||
if key == match
|
||||
return value
|
||||
end
|
||||
end
|
||||
return
|
||||
end
|
||||
|
||||
def purge_unused_vms_and_folders
|
||||
global_purge = $config[:config]['purge_unconfigured_folders']
|
||||
providers = $config[:providers].keys
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue