# if you experience problems, check
# http://www.rsyslog.com/troubleshoot for assistance

# rsyslog v3: load input modules
# If you do not load inputs, nothing happens!
# You may need to set the module load path if modules are not found.
#
# Ported from debian's sysklogd.conf

# Journal-style logging
# Limit to no more than 2000 entries in one minute and enable the
# journal workaround to avoid duplicate entries
module(load="imjournal" StateFile="/var/log/state"
                        RateLimit.Interval="60"
                        RateLimit.Burst="2000")

# Template for IPMI SEL messages
# "<timestamp> <ID>,<Type>,<EventData>,[<Generator ID>,<Path>,<Direction>]"
template(name="IPMISELTemplate" type="list") {
    property(name="timereported" dateFormat="rfc3339")
    constant(value=" ")
    property(name="$!IPMI_SEL_RECORD_ID")
    constant(value=",")
    property(name="$!IPMI_SEL_RECORD_TYPE")
    constant(value=",")
    property(name="$!IPMI_SEL_DATA")
    constant(value=",")
    property(name="$!IPMI_SEL_GENERATOR_ID")
    constant(value=",")
    property(name="$!IPMI_SEL_SENSOR_PATH")
    constant(value=",")
    property(name="$!IPMI_SEL_EVENT_DIR")
    constant(value="\n")
}

# Template for Redfish messages
# "<timestamp> <MessageId>,<MessageArgs>"
template(name="RedfishTemplate" type="list") {
    property(name="timereported" dateFormat="rfc3339")
    constant(value=" ")
    property(name="$!REDFISH_MESSAGE_ID")
    constant(value=",")
    property(name="$!REDFISH_MESSAGE_ARGS")
    constant(value="\n")
}

# Template for Application Crashes
# "<timestamp> <MessageId>,<MessageArgs>"
template(name="CrashTemplate" type="list") {
    property(name="timereported" dateFormat="rfc3339")
    constant(value=" ")
    constant(value="OpenBMC.0.1.ServiceFailure")
    constant(value=",")
    property(name="$!UNIT")
    constant(value="\n")
}


# If the journal entry has the IPMI SEL MESSAGE_ID, save as IPMI SEL
# The MESSAGE_ID string is generated using journalctl and must match the
# MESSAGE_ID used in IPMI to correctly find the SEL entries.
if ($!MESSAGE_ID == "b370836ccf2f4850ac5bee185b77893a") then {
   action(type="omfile" file="/var/log/ipmi_sel" template="IPMISELTemplate")
}

# If the journal entry has a Redfish MessageId, save as a Redfish event
if ($!REDFISH_MESSAGE_ID != "") then {
   action(type="omfile" file="/var/log/redfish" template="RedfishTemplate")
}

# If the journal entry has a Exit Code, save as a Redfish event
if ($!EXIT_STATUS != "" and $!EXIT_STATUS != "0") then {
   action(type="omfile" file="/var/log/redfish" template="CrashTemplate")
}

#
# Include all config files in /etc/rsyslog.d/
#
$IncludeConfig /etc/rsyslog.d/*.conf
