Module: PredictabilityEngine::VegaVisualizer

Extended by:
TooltipHelpers
Defined in:
lib/predictability_engine/vega_visualizer.rb,
lib/predictability_engine/vega_visualizer/cfd_charts.rb,
lib/predictability_engine/vega_visualizer/cfd_layout.rb,
lib/predictability_engine/vega_visualizer/basic_charts.rb,
lib/predictability_engine/vega_visualizer/tooltip_helpers.rb,
lib/predictability_engine/vega_visualizer/aging_wip_visualizer.rb

Defined Under Namespace

Modules: AgingWipVisualizer, BasicCharts, CfdCharts, CfdLayout, TooltipHelpers

Constant Summary collapse

CHART_WIDTH =
500
CHART_HEIGHT =
300
LABEL_AXIS =
{ labelAngle: -45, labelOverlap: 'parity' }.freeze

Constants included from TooltipHelpers

TooltipHelpers::TOOLTIP_WRAP_WIDTH

Class Method Summary collapse

Methods included from TooltipHelpers

cfd_tooltip_fields, cycle_time_tooltip_field, item_href_and_tooltip, item_id_tooltip_field, standard_item_tooltip_fields, title_tooltip_field, url_href, wrap_tooltip_title

Class Method Details

.aging_wip(items, title: 'Aging Work In Progress', percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object



58
59
60
61
# File 'lib/predictability_engine/vega_visualizer.rb', line 58

def self.aging_wip(items, title: 'Aging Work In Progress',
                   percentiles: PredictabilityEngine::DEFAULT_PERCENTILES, **)
  AgingWipVisualizer.aging_wip(items, title: title, percentiles: percentiles, **)
end

.apply_standard_dims(chart, title: nil, padding: nil) ⇒ Object



18
19
20
21
22
23
# File 'lib/predictability_engine/vega_visualizer.rb', line 18

def self.apply_standard_dims(chart, title: nil, padding: nil)
  chart = chart.title(title) if title
  cfg = { autosize: { type: 'fit', contains: 'padding' }, axis: { grid: false } }
  cfg[:padding] = padding if padding
  chart.width('container').height('container').config(cfg)
end

.build_cfd_unified_data(data, percentiles) ⇒ Object



72
73
74
# File 'lib/predictability_engine/vega_visualizer.rb', line 72

def self.build_cfd_unified_data(data, percentiles)
  CfdLayout.build_unified_data(data, percentiles)
end

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



63
64
65
# File 'lib/predictability_engine/vega_visualizer.rb', line 63

def self.cfd(work_items, title: 'Cumulative Flow Diagram', history_range: nil, **_opts)
  CfdCharts.cfd(work_items, title: title, history_range: history_range)
end

.cfd_area_layer(pcts, legend: true) ⇒ Object



80
81
82
# File 'lib/predictability_engine/vega_visualizer.rb', line 80

def self.cfd_area_layer(pcts, legend: true)
  CfdLayout.area_layer(pcts, legend: legend)
end

.cfd_color_scale(pcts) ⇒ Object



76
77
78
# File 'lib/predictability_engine/vega_visualizer.rb', line 76

def self.cfd_color_scale(pcts)
  CfdLayout.color_scale(pcts)
end

.cfd_line_layer(_pcts) ⇒ Object



84
85
86
# File 'lib/predictability_engine/vega_visualizer.rb', line 84

def self.cfd_line_layer(_pcts)
  CfdLayout.line_layer
end

.cfd_vert_layers(forecast, percentiles) ⇒ Object



88
89
90
# File 'lib/predictability_engine/vega_visualizer.rb', line 88

def self.cfd_vert_layers(forecast, percentiles)
  CfdLayout.vert_layers(forecast, percentiles)
end

.cycle_time_bands(items, title: 'Cycle Time Bands Over Time') ⇒ Object



54
55
56
# File 'lib/predictability_engine/vega_visualizer.rb', line 54

def self.cycle_time_bands(items, title: 'Cycle Time Bands Over Time', **)
  BasicCharts.cycle_time_bands(items, title: title)
end

.cycle_time_scatter(items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES, title: 'Cycle Time Scatter Plot') ⇒ Object



45
46
47
48
# File 'lib/predictability_engine/vega_visualizer.rb', line 45

def self.cycle_time_scatter(items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES,
                            title: 'Cycle Time Scatter Plot', **)
  BasicCharts.cycle_time_scatter(items, percentiles, title: title)
end

.dashboard(items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object



99
100
101
102
103
104
# File 'lib/predictability_engine/vega_visualizer.rb', line 99

def self.dashboard(items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES)
  charts = [aging_wip(items), forecasted_cfd(items, percentiles: percentiles), cfd(items),
            cycle_time_scatter(items, percentiles: percentiles),
            throughput_histogram(items)]
  Vega.lite.vconcat(charts.map { |c| c.spec.except('$schema') })
end

.date_axis_base(title: 'Date') ⇒ Object



25
26
27
# File 'lib/predictability_engine/vega_visualizer.rb', line 25

def self.date_axis_base(title: 'Date')
  { field: 'date', type: 'temporal', title: title, axis: { format: '%Y-%m-%d' } }
end

.date_x_axis(title: 'Date', **opts) ⇒ Object



29
30
31
32
33
# File 'lib/predictability_engine/vega_visualizer.rb', line 29

def self.date_x_axis(title: 'Date', **opts)
  base = date_axis_base(title: title)
  base[:axis] = base[:axis].merge(labelAngle: -45).merge(opts)
  base
end

.forecasted_cfd(work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES, title: 'Forecasted Cumulative Flow Diagram', history_range: nil, **_opts) ⇒ Object



67
68
69
70
# File 'lib/predictability_engine/vega_visualizer.rb', line 67

def self.forecasted_cfd(work_items, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES,
                        title: 'Forecasted Cumulative Flow Diagram', history_range: nil, **_opts)
  CfdCharts.forecasted_cfd(work_items, percentiles, title, history_range: history_range)
end

.format_cfd_data(cfd) ⇒ Object



92
93
94
95
96
97
# File 'lib/predictability_engine/vega_visualizer.rb', line 92

def self.format_cfd_data(cfd)
  cfd.flat_map do |d|
    [{ date: PredictabilityEngine.format_date(d[:date]), count: d[:arrived], type: 'Arrivals', order: 0 },
     { date: PredictabilityEngine.format_date(d[:date]), count: d[:departed], type: 'Departures', order: 1 }]
  end
end

.quantitative_x_axisObject



36
# File 'lib/predictability_engine/vega_visualizer.rb', line 36

def self.quantitative_x_axis(...) = quantitative_axis(...)

.quantitative_y_axisObject



35
# File 'lib/predictability_engine/vega_visualizer.rb', line 35

def self.quantitative_y_axis(...) = quantitative_axis(...)

.throughput_histogram(items, title: 'Throughput Histogram') ⇒ Object



50
51
52
# File 'lib/predictability_engine/vega_visualizer.rb', line 50

def self.throughput_histogram(items, title: 'Throughput Histogram', **)
  BasicCharts.throughput_histogram(items, title: title)
end