Class: PredictabilityEngine::Visualizer

Inherits:
Object
  • Object
show all
Defined in:
lib/predictability_engine/visualizer.rb

Class Method Summary collapse

Class Method Details

.aging_wip(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object



27
28
29
# File 'lib/predictability_engine/visualizer.rb', line 27

def self.aging_wip(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES)
  TerminalVisualizer.aging_wip(items, color: color, percentiles: percentiles)
end

.build_nav_bar(sub_reports) ⇒ Object



64
65
66
67
68
69
70
# File 'lib/predictability_engine/visualizer.rb', line 64

def self.build_nav_bar(sub_reports)
  return '' unless sub_reports&.any?

  view_items, dl_items = sub_reports.partition { |r| !r[:download] }
  html = view_nav_section(view_items) + export_nav_section(dl_items, view_items.any?)
  "<ul class='nav-links'>#{html}</ul>"
end

.cfd_plot(items, color: false) ⇒ Object



19
20
21
# File 'lib/predictability_engine/visualizer.rb', line 19

def self.cfd_plot(items, color: false)
  TerminalVisualizer.cfd_plot(items, color: color)
end

.cycle_time_scatter(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object



11
12
13
# File 'lib/predictability_engine/visualizer.rb', line 11

def self.cycle_time_scatter(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES)
  TerminalVisualizer.cycle_time_scatter(items, color: color, percentiles: percentiles)
end

.forecasted_cfd_plot(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object



23
24
25
# File 'lib/predictability_engine/visualizer.rb', line 23

def self.forecasted_cfd_plot(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES)
  TerminalVisualizer.forecasted_cfd_plot(items, color: color, percentiles: percentiles)
end


89
90
91
92
93
94
# File 'lib/predictability_engine/visualizer.rb', line 89

def self.nav_item(entry)
  return "<li class='nav-sep' aria-hidden='true'>|</li>" if entry[:separator]

  dl = entry[:download] ? ' download' : ''
  "<li><a href='#{entry[:url]}' class='#{'active' if entry[:active]}'#{dl}>#{entry[:label]}</a></li>"
end

.throughput_histogram(items, color: false) ⇒ Object



15
16
17
# File 'lib/predictability_engine/visualizer.rb', line 15

def self.throughput_histogram(items, color: false)
  TerminalVisualizer.throughput_histogram(items, color: color)
end

.to_full_html(content_or_chart, work_items = nil, **opts) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/predictability_engine/visualizer.rb', line 35

def self.to_full_html(content_or_chart, work_items = nil, **opts)
  title = opts.fetch(:title, 'Predictability Engine Dashboard')
  percentiles = opts.fetch(:percentiles, PredictabilityEngine::DEFAULT_PERCENTILES)
  sub_reports = opts.fetch(:sub_reports, nil)

  style = HTML_STYLE_LANDSCAPE
  body = HTML_LANDSCAPE_BODY
  summary = work_items ? SummaryVisualizer.metrics_html(work_items, percentiles: percentiles) : ''

  nav_bar = build_nav_bar(sub_reports)

  html = HTML_BASE.gsub('{{STYLE}}', style).gsub('{{BODY}}', body)
  html.gsub!('{{TITLE}}', title)
  html.gsub!('{{DATE}}', PredictabilityEngine.format_datetime(Time.now))
  html.gsub!('{{SUMMARY_CONTENT}}', summary)
  html.gsub!('{{NAV_BAR}}', nav_bar)

  content = prepare_html_content(content_or_chart, :landscape, html)
  # If it was a single chart, it might still have {{CHART_PANELS}} placeholder
  if html.include?('{{CHART_PANELS}}')
    panel = "<div class='chart-panel' style='grid-column: span 2; grid-row: span 2;'>" \
            "<div class='panel-header'>" \
            "<button class='chart-expand' onclick='toggleFullscreen(this)' title='Expand'></button></div>" \
            "<div class='chart-container'>#{content}</div></div>"
    html.gsub!('{{CHART_PANELS}}', panel)
  end
  html
end