def answer_calculate
Log.debug { "Calculating answer: #{self}" }
@stats = Hash.new
if not @server then
stats_calculate_children(@stats, @children[:rootroot], 1.0)
@stats.each_pair do |key, data|
Log.debug { sprintf "Answer: %.2f%% %s\n", data[:prob] * 100, key }
end
return
end
for ip in @serverips do
serverweight = @serverweights[ip]
if ip =~ /^key:/ then
raise "duplicate key found" if @stats[ip]
if @stats_resolve[ip][:prob] != serverweight then
$stderr.puts "#{@stats_resolve[ip][:prob]} vs #{serverweight}"
@stats_resolve[ip].each_pair do |a,b|
$stderr.puts a
end
raise "unexpected probability"
end
@stats[ip] = @stats_resolve[ip].dup
next
end
if @children[ip] then
stats_calculate_children(@stats, @children[ip], serverweight)
else
response = @responses[ip]
@stats[response.stats_key] = { :prob => serverweight,
:response => response, :referral => self }
end
end
@stats.each_pair do |key, data|
Log.debug { sprintf "Answer: %.2f%% %s\n", data[:prob] * 100, key }
end
end