xref: /openbmc/phosphor-logging/elog_meta.cpp (revision 075c79237505ea3b810a461f5f514e4d520a0c44)
1682326a1SDeepak Kodihalli #include "config.h"
2f18bf836SPatrick Venture 
3682326a1SDeepak Kodihalli #include "elog_meta.hpp"
4682326a1SDeepak Kodihalli 
5682326a1SDeepak Kodihalli namespace phosphor
6682326a1SDeepak Kodihalli {
7682326a1SDeepak Kodihalli namespace logging
8682326a1SDeepak Kodihalli {
9682326a1SDeepak Kodihalli namespace metadata
10682326a1SDeepak Kodihalli {
11682326a1SDeepak Kodihalli namespace associations
12682326a1SDeepak Kodihalli {
13682326a1SDeepak Kodihalli 
14682326a1SDeepak Kodihalli #if defined PROCESS_META
15682326a1SDeepak Kodihalli 
16682326a1SDeepak Kodihalli template <>
176ddbf69eSWilly Tu void build<xyz::openbmc_project::common::callout::Device::CALLOUT_DEVICE_PATH>(
18f18bf836SPatrick Venture     const std::string& match, const std::vector<std::string>& data,
19682326a1SDeepak Kodihalli     AssociationList& list)
20682326a1SDeepak Kodihalli {
21682326a1SDeepak Kodihalli     std::map<std::string, std::string> metadata;
22682326a1SDeepak Kodihalli     parse(data, metadata);
23682326a1SDeepak Kodihalli     auto iter = metadata.find(match);
24682326a1SDeepak Kodihalli     if (metadata.end() != iter)
25682326a1SDeepak Kodihalli     {
26f18bf836SPatrick Venture         auto comp = [](const auto& first, const auto& second) {
2730047bf9SPatrick Venture             return (std::strcmp(std::get<0>(first), second) < 0);
28682326a1SDeepak Kodihalli         };
29f18bf836SPatrick Venture         auto callout = std::lower_bound(callouts.begin(), callouts.end(),
30f18bf836SPatrick Venture                                         (iter->second).c_str(), comp);
31682326a1SDeepak Kodihalli         if ((callouts.end() != callout) &&
3230047bf9SPatrick Venture             !std::strcmp((iter->second).c_str(), std::get<0>(*callout)))
33682326a1SDeepak Kodihalli         {
34f18bf836SPatrick Venture             list.emplace_back(std::make_tuple(
35f18bf836SPatrick Venture                 CALLOUT_FWD_ASSOCIATION, CALLOUT_REV_ASSOCIATION,
36f18bf836SPatrick Venture                 std::string(INVENTORY_ROOT) + std::get<1>(*callout)));
37682326a1SDeepak Kodihalli         }
38682326a1SDeepak Kodihalli     }
39682326a1SDeepak Kodihalli }
40682326a1SDeepak Kodihalli 
41213aaf6fSTom Joseph template <>
42f18bf836SPatrick Venture void build<
436ddbf69eSWilly Tu     xyz::openbmc_project::common::callout::Inventory::CALLOUT_INVENTORY_PATH>(
44f18bf836SPatrick Venture     const std::string& match, const std::vector<std::string>& data,
45213aaf6fSTom Joseph     AssociationList& list)
46213aaf6fSTom Joseph {
47213aaf6fSTom Joseph     std::map<std::string, std::string> metadata;
48213aaf6fSTom Joseph     parse(data, metadata);
49213aaf6fSTom Joseph     auto iter = metadata.find(match);
50213aaf6fSTom Joseph     if (metadata.end() != iter)
51213aaf6fSTom Joseph     {
52*075c7923SPatrick Williams         list.emplace_back(
53*075c7923SPatrick Williams             std::make_tuple(CALLOUT_FWD_ASSOCIATION, CALLOUT_REV_ASSOCIATION,
54213aaf6fSTom Joseph                             std::string(iter->second.c_str())));
55213aaf6fSTom Joseph     }
56213aaf6fSTom Joseph }
57213aaf6fSTom Joseph 
58682326a1SDeepak Kodihalli #endif
59682326a1SDeepak Kodihalli 
60682326a1SDeepak Kodihalli } // namespace associations
61682326a1SDeepak Kodihalli } // namespace metadata
62682326a1SDeepak Kodihalli } // namespace logging
63682326a1SDeepak Kodihalli } // namespace phosphor
64