lib/ring/sqa/analyzer.rb in ring-sqa-0.0.18 vs lib/ring/sqa/analyzer.rb in ring-sqa-0.0.19

- old
+ new

@@ -28,42 +28,41 @@ private def initialize database, nodes @db = database @nodes = nodes - @alarm = Alarm.new @db - @buffer = AnalyzeBuffer.new + @alarm = Alarm.new + @buffer = AnalyzeBuffer.new @nodes.list.size @db_id_seen = 0 end end class AnalyzeBuffer attr_reader :array - def initialize max_size=30 - @max_size = max_size - init_nodes = Array.new 99, '' - @array = Array.new max_size, init_nodes + def initialize nodes_count, max_size=30, median_of=27 + @max_size = max_size + @median_of = median_of + init_nodes = Array.new nodes_count * 2, '' + @array = Array.new max_size, init_nodes end def push e @array.shift @array.push e end - def median of_first=27 - of_first = of_first-1 - middle = of_first/2 - node_count[0..of_first].sort[middle] + def median + last = @median_of-1 + node_count[0..last].sort[last/2] end - def exceed_median? last=3, tolerance=CFG.analyzer.tolerance - first = @max_size-last + def exceed_median? tolerance=CFG.analyzer.tolerance violate = (median+1)*tolerance - node_count[first..-1].all? { |e| e > violate } + node_count[@median_of..-1].all? { |e| e > violate } end def node_count @array.map { |nodes| nodes.size } end def exceeding_nodes - exceed = @array[27] & @array[28] & @array[29] - exceed - @array[0..26].flatten.uniq + exceed = @array[@median_of..-1].inject :& + exceed - @array[0..@median_of-1].flatten.uniq end end end end