Module: NagiosLogger

Defined in:
lib/nagios_logger.rb

Constant Summary collapse

SERVICE_LUT =

CPU on remaccess Рабочий сервер CPU on ra Тестовый сервер HTTP УРМ HTTP-work СОД HTTP-lesson Тестовый СОД Соответствие уровней оповещений в логе выводимым в таблице:

CRITICAL Ошибка WARNING Предупреждение

{
 "CPU on ra" => "Тестовый сервер",
 "CPU on remaccess" => "Рабочий сервер",
 "HTTP" => "УРМ",
 "HTTP-work" => "СОД",
 "HTTP-lesson" => "Тестовый СОД"
}
LEVEL_LUT =
{
 "CRITICAL" => "Ошибка",
 "WARNING" => "Предупреждение"
}

Instance Method Summary collapse

Instance Method Details

#load_file(fname) ⇒ Object



37
38
39
40
41
42
43
44
45
# File 'lib/nagios_logger.rb', line 37

def load_file(fname)
 data = []
 File.open(fname, "r") do |f|
  f.readlines.each do |line|
   data << line
  end
 end
 data
end

#load_file_list(pref) ⇒ Object



25
26
27
# File 'lib/nagios_logger.rb', line 25

def load_file_list(pref)
 Dir[File.join(pref, "*")].map{|n| File.basename(n) }
end

#load_files(pref, mask) ⇒ Object



29
30
31
32
33
34
35
# File 'lib/nagios_logger.rb', line 29

def load_files(pref, mask)
 data = []
 Dir[File.expand_path(File.join(pref, mask))].each do |fname|
  data += load_file(fname)
 end
 data
end

#make_events(sites) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/nagios_logger.rb', line 47

def make_events(sites)
 events = []
 event = []
 sites.each do |k, v|
  v.each do |key, val|
   val.each do | it |
    event << it
    if it[:level] == "OK"
     events << event.dup
     event.clear
    end
   end
  end
 end
 events.sort{|a, b| a[:stamp] <=> b[:stamp] }
end

#parse_line(line) ⇒ Object



64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/nagios_logger.rb', line 64

def parse_line(line)
 data = {}
 line.force_encoding("KOI8-R").encode("UTF-8").scan(/^\[(\d+)\]\s+(.+)$/u) do |m|
  unless m[0]
   #$stderr << m
   return nil
  end
  if m[1] !~ /^SERVICE ALERT/
   return nil
  end
  data.merge!(:stamp => Time.at(m[0].to_i))
  m[1].scan(/SERVICE ALERT:\s+(.+?);(.+?);(.+?);(.+?);(.+?);(.+)$/) do |n|
   data[:host] = n[0]
   data[:service] = n[1]
   data[:level] = n[2]
   data[:type] = n[3]
   data[:count] = n[4]
   data[:message] = n[5]
  end
  return nil unless SERVICE_LUT.has_key?(data[:service])
 end
 data[:service] = SERVICE_LUT[data[:service]]
 data
end

#place_host(hsh, sites) ⇒ Object



89
90
91
92
93
94
95
96
97
# File 'lib/nagios_logger.rb', line 89

def place_host(hsh, sites)
 unless sites.has_key?(hsh[:host])
  sites[hsh[:host]] = {}
 end
 unless sites[hsh[:host]].has_key?(hsh[:service])
  sites[hsh[:host]][hsh[:service]] = []
 end
 sites[hsh[:host]][hsh[:service]] << hsh
end

#sort_sites(sites) ⇒ Object



99
100
101
102
103
104
105
# File 'lib/nagios_logger.rb', line 99

def sort_sites(sites)
 sites.each do |k, v|
  v.each do |key, val|
   val.sort!{|a, b| a[:stamp] <=> b[:stamp] }
  end
 end
end