module Ops class LogScanner def initialize(matcher: LogPatternMatcher.new) @matcher = matcher end def ingest(text) matches = @matcher.scan(text) matches.each { |match| record_match(match) } matches.size end private def record_match(match) Ops::IncidentRecorder.record( kind: "log_pattern", severity: match.severity, title: "Log: #{match.name}", message: match.line.truncate(500), metadata: { "pattern" => match.name, "sample" => match.line }, fingerprint: "log_pattern:#{match.name}" ) end end end