Class: SendmailParser
- Inherits:
-
Object
- Object
- SendmailParser
- Defined in:
- lib/fluent/plugin/sendmailparser.rb
Instance Method Summary collapse
- #delay_parser(delay) ⇒ Object
- #from_line(entry) ⇒ Object
-
#initialize(conf) ⇒ SendmailParser
constructor
A new instance of SendmailParser.
- #parse(value) ⇒ Object
- #relay_parser(relays) ⇒ Object
- #status_parser(entry) ⇒ Object
- #to_line(entry) ⇒ Object
- #trim_bracket(val) ⇒ Object
Constructor Details
#initialize(conf) ⇒ SendmailParser
Returns a new instance of SendmailParser.
2 3 4 |
# File 'lib/fluent/plugin/sendmailparser.rb', line 2 def initialize(conf) @base_regexp = /^(?<time>\w+\s+\w+\s+\d+:\d+:\d+) (?<mta>[^ ]+) (?<procowner>[^\[]+)\[(?<procid>\d+)\]: (?<qid>[^ ]+): (?<entry>(?<type>[^=]+).+)$/; end |
Instance Method Details
#delay_parser(delay) ⇒ Object
91 92 93 94 95 96 |
# File 'lib/fluent/plugin/sendmailparser.rb', line 91 def delay_parser(delay) /((?<day>[0-9]*)\+)?(?<hms>[0-9]{2,2}:[0-9]{2,2}:[0-9]{2,2})/ =~ delay day = day.to_i dtime = Time.parse(hms) delay = (day * 24 * 60 * 60) + (dtime.hour * 60 * 60) + (dtime.min * 60) + (dtime.sec) end |
#from_line(entry) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/fluent/plugin/sendmailparser.rb', line 49 def from_line(entry) record = {} entry.split(", ").each {|param| key, val = param.split("=") record[key] = val } if record.has_key?("relay") record["relay_from"] = relay_parser(record["relay"]) record.delete("relay") end return record end |
#parse(value) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/fluent/plugin/sendmailparser.rb', line 6 def parse(value) m = @base_regexp.match(value) unless m # $log.warn "sendmail: pattern not match: #{value.inspect}" return nil end time = Time.parse(m["time"]).to_i || Fluent::Engine.now.to_i record = { "time" => time, "mta" => m["mta"], "qid" => m["qid"], "type" => m["type"], } case m["type"] when "from" fromline = self.from_line(m["entry"]) record.merge!(fromline) when "to" toline = self.to_line(m["entry"]) record.merge!(toline) else # not match m = nil end record end |
#relay_parser(relays) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/fluent/plugin/sendmailparser.rb', line 62 def relay_parser(relays) relay_host = nil relay_ip = nil relays.split(" ").each {|relay| if relay.index("[") == 0 return {"ip" => trim_bracket(relay), "host" => relay_host} else relay_host = relay end } return {"ip" => relay_ip, "host" => relay_host} end |
#status_parser(entry) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/fluent/plugin/sendmailparser.rb', line 75 def status_parser(entry) if entry.include?("stat=Sent") if entry.include?("mailer=local,") return "sent_local" else return "sent" end elsif entry.include?("dsn=5.") return "bounced" elsif entry.include?("stat=Deferred") return "deferred" else return "other" end end |
#to_line(entry) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/fluent/plugin/sendmailparser.rb', line 32 def to_line(entry) record = {} status = nil record["status_canonical"] = status_parser(entry) entry.split(", ").each {|param| key, val = param.split("=") record[key] = val } record["to"] = record["to"].split(",") if record.has_key?("relay") record["relay_to"] = relay_parser(record["relay"]) record.delete("relay") end record["delay_in_sec"] = delay_parser(record["delay"]) return record end |
#trim_bracket(val) ⇒ Object
98 99 100 |
# File 'lib/fluent/plugin/sendmailparser.rb', line 98 def trim_bracket(val) val[1..-2] end |