Class: AvgPlugin
- Inherits:
-
Object
- Object
- AvgPlugin
- Extended by:
- Plugin, PluginType, TypeHelper
- Defined in:
- lib/mvn2/plugin/avg.plugin.rb
Class Method Summary collapse
- .calc_new_avg(ind) ⇒ Object
- .def_actions ⇒ Object
- .def_blockers ⇒ Object
- .def_options ⇒ Object
- .def_types ⇒ Object
- .def_vars ⇒ Object
- .float_filter(line) ⇒ Object
- .full_avg_file ⇒ Object
- .get_data(averages, counts, lines, ind) ⇒ Object
- .get_time_parts(time) ⇒ Object
- .read_advanced_avg ⇒ Object
- .read_avg ⇒ Object
- .read_full_avg ⇒ Object
- .show_averages ⇒ Object
- .update_avg ⇒ Object
- .update_full_avg ⇒ Object
Class Method Details
.calc_new_avg(ind) ⇒ Object
153 154 155 156 157 158 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 153 def self.calc_new_avg(ind) averages2, counts, diff = Plugins.get_vars :averages2, :counts, :diff sum = averages2[ind] * counts[ind] + diff counts[ind] += 1 averages2[ind] = sum / counts[ind] end |
.def_actions ⇒ Object
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 56 def self.def_actions register(:before_run, order: 1) { || read_avg read_full_avg read_advanced_avg show_averages if [:show_average] } register(:after_run, order: 2) { |_, _| update_avg update_full_avg } register(:after_run, order: 4) { |, _| if [:show_average] read_avg read_full_avg read_advanced_avg show_averages end } end |
.def_blockers ⇒ Object
47 48 49 50 51 52 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 47 def self.def_blockers register :block_update, option: :block_update register(:block_update) { |, result, average, diff| !(result || (![:skip_tests] && diff >= average / 2.0)) } register :block_full_average, option: :track_full_average, value: false register :block_average, option: :track_average, value: false end |
.def_options ⇒ Object
37 38 39 40 41 42 43 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 37 def self. register :option, sym: :track_average, names: %w(-k --track-average), desc: 'update the average and also display a progress bar while the build is in progress' register :option, sym: :track_full_average, names: %w(-u --track-full-average), desc: 'update the average list and also display a progress bar while the build is in progress' register :option, sym: :advanced_average, names: %w(-d --advanced-average), desc: 'use k-means (with minimum optimal k) to find a list of averages and use the closest one for the progress bar and displayed average' register :option, sym: :show_average, names: %w(-w --show-average), desc: 'show the average(s) before and after the build (average tracking must be enabled)' register :option, sym: :block_update, names: %w(-b --block-update), desc: 'block the average feature from updating the file(s)' end |
.def_types ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 17 def self.def_types register_type(:full_avg_name) { |list| = Plugins.get_var :options pieces = [] list.sort_by { |v| v[:options][:order] }.each { |name| pieces << name[:block].call() } pieces.join } register_type(:block_average) { |list| basic_type(list) } register_type(:block_update) { |list| result, average, diff = Plugins.get_vars :result, :average, :diff basic_type(list, result, average, diff) } register_type(:block_full_average) { |list| Plugins.get(:block_average) || basic_type(list) } end |
.def_vars ⇒ Object
9 10 11 12 13 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 9 def self.def_vars register_variable :average register_variable :averages2 register_variable :counts end |
.float_filter(line) ⇒ Object
86 87 88 89 90 91 92 93 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 86 def self.float_filter(line) begin f = line.chomp f.length == 0 || (f =~ /^\d+(\.\d+)?$/).nil? ? false : f.to_f rescue false end end |
.full_avg_file ⇒ Object
81 82 83 84 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 81 def self.full_avg_file pieces = Plugins.get :full_avg_name "avg#{pieces}.txt" end |
.get_data(averages, counts, lines, ind) ⇒ Object
127 128 129 130 131 132 133 134 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 127 def self.get_data(averages, counts, lines, ind) if lines.count > ind parts = lines[ind].chomp.split(';') averages[ind] = parts[0].to_f counts[ind] = parts[1].to_i averages[ind] = 0 if counts[ind] == 0 end end |
.get_time_parts(time) ⇒ Object
179 180 181 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 179 def self.get_time_parts(time) return (time / 60.0).floor, '%06.3f' % (time % 60) end |
.read_advanced_avg ⇒ Object
106 107 108 109 110 111 112 113 114 115 116 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 106 def self.read_advanced_avg , average = Plugins.get_vars :options, :average averages = [average] file_name = full_avg_file if !Plugins.get(:block_full_average) && [:advanced_average] && File.exist?(file_name) lines = IO.readlines(file_name) data = lines.filtermap { |line| float_filter(line) } averages = data.nmeans end Plugins.set_var :averages, averages end |
.read_avg ⇒ Object
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 136 def self.read_avg = Plugins.get_var :options average = 0 averages = [0, 0, 0, 0] counts = [0, 0, 0, 0] if !Plugins.get(:block_average) && File.exist?('avg.txt') lines = IO.readlines('avg.txt') get_data(averages, counts, lines, 0) get_data(averages, counts, lines, 1) get_data(averages, counts, lines, 2) get_data(averages, counts, lines, 3) pkg = [:package] ? 2 : 0 average = averages[([:skip_tests] ? 0 : 1) + pkg] end Plugins.set_vars average: average, averages2: averages, counts: counts end |
.read_full_avg ⇒ Object
95 96 97 98 99 100 101 102 103 104 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 95 def self.read_full_avg average = Plugins.get_var :average file_name = full_avg_file if !Plugins.get(:block_full_average) && File.exist?(file_name) lines = IO.readlines(file_name) data = lines.filtermap { |line| float_filter(line) } average = data.average end Plugins.set_var :average, average end |
.show_averages ⇒ Object
168 169 170 171 172 173 174 175 176 177 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 168 def self.show_averages averages = Plugins.get_var :averages unless averages.empty? || (averages.length == 1 && averages[0] == 0) strs = averages.map { |a| m, s = get_time_parts(a) "#{m}:#{s}" } puts "\r\e[2KAverage(s): #{strs.join(', ')}" end end |
.update_avg ⇒ Object
160 161 162 163 164 165 166 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 160 def self.update_avg , averages2, counts = Plugins.get_vars :options, :averages2, :counts if !Plugins.get(:block_average) && !Plugins.get(:block_update) [:skip_tests] ? calc_new_avg(0) : calc_new_avg(1) IO.write('avg.txt', "#{averages2[0]};#{counts[0]}\n#{averages2[1]};#{counts[1]}\n#{averages2[2]};#{counts[2]}\n#{averages2[3]};#{counts[3]}") end end |
.update_full_avg ⇒ Object
118 119 120 121 122 123 124 125 |
# File 'lib/mvn2/plugin/avg.plugin.rb', line 118 def self.update_full_avg diff = Plugins.get_var :diff if !Plugins.get(:block_full_average) && !Plugins.get(:block_update) file = File.new(full_avg_file, 'a+') file.puts(diff) file.close end end |