class Logster::Group

Constants

GroupWeb
MAX_SIZE

Attributes

changed[RW]
count[RW]
key[R]
messages[R]
messages_keys[R]
pattern[RW]
timestamp[R]

Public Class Methods

from_json(json) click to toggle source
# File lib/logster/group.rb, line 18
def self.from_json(json)
  hash = JSON.parse(json)
  group = new(
    hash["key"],
    hash["messages_keys"],
    timestamp: hash["timestamp"] || 0,
    count: hash["count"] || 0
  )
  group.changed = false
  group
end
max_size() click to toggle source
# File lib/logster/group.rb, line 30
def self.max_size
  (defined?(@max_size) && @max_size) || MAX_SIZE
end
new(key, messages_keys = [], timestamp: 0, count: 0) click to toggle source
# File lib/logster/group.rb, line 10
def initialize(key, messages_keys = [], timestamp: 0, count: 0)
  @key = key
  @messages_keys = messages_keys || []
  @timestamp = timestamp
  @count = count
  @changed = true
end

Public Instance Methods

add_message(message) click to toggle source
# File lib/logster/group.rb, line 58
def add_message(message)
  if !@messages_keys.include?(message.key)
    @messages_keys.unshift(message.key)
    @count += 1
    @changed = true
  end
  if @timestamp < message.timestamp
    @timestamp = message.timestamp
    @messages_keys.unshift(@messages_keys.slice!(@messages_keys.index(message.key)))
    @changed = true
  end
  if self.count > max_size
    @messages_keys.slice!(max_size..-1)
    @changed = true
  end
end
changed?() click to toggle source
# File lib/logster/group.rb, line 104
def changed?
  @changed
end
messages=(messages) click to toggle source
# File lib/logster/group.rb, line 83
def messages=(messages)
  messages.compact!
  messages.uniq!(&:key)
  if messages.size > 0
    messages.sort_by!(&:timestamp)
    messages.reverse!
    messages.slice!(max_size..-1) if messages.size > max_size
    @messages = messages
    before = @messages_keys.sort
    @messages_keys = @messages.map(&:key)
    @timestamp = @messages[0].timestamp
    @changed = before != @messages_keys.sort
  else
    @messages_keys = []
    @messages = []
    @timestamp = 0
    @changed = true
  end
  @messages
end
remove_message(message) click to toggle source
# File lib/logster/group.rb, line 75
def remove_message(message)
  index = @messages_keys.index(message.key)
  if index
    @messages_keys.slice!(index)
    @changed = true
  end
end
to_h() click to toggle source
# File lib/logster/group.rb, line 34
def to_h
  {
    key: @key,
    messages_keys: @messages_keys,
    timestamp: @timestamp,
    count: @count
  }
end
to_h_web() click to toggle source
# File lib/logster/group.rb, line 43
def to_h_web
  {
    regex: @key,
    count: @count,
    timestamp: @timestamp,
    messages: @messages,
    severity: -1,
    group: true
  }
end
to_json(opts = nil) click to toggle source
# File lib/logster/group.rb, line 54
def to_json(opts = nil)
  JSON.fast_generate(self.to_h, opts)
end

Private Instance Methods

max_size() click to toggle source
# File lib/logster/group.rb, line 110
def max_size
  self.class.max_size
end