Module: PredictabilityEngine::VegaVisualizer::CfdCharts

Defined in:
lib/predictability_engine/vega_visualizer/cfd_charts.rb

Class Method Summary collapse

Class Method Details

.cfd(work_items, title: 'Cumulative Flow Diagram', history_range: nil) ⇒ Object



6
7
8
9
10
11
12
# File 'lib/predictability_engine/vega_visualizer/cfd_charts.rb', line 6

def self.cfd(work_items, title: 'Cumulative Flow Diagram', history_range: nil)
  data = Calculators::Cfd.calculate(work_items)
  days = Duration.parse(history_range)
  data = data.last(days) if days
  formatted = VegaVisualizer.format_cfd_data(data)
  render_cfd(formatted, [], title)
end

.cfd_layers(percentiles, forecast) ⇒ Object



39
40
41
42
43
44
45
# File 'lib/predictability_engine/vega_visualizer/cfd_charts.rb', line 39

def self.cfd_layers(percentiles, forecast)
  layers = [VegaVisualizer.cfd_area_layer(percentiles, legend: !percentiles.empty?)]
  return layers unless forecast

  layers + [VegaVisualizer.cfd_line_layer(percentiles),
            *VegaVisualizer.cfd_vert_layers(forecast, percentiles)]
end

.forecasted_cfd(work_items, percentiles, title, history_range: nil) ⇒ Object



14
15
16
17
18
19
20
# File 'lib/predictability_engine/vega_visualizer/cfd_charts.rb', line 14

def self.forecasted_cfd(work_items, percentiles, title, history_range: nil)
  data = Calculators::Cfd.forecast_series(work_items, percentiles: percentiles, history_range: history_range)
  return cfd(work_items, title: title) unless data

  unified = VegaVisualizer.build_cfd_unified_data(data, percentiles)
  render_cfd(unified, percentiles, title, forecast: data)
end

.render_cfd(data, percentiles, title, forecast: nil) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/predictability_engine/vega_visualizer/cfd_charts.rb', line 22

def self.render_cfd(data, percentiles, title, forecast: nil)
  dom, range = VegaVisualizer.cfd_color_scale(percentiles)
  chart = base_cfd_chart(data, dom, range)
          .layer(cfd_layers(percentiles, forecast))
  resolved_title = forecast ? forecast_title(title) : title
  padding = forecast ? { right: 80, top: 30 } : nil
  VegaVisualizer.apply_standard_dims(chart, title: resolved_title, padding: padding)
end