Class: PredictabilityEngine::Visualizer
- Inherits:
-
Object
- Object
- PredictabilityEngine::Visualizer
- Defined in:
- lib/predictability_engine/visualizer.rb
Class Method Summary collapse
- .aging_wip(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
- .build_nav_bar(sub_reports) ⇒ Object
- .cfd_plot(items, color: false) ⇒ Object
- .cycle_time_scatter(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
- .forecasted_cfd_plot(items, color: false, percentiles: PredictabilityEngine::DEFAULT_PERCENTILES) ⇒ Object
- .nav_item(entry) ⇒ Object
- .throughput_histogram(items, color: false) ⇒ Object
- .to_full_html(content_or_chart, work_items = nil, **opts) ⇒ Object
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.(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 |
.nav_item(entry) ⇒ Object
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) : '' = (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}}', ) 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 |