mirror of
https://github.com/puppetlabs/vmpooler.git
synced 2026-01-26 18:08:42 -05:00
add some metrics to the od request generation
This commit is contained in:
parent
dce2a96b68
commit
f59b87a7ff
4 changed files with 20 additions and 9 deletions
|
|
@ -5,6 +5,7 @@ require 'vmpooler/util/parsing'
|
||||||
module Vmpooler
|
module Vmpooler
|
||||||
class API
|
class API
|
||||||
class V1 < Sinatra::Base
|
class V1 < Sinatra::Base
|
||||||
|
|
||||||
api_version = '1'
|
api_version = '1'
|
||||||
api_prefix = "/api/v#{api_version}"
|
api_prefix = "/api/v#{api_version}"
|
||||||
|
|
||||||
|
|
@ -336,9 +337,9 @@ module Vmpooler
|
||||||
end
|
end
|
||||||
|
|
||||||
def too_many_requested?(payload)
|
def too_many_requested?(payload)
|
||||||
payload&.each do |_poolname, count|
|
payload&.each do |poolname, count|
|
||||||
next unless count.to_i > config['max_ondemand_instances_per_request']
|
next unless count.to_i > config['max_ondemand_instances_per_request']
|
||||||
|
metrics.increment('ondemandrequest.toomanyrequests.' + poolname)
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
false
|
false
|
||||||
|
|
@ -362,6 +363,7 @@ module Vmpooler
|
||||||
if backend.exists("vmpooler__odrequest__#{request_id}")
|
if backend.exists("vmpooler__odrequest__#{request_id}")
|
||||||
result['message'] = "request_id '#{request_id}' has already been created"
|
result['message'] = "request_id '#{request_id}' has already been created"
|
||||||
status 409
|
status 409
|
||||||
|
metrics.increment('ondemandrequest.generate.duplicaterequests')
|
||||||
return result
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -385,6 +387,7 @@ module Vmpooler
|
||||||
|
|
||||||
result['domain'] = config['domain'] if config['domain']
|
result['domain'] = config['domain'] if config['domain']
|
||||||
result[:ok] = true
|
result[:ok] = true
|
||||||
|
metrics.increment('ondemandrequest.generate.success')
|
||||||
result
|
result
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -976,7 +979,7 @@ module Vmpooler
|
||||||
|
|
||||||
if request_hash['status'] == 'ready'
|
if request_hash['status'] == 'ready'
|
||||||
result['ready'] = true
|
result['ready'] = true
|
||||||
get_platform_pool_count(request_hash['requested']) do |platform_alias,pool,_count|
|
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias,pool,_count|
|
||||||
instances = backend.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
instances = backend.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
||||||
result[platform_alias] = { 'hostname': instances }
|
result[platform_alias] = { 'hostname': instances }
|
||||||
end
|
end
|
||||||
|
|
@ -989,7 +992,7 @@ module Vmpooler
|
||||||
result['message'] = 'The request has been deleted'
|
result['message'] = 'The request has been deleted'
|
||||||
status 200
|
status 200
|
||||||
else
|
else
|
||||||
get_platform_pool_count(request_hash['requested']) do |platform_alias,pool,count|
|
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias,pool,count|
|
||||||
instance_count = backend.scard("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
instance_count = backend.scard("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
||||||
result[platform_alias] = {
|
result[platform_alias] = {
|
||||||
'ready': instance_count.to_s,
|
'ready': instance_count.to_s,
|
||||||
|
|
@ -1015,7 +1018,7 @@ module Vmpooler
|
||||||
else
|
else
|
||||||
backend.hset("vmpooler__odrequest__#{request_id}", 'status', 'deleted')
|
backend.hset("vmpooler__odrequest__#{request_id}", 'status', 'deleted')
|
||||||
|
|
||||||
get_platform_pool_count(platforms) do |platform_alias,pool,_count|
|
Parsing.get_platform_pool_count(platforms) do |platform_alias,pool,_count|
|
||||||
backend.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")&.each do |vm|
|
backend.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")&.each do |vm|
|
||||||
backend.smove("vmpooler__running__#{pool}", "vmpooler__completed__#{pool}", vm)
|
backend.smove("vmpooler__running__#{pool}", "vmpooler__completed__#{pool}", vm)
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1501,7 +1501,7 @@ module Vmpooler
|
||||||
def vms_ready?(request_id, redis)
|
def vms_ready?(request_id, redis)
|
||||||
catch :request_not_ready do
|
catch :request_not_ready do
|
||||||
request_hash = redis.hgetall("vmpooler__odrequest__#{request_id}")
|
request_hash = redis.hgetall("vmpooler__odrequest__#{request_id}")
|
||||||
get_platform_pool_count(request_hash['requested']) do |platform_alias,pool,count|
|
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias,pool,count|
|
||||||
pools_filled = redis.scard("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
pools_filled = redis.scard("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
||||||
throw :request_not_ready unless pools_filled.to_i == count.to_i
|
throw :request_not_ready unless pools_filled.to_i == count.to_i
|
||||||
end
|
end
|
||||||
|
|
@ -1553,7 +1553,7 @@ module Vmpooler
|
||||||
|
|
||||||
def remove_vms_for_failed_request(request_id, expiration_ttl, redis)
|
def remove_vms_for_failed_request(request_id, expiration_ttl, redis)
|
||||||
request_hash = redis.hgetall("vmpooler__odrequest__#{request_id}")
|
request_hash = redis.hgetall("vmpooler__odrequest__#{request_id}")
|
||||||
get_platform_pool_count(request_hash['requested']) do |platform_alias,pool,_count|
|
Parsing.get_platform_pool_count(request_hash['requested']) do |platform_alias,pool,_count|
|
||||||
pools_filled = redis.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
pools_filled = redis.smembers("vmpooler__#{request_id}__#{platform_alias}__#{pool}")
|
||||||
redis.pipelined do
|
redis.pipelined do
|
||||||
pools_filled&.each do |vm|
|
pools_filled&.each do |vm|
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,11 @@
|
||||||
# utility class shared between apps
|
# utility class shared between apps
|
||||||
module Vmpooler
|
module Vmpooler
|
||||||
class Parsing
|
class Parsing
|
||||||
def get_platform_pool_count(requested, &block)
|
def self.get_platform_pool_count(requested, &block)
|
||||||
requested_platforms = requested.split(',')
|
requested_platforms = requested.split(',')
|
||||||
requested_platforms.each do |platform|
|
requested_platforms.each do |platform|
|
||||||
platform_alias, pool, count = platform.split(':')
|
platform_alias, pool, count = platform.split(':')
|
||||||
#raise ArgumentError if platform_alias.nil? || pool.nil? || count.nil?
|
raise ArgumentError if platform_alias.nil? || pool.nil? || count.nil?
|
||||||
yield platform_alias, pool, count
|
yield platform_alias, pool, count
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -4872,6 +4872,14 @@ EOT
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'fails if the request is not valid' do
|
||||||
|
redis_connection_pool.with do |redis|
|
||||||
|
request_id = "#{request_id}-wrong"
|
||||||
|
create_ondemand_request_for_test(request_id, current_time.to_i, "#{pool}:5", redis)
|
||||||
|
expect{subject.vms_ready?(request_id, redis)}.to raise_error(ArgumentError)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it 'returns false when vms for request_id are not ready' do
|
it 'returns false when vms for request_id are not ready' do
|
||||||
redis_connection_pool.with do |redis|
|
redis_connection_pool.with do |redis|
|
||||||
result = subject.vms_ready?(request_id, redis)
|
result = subject.vms_ready?(request_id, redis)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue