Providers/Modules/nxOMSAuditdPlugin/plugin/auditd_plugin_lib.rb (115 lines of code) (raw):

require 'yajl' require 'yajl/json_gem' require 'securerandom' # SecureRandom.uuid require_relative 'oms_common' module OMS class AuditdPlugin def initialize(log) @log = log end def transform_and_wrap(event, hostname, time) if event.nil? @log.error "Transformation of Auditd Plugin input failed; Empty input" return nil end if !event.has_key?("records") or event["records"].nil? @log.error "Transformation of Auditd Plugin input failed; Missing field 'records'" return nil end if !event["records"].is_a?(Array) or event["records"].size == 0 @log.error "Transformation of Auditd Plugin input failed; Invalid 'records' value" return nil end if !event.has_key?("Timestamp") or event["Timestamp"].nil? @log.error "Transformation of Auditd Plugin input failed; Missing field 'Timestamp'" return nil end if !event.has_key?("SerialNumber") or event["SerialNumber"].nil? @log.error "Transformation of Auditd Plugin input failed; Missing field 'SerialNumber'" return nil end records = [] event["records"].each do |record| if !record.is_a?(Hash) || record.empty? @log.error "Transformation of Auditd Plugin input failed; Invalid data in data record" return nil end record["Timestamp"] = OMS::Common.format_time(event["Timestamp"].to_f) record["AuditID"] = event["Timestamp"] + ":" + event["SerialNumber"].to_s record["SerialNumber"] = event["SerialNumber"] record["Computer"] = hostname if event.has_key?("ProcessFlags") record["ProcessFlags"] = event["ProcessFlags"] end records.push(record) end wrapper = { "DataType"=>"LINUX_AUDITD_BLOB", "IPName"=>"Security", "DataItems"=>records } return wrapper end end # class class AuditdDSCLog def initialize(log) @log = log end def transform(record, hostname, time) operation_name = "#failed#" operation_result = "" dsc_version = "" has_auditd = false auditd_pid = 0 auomscollect_pid = 0 auoms_pid = 0 status_regex = /^STATUS:(?<operation_name>(Test_Start|Test_End|Set_Start|Set_End)):<(?<operation_result>[^>]*)>:(?<version>[^:]*):(?<has_auditd>(true|false)):(?<auditd_pid>[0-9]+):(?<auomscollect_pid>[0-9]+):(?<auoms_pid>[0-9]+)/ status_regex.match(record["message"]) { |match| operation_name = match["operation_name"] operation_result = match["operation_result"] dsc_version = match["version"] if match["has_auditd"] == "true" has_auditd = true end auditd_pid = match["auditd_pid"].to_i auomscollect_pid = match["auomscollect_pid"].to_i auoms_pid = match["auoms_pid"].to_i } if operation_name == "#failed#" @log.error "Failed to parse STATUS message in DSC Log" return {} end dataitem = {} dataitem["Timestamp"] = OMS::Common.format_time(time) dataitem["Computer"] = hostname dataitem["RecordType"] = "AUOMS_METRIC" dataitem["RecordTypeCode"] = 10006 dataitem["Namespace"] = "DSC" dataitem["Name"] = operation_name dataitem["version"] = dsc_version dataitem["Message"] = operation_result dataitem["Data"] = { "has_auditd"=>has_auditd, "auditd_pid"=>auditd_pid, "auomscollect_pid"=>auomscollect_pid, "auoms_pid"=>auoms_pid }.to_json @log.info "nxOMSAuditdPlugin STATUS: " + dataitem.to_s return dataitem end def transform_and_wrap(record, hostname, time) if record.is_a?(Hash) && !record.empty? && record.has_key?("message") && record["message"].start_with?("STATUS:") dataitem = transform(record, hostname, time) if !dataitem.empty? wrapper = { "DataType"=>"LINUX_AUDITD_BLOB", "IPName"=>"Security", "DataItems"=>[dataitem] } return wrapper end end return {} end end # class end # module