Class: EventSystem::Visualization::TimelineGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/event_system/visualization/timeline_generator.rb

Overview

A utility class for generating HTML timeline visualizations of events

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(storage) ⇒ TimelineGenerator

Initialize a new timeline generator

Parameters:



15
16
17
# File 'lib/event_system/visualization/timeline_generator.rb', line 15

def initialize(storage)
  @storage = storage
end

Instance Attribute Details

#storageObject (readonly)

Returns the value of attribute storage.



11
12
13
# File 'lib/event_system/visualization/timeline_generator.rb', line 11

def storage
  @storage
end

Instance Method Details

#event_summary(session_id = nil) ⇒ Hash

Generate a summary of events by type

Parameters:

  • session_id (String, nil) (defaults to: nil)

    The session ID to analyze, or latest if nil

Returns:

  • (Hash)

    Summary statistics by event type



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/event_system/visualization/timeline_generator.rb', line 51

def event_summary(session_id = nil)
  session_id ||= latest_session_id
  events = @storage.load_session(session_id)

  summary = Hash.new(0)
  events.each do |event|
    summary[event.type] += 1
  end

  summary
end

#generate_timeline(session_id = nil, output_file = nil) ⇒ String?

Generates HTML timeline visualization for a session

Parameters:

  • session_id (String, nil) (defaults to: nil)

    The session ID to visualize, or latest if nil

  • output_file (String, nil) (defaults to: nil)

    The HTML file path to write, or auto-generated if nil

Returns:

  • (String, nil)

    The path to the generated HTML file, or nil if no events



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/event_system/visualization/timeline_generator.rb', line 23

def generate_timeline(session_id = nil, output_file = nil)
  session_id ||= latest_session_id
  output_file ||= "event_timeline_#{session_id}.html"

  events = @storage.load_session(session_id)
  return nil if events.empty?

  html = generate_html(events, session_id)

  FileUtils.mkdir_p('event_visualizations')
  output_path = File.join('event_visualizations', output_file)
  File.write(output_path, html)

  output_path
end

#latest_session_idString?

Find the most recent session ID

Returns:

  • (String, nil)

    The latest session ID, or nil if no sessions



41
42
43
44
45
46
# File 'lib/event_system/visualization/timeline_generator.rb', line 41

def latest_session_id
  sessions = @storage.list_sessions
  return nil if sessions.empty?

  sessions.max
end

#timeline_data(session_id = nil) ⇒ Array<Hash>

Generate a timeline data structure (for custom visualizations)

Parameters:

  • session_id (String, nil) (defaults to: nil)

    The session ID to analyze, or latest if nil

Returns:

  • (Array<Hash>)

    Timeline data structure



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/event_system/visualization/timeline_generator.rb', line 66

def timeline_data(session_id = nil)
  session_id ||= latest_session_id
  events = @storage.load_session(session_id)

  events.map do |event|
    {
      id: event.id,
      type: event.type,
      timestamp: event.timestamp.iso8601(3),
      source: event.source_to_string,
      data: event.data,
      duration: calculate_duration(event, events)
    }
  end
end