Class: Lyra::Visualization::Timeline
- Inherits:
-
Object
- Object
- Lyra::Visualization::Timeline
- Defined in:
- lib/lyra/visualization/timeline.rb
Overview
Timeline visualization for event flows
Instance Method Summary collapse
-
#initialize(events) ⇒ Timeline
constructor
A new instance of Timeline.
-
#to_ascii ⇒ Object
Generate ASCII timeline.
-
#to_d3_json ⇒ Object
Generate JSON for D3.js visualization.
-
#to_data ⇒ Object
Generate timeline data for visualization.
-
#to_html ⇒ Object
Generate timeline HTML.
-
#to_mermaid ⇒ Object
Generate Mermaid diagram.
Constructor Details
#initialize(events) ⇒ Timeline
Returns a new instance of Timeline.
5 6 7 |
# File 'lib/lyra/visualization/timeline.rb', line 5 def initialize(events) @events = events.sort_by { |e| (e) } end |
Instance Method Details
#to_ascii ⇒ Object
Generate ASCII timeline
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File 'lib/lyra/visualization/timeline.rb', line 91 def to_ascii lines = ["Event Timeline", "=" * 80, ""] @events.each do |event| time_str = (event).strftime("%Y-%m-%d %H:%M:%S") pii_marker = has_pii?(event) ? " [PII]" : "" lines << "#{time_str} | #{event_model_class(event)}##{event_model_id(event)}" lines << " └─ #{event_operation(event).to_s.upcase}#{pii_marker}" changes = event_changes(event) if changes.any? changes.each do |field, (old_val, new_val)| lines << " • #{field}: #{old_val} → #{new_val}" end end lines << "" end lines.join("\n") end |
#to_d3_json ⇒ Object
Generate JSON for D3.js visualization
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/lyra/visualization/timeline.rb', line 115 def to_d3_json { nodes: @events.map.with_index do |event, i| { id: event.event_id, index: i, timestamp: (event).to_i, label: "#{event_model_class(event)}##{event_model_id(event)}", operation: event_operation(event), has_pii: has_pii?(event), group: event_model_class(event), user_id: event.[:user_id] } end, links: build_links(@events) }.to_json end |
#to_data ⇒ Object
Generate timeline data for visualization
58 59 60 61 62 63 64 |
# File 'lib/lyra/visualization/timeline.rb', line 58 def to_data { events: timeline_events, groups: event_groups, metadata: } end |
#to_html ⇒ Object
Generate timeline HTML
67 68 69 |
# File 'lib/lyra/visualization/timeline.rb', line 67 def to_html TimelineHtmlBuilder.new(@events).build end |
#to_mermaid ⇒ Object
Generate Mermaid diagram
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/lyra/visualization/timeline.rb', line 72 def to_mermaid lines = ["gantt"] lines << " title Event Timeline" lines << " dateFormat YYYY-MM-DD HH:mm:ss" lines << "" @events.group_by { |e| event_model_class(e) }.each do |model_class, events| lines << " section #{model_class}" events.each do |event| label = "#{event_operation(event)} ##{event_model_id(event)}" = (event).strftime("%Y-%m-%d %H:%M:%S") lines << " #{label} :#{}, 1s" end end lines.join("\n") end |