Module: PredictabilityEngine::PdfVisualizer
- Defined in:
- lib/predictability_engine/pdf_visualizer.rb,
lib/predictability_engine/pdf_visualizer/primitives.rb
Defined Under Namespace
Modules: Primitives
Class Method Summary collapse
- .draw_aging(pdf, work_items, **_opts) ⇒ Object
- .draw_cfd(pdf, work_items) ⇒ Object
- .draw_chart(pdf, chart_id, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
- .draw_forecasted_cfd(pdf, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
- .draw_scatter(pdf, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
- .draw_throughput(pdf, work_items) ⇒ Object
Class Method Details
.draw_aging(pdf, work_items, **_opts) ⇒ Object
17 18 19 20 |
# File 'lib/predictability_engine/pdf_visualizer.rb', line 17 def self.draw_aging(pdf, work_items, **_opts) data = Calculators::Aging.item_age_data(work_items) Primitives.(pdf, data.map { |d| d[:id].to_s }, data.map { |d| d[:age] }) end |
.draw_cfd(pdf, work_items) ⇒ Object
22 23 24 25 26 27 28 29 |
# File 'lib/predictability_engine/pdf_visualizer.rb', line 22 def self.draw_cfd(pdf, work_items) cfd_data = Calculators::Cfd.calculate(work_items).last(30) series = [ { label: 'Arrivals', values: cfd_data.map { |d| d[:arrived] }, color: '0000FF' }, { label: 'Departures', values: cfd_data.map { |d| d[:departed] }, color: '00FF00' } ] Primitives.draw_line_chart(pdf, cfd_data.map { |d| d[:date].to_s }, series) end |
.draw_chart(pdf, chart_id, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
7 8 9 10 11 12 13 14 15 |
# File 'lib/predictability_engine/pdf_visualizer.rb', line 7 def self.draw_chart(pdf, chart_id, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) case chart_id when :cfd_plot then draw_cfd(pdf, work_items) when :forecasted_cfd_plot then draw_forecasted_cfd(pdf, work_items, percentiles: percentiles) when :throughput_histogram then draw_throughput(pdf, work_items) when :cycle_time_scatter then draw_scatter(pdf, work_items, percentiles: percentiles) when :aging_wip then draw_aging(pdf, work_items, percentiles: percentiles) end end |
.draw_forecasted_cfd(pdf, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/predictability_engine/pdf_visualizer.rb', line 47 def self.draw_forecasted_cfd(pdf, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) forecast = Calculators::Cfd.forecast_series(work_items, percentiles: percentiles) return draw_cfd(pdf, work_items) unless forecast series = [ { label: 'Arrivals', values: forecast[:arrivals], color: '0000FF' }, { label: 'Departures', values: forecast[:departed], color: '00FF00' } ] f_colors = %w[E6B800 CC0000 800080 008080 333333] # Darker versions of yellow, red, magenta, cyan, gray percentiles.sort.each_with_index do |p, i| series << { label: "#{p}% Conf.", values: forecast[:forecasts][p], color: f_colors[i % f_colors.size] } end Primitives.draw_line_chart(pdf, forecast[:dates].map(&:to_s), series) end |
.draw_scatter(pdf, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/predictability_engine/pdf_visualizer.rb', line 36 def self.draw_scatter(pdf, work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) data = Calculators::CycleTime.completed_sorted(work_items) .map { |i| [i.end_date.to_s, i.cycle_time] } Primitives.draw_scatter_plot(pdf, data.map(&:first), data.map { |d| d[1] }) pcts = PredictabilityEngine.mapped_percentiles(work_items, percentiles) pdf.move_down 10 pdf.text "Percentiles: #{pcts.map { |p| "#{p[:label]}: #{p[:val]}" }.join(', ')}", size: 8 end |
.draw_throughput(pdf, work_items) ⇒ Object
31 32 33 34 |
# File 'lib/predictability_engine/pdf_visualizer.rb', line 31 def self.draw_throughput(pdf, work_items) counts = Calculators::Throughput.histogram_data(work_items) Primitives.(pdf, counts.map { |k, _v| k.to_s }, counts.map { |_k, v| v }) end |