Introduction

This document captures steps for adding application specific error yaml files

Write app specific error yaml files

Write error yamls for your application and place them in your application repository.

Refer to Host.errors.yaml at https://github.com/openbmc/openpower-debug-collector/blob/master/org/open_power/

Makefile rules to run sdbus++ on error yaml files

Modify the Makefile.am as shown below for generation of error.cpp and erorr.hpp

org/open_power/Host/error.hpp: ${srcdir}/org/open_power/Host.errors.yaml
    @mkdir -p `dirname $@`
    $(SDBUSPLUSPLUS) -r $(srcdir) error exception-header org.open_power.Host > $@
org/open_power/Host/error.cpp: ${srcdir}/org/open_power/Host.errors.yaml
    @mkdir -p `dirname $@`
    $(SDBUSPLUSPLUS) -r $(srcdir) error exception-cpp org.open_power.Host > $@

Write native recipe to copy error yaml files

Application specific error yaml files need to be copied to a known location so that phosphor-logging can generate error metadata by parsing the error yaml files.

Refer to do_install_append method in openpower-debug-collector-error-native.bb at https://github.com/openbmc/openbmc/blob/master/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/debug/

Establish dependency with phosphor-logging

Establish dependency with phosphor-logging to ensure that error yaml files are copied to a known location before phosphor logging parses the error yaml files

Refer to phosphor-logging-error-logs-native.bbappend at https://github.com/openbmc/openbmc/blob/master/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/debug/

Generate application local elog-errors.hpp file

Applications should be independently compilable so it cannot have a dependency on the elog-errors.hpp generated by phosphor-logging

Generate application specific elog-errors.hpp using the elog-gen.py parser. In the future, elog-errors.hpp will be generated through autotools.

The application specific elog-errors.hpp is for the build process and the elog-errors.hpp from phosphor-logging will be used during elog commit/report

Example

python tools/elog-gen.py -y /home/OpenBmc/openpower-occ-control/ -u ./tools/ -t tools/phosphor-logging/templates/ -m elog-gen-template.mako.hpp -o elog-errors.hpp

Reporting error

To report (commit) the error follow the below format reportsdbusplus::exception_t(metadata)

example

#include <xyz/openbmc_project/Software/Version/error.hpp>
#include "elog-errors.hpp" #Use application specific header file

using error =
 sdbusplus::xyz::openbmc_project::Software::Version::Error::ManifestFileFailure;
using metadata =
phosphor::logging::xyz::openbmc_project::Software::Version::ManifestFileFailure;
report<error>(metadata::PATH(tarFilePath.c_str())););