Class: Tina4::MessageLog

Inherits:
Object
  • Object
show all
Defined in:
lib/tina4/dev_admin.rb

Overview

Thread-safe in-memory message log for dev dashboard

Defined Under Namespace

Classes: Entry

Instance Method Summary collapse

Constructor Details

#initializeMessageLog

Returns a new instance of MessageLog.



15
16
17
18
# File 'lib/tina4/dev_admin.rb', line 15

def initialize
  @entries = []
  @mutex = Mutex.new
end

Instance Method Details

#clear(category: nil) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/tina4/dev_admin.rb', line 40

def clear(category: nil)
  @mutex.synchronize do
    if category
      @entries.reject! { |e| e.category == category.to_s }
    else
      @entries.clear
    end
  end
end

#countObject



50
51
52
53
54
55
56
57
# File 'lib/tina4/dev_admin.rb', line 50

def count
  @mutex.synchronize do
    counts = Hash.new(0)
    @entries.each { |e| counts[e.category] += 1 }
    counts["total"] = @entries.size
    counts
  end
end

#get(category: nil) ⇒ Object



33
34
35
36
37
38
# File 'lib/tina4/dev_admin.rb', line 33

def get(category: nil)
  @mutex.synchronize do
    list = category ? @entries.select { |e| e.category == category.to_s } : @entries.dup
    list.reverse.map { |e| { timestamp: e.timestamp, category: e.category, level: e.level, message: e.message } }
  end
end

#log(category, level, message) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/tina4/dev_admin.rb', line 20

def log(category, level, message)
  @mutex.synchronize do
    @entries << Entry.new(
      timestamp: Time.now.utc.iso8601(3),
      category: category.to_s,
      level: level.to_s.upcase,
      message: message.to_s
    )
    # Keep last 500 entries
    @entries.shift if @entries.size > 500
  end
end