Class: Monitor::Logmon

Inherits:
Object
  • Object
show all
Defined in:
lib/chef_monitor/logmon.rb

Instance Method Summary collapse

Instance Method Details

#runObject



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/chef_monitor/logmon.rb', line 21

def run
  conn = Bunny.new(:hostname => MQSERVER)
  conn.start

  ch = conn.create_channel
  q  = ch.queue(MQQUEUE, :durable => true)

  begin
    File.open(MON_FILE) do |mon|
      mon.extend(File::Tail)
      mon.interval = 5
      mon.backward(1)
      mon.tail { |line|
        data = scan(line)
        # skipping the objects 'checksum-.*' and 'reports'
        unless data.nil? || data['org'].nil? || data['object'] =~  /(^checksum-.*$|^reports$)/
          Monitor::Log.new(data, "INFO")
          q.publish(data, :persistent => true, :content_type => "application/json")
        end
      }
    end
  end
end

#scan(line) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/chef_monitor/logmon.rb', line 45

def scan(line)
  @regex = /(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) - (.{0})- \[([^\]]+?)\]  "(PUT|DELETE|POST) ([^\s]+?) (HTTP\/1\.1)" (\d+) "(.*)" (\d+) "-" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)" "(.*)"/
  if line =~ @regex
    data = {}
    data['time']    = $3
    data['user']    = $16
    data['server']  = LOGMONNAME
    data['org']     = $5.split('/')[2] unless $5.split('/')[2].nil?
    data['object']  = $5.split('/')[3] unless $5.split('/')[3].nil?
    data['name']    = $5.split('/')[4] unless $5.split('/')[4].nil?
    data['version'] = $5.split('/')[5] unless $5.split('/')[5].nil?
    data['action']  = $4
    return data.to_json
  end
  return nil
end