From 4cfc0786848e685d64f06788173fe8e3c747c26b Mon Sep 17 00:00:00 2001 From: Scott Schneider Date: Thu, 7 May 2015 08:46:35 -0700 Subject: [PATCH] Create daily tag indexes, report in /summary - Store daily tag roll-ups in vmpooler__tag__ - GET /summary will display daily tag counts and roll-up --- lib/vmpooler/api/helpers.rb | 22 ++++++++++++++++++++++ lib/vmpooler/api/v1.rb | 16 +++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/lib/vmpooler/api/helpers.rb b/lib/vmpooler/api/helpers.rb index 00e6046..82f87ff 100644 --- a/lib/vmpooler/api/helpers.rb +++ b/lib/vmpooler/api/helpers.rb @@ -147,6 +147,28 @@ module Vmpooler queue end + def get_tag_metrics(backend, date_str) + tags = {} + + backend.hgetall('vmpooler__tag__' + date_str).each do |key, value| + hostname = 'unknown' + tag = 'unknown' + + if key =~ /\:/ + hostname, tag = key.split(':', 2) + end + + tags[tag] ||= {} + tags[tag][value] ||= 0 + tags[tag][value] += 1 + + tags[tag]['total'] ||= 0 + tags[tag]['total'] += 1 + end + + tags + end + def get_task_metrics(backend, task_str, date_str, opts = {}) opts = {:bypool => false}.merge(opts) diff --git a/lib/vmpooler/api/v1.rb b/lib/vmpooler/api/v1.rb index 7fa8964..d10bdc4 100644 --- a/lib/vmpooler/api/v1.rb +++ b/lib/vmpooler/api/v1.rb @@ -99,6 +99,7 @@ module Vmpooler pool: {} } }, + tag: {}, daily: [] } @@ -124,7 +125,8 @@ module Vmpooler daily = { date: date.to_s, boot: get_task_metrics(backend, 'boot', date.to_s, :bypool => true), - clone: get_task_metrics(backend, 'clone', date.to_s, :bypool => true) + clone: get_task_metrics(backend, 'clone', date.to_s, :bypool => true), + tag: get_tag_metrics(backend, date.to_s) } result[:daily].push(daily) @@ -194,6 +196,17 @@ module Vmpooler end end + result[:daily].each do |daily| + daily[:tag].each_key do |tag| + result[:tag][tag] ||= {} + + daily[:tag][tag].each do |key, value| + result[:tag][tag][key] ||= 0 + result[:tag][tag][key] += value + end + end + end + JSON.pretty_generate(result) end @@ -530,6 +543,7 @@ module Vmpooler when 'tags' arg.keys.each do |tag| backend.hset('vmpooler__vm__' + params[:hostname], 'tag:' + tag, arg[tag]) + backend.hset('vmpooler__tag__' + Date.today.to_s, params[:hostname] + ':' + tag, arg[tag]) end end end