class Eco::API::Session::Batch::RequestStats
@attr_reader count [Integer] the total number of requests @attr_reader stats [Hash] plain `Hash` with the number of requests that include an attribute
Constants
- ACCOUNT_ATTRS
- BLANKED_PREFIX
- CORE_ATTRS
- DETAILS_ATTRS
Attributes
count[R]
type[R]
Public Class Methods
account_attrs(stats: false, all: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 28 def account_attrs(stats: false, all: false) ACCOUNT_ATTRS.dup.tap do |attrs| if stats || all attrs.unshift("account_remove") attrs.unshift("account") if all attrs.concat(blank_attrs(ACCOUNT_ATTRS)) end end end
blank_attrs(attrs)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 57 def blank_attrs(attrs) attrs.map {|attr| "#{blanked_prefix}#{attr}"} end
blanked_prefix(attr = nil)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 47 def blanked_prefix(attr = nil) @blanked_prefix ||= BLANKED_PREFIX return @blanked_prefix unless attr "#{blanked_prefix}#{attr}" end
blanked_prefix=(value)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 53 def blanked_prefix=(value) @blanked_prefix = value || blanked_prefix end
core_attrs(stats: false, all: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 19 def core_attrs(stats: false, all: false) CORE_ATTRS.dup.tap do |attrs| if stats || all attrs.unshift("core") attrs.concat(blank_attrs(CORE_ATTRS)) end end end
details_attrs(stats: false, all: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 38 def details_attrs(stats: false, all: false) DETAILS_ATTRS.dup.tap do |attrs| if stats || all attrs.unshift("details_remove") attrs.unshift("details") if all end end end
new(type:, requests: [])
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 65 def initialize(type:, requests: []) raise "type should be one of #{Eco::API::Session::Batch::Job.types}. Given: #{type}" unless self.class.valid_type?(type.to_sym) @type = type.to_sym @count = requests && requests.length @stats = build(requests) end
valid_type?(type)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 15 def valid_type?(type) Eco::API::Session::Batch::Job.valid_type?(type.to_sym) end
Public Instance Methods
message(percent: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 76 def message(percent: false) key_val_delimiter = ": "; attr_delimiter = " ++ " pairs_to_line = Proc.new do |pairs| pairs.map do |p| [p.first.to_s, "#{p.last.to_s}" + (percent ? "%" : "")].join(key_val_delimiter) end.join(attr_delimiter) end lines = [] lines << pairs_to_line.call(core_pairs(percent: percent)) lines << pairs_to_line.call(account_pairs(percent: percent)) lines << pairs_to_line.call(details_pairs(percent: percent)) lines.join("\n") end
to_h()
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 72 def to_h @stats end
Private Instance Methods
account(percent: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 103 def account(percent: false) attr("account", percent: percent) end
account_attrs()
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 197 def account_attrs @account_attrs ||= self.class.account_attrs end
account_pairs(percent: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 169 def account_pairs(percent: false) aattrs = ["account_remove"] + account_attrs + blank_attrs(account_attrs) [["account", account(percent: percent)]] + pairs(aattrs, percent: percent, total: account) end
add_account_stats(stats, request)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 140 def add_account_stats(stats, request) if request.key?("account") stats["account"] += 1 stats["account_remove"] += 1 if !request["account"] attrs_to_stat(stats, request["account"] || {}, account_attrs) end end
add_core_stats(stats, request)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 135 def add_core_stats(stats, request) stats["core"] += 1 if (request.keys & core_attrs).length > 0 attrs_to_stat(stats, request, core_attrs) end
add_details_stats(stats, request)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 148 def add_details_stats(stats, request) if request.key?("details") stats["details"] += 1 stats["details_remove"] += 1 if !request["details"] if fields = request.dig("details", "fields") stats["fields"] += fields.length end end end
attr(attr, percent: false, total: count)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 93 def attr(attr, percent: false, total: count) i = @stats["#{attr}"] return i unless percent percentage(i, total: total) end
attrs_to_stat(stats, hash, attrs)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 124 def attrs_to_stat(stats, hash, attrs) stats.tap do |st| attrs.each do |attr| if hash.key?(attr) st[attr] += 1 st[blanked_prefix(attr)]+= 1 if blanked_value?(hash[attr]) end end end end
blank_attrs(attrs)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 205 def blank_attrs(attrs) self.class.blank_attrs(attrs) end
blanked_prefix(attr = nil)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 209 def blanked_prefix(attr = nil) self.class.blanked_prefix(attr) end
blanked_value?(value)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 213 def blanked_value?(value) case value when nil true when false true when Numeric value == 0 when Array value.compact.empty? when String value.to_s.strip.empty? end end
build(requests)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 111 def build(requests) Hash.new(0).tap do |stats| stats[type] = count unless !requests || !requests.is_a?(Enumerable) || requests.empty? requests.each_with_index do |request| add_core_stats(stats, request || {}) add_account_stats(stats, request || {}) add_details_stats(stats, request || {}) end end end end
core(percent: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 99 def core(percent: false) attr("core", percent: percent) end
core_attrs()
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 193 def core_attrs @core_attrs ||= self.class.core_attrs end
core_pairs(percent: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 164 def core_pairs(percent: false) cattrs = core_attrs + blank_attrs(core_attrs) [["core", core(percent: percent)]] + pairs(cattrs, percent: percent, total: core) end
details(percent: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 107 def details(percent: false) attr("details", percent: percent) end
details_attrs()
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 201 def details_attrs @details_attrs ||= self.class.details_attrs end
details_pairs(percent: false)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 174 def details_pairs(percent: false) details_pairs = [["details", details(percent: percent)]] details_pairs += [["fields", fields_average]] if attr("fields") && fields_average details_pairs += pairs(["details_remove"], percent: percent, total: details) end
fields_average()
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 180 def fields_average if (fields_num = attr("fields")) && (total = details) > 0 (fields_num.to_f / total.to_f).round(2) end end
pairs(attrs, percent: false, total: count)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 158 def pairs(attrs, percent: false, total: count) pairs = attrs.map do |a| (v = attr(a, percent: percent, total: count)) > 0 ? [a, v] : nil end.compact end
percentage(num, total: count)
click to toggle source
# File lib/eco/api/session/batch/request_stats.rb, line 186 def percentage(num, total: count) total ||= count if num (num.to_f / total * 100).round(2) end end