blob: f2883b701c59a66316df75b8eba5ecede5de4d69 [file] [log] [blame]
Deepak Kodihalli682326a2017-03-06 05:26:53 -06001#include "config.h"
Patrick Venturef18bf832018-10-26 18:14:00 -07002
Deepak Kodihalli682326a2017-03-06 05:26:53 -06003#include "elog_meta.hpp"
4
5namespace phosphor
6{
7namespace logging
8{
9namespace metadata
10{
11namespace associations
12{
13
14#if defined PROCESS_META
15
16template <>
Patrick Venturef18bf832018-10-26 18:14:00 -070017void build<xyz::openbmc_project::Common::Callout::Device::CALLOUT_DEVICE_PATH>(
18 const std::string& match, const std::vector<std::string>& data,
Deepak Kodihalli682326a2017-03-06 05:26:53 -060019 AssociationList& list)
20{
21 std::map<std::string, std::string> metadata;
22 parse(data, metadata);
23 auto iter = metadata.find(match);
Patrick Venturef18bf832018-10-26 18:14:00 -070024 if (metadata.end() != iter)
Deepak Kodihalli682326a2017-03-06 05:26:53 -060025 {
Patrick Venturef18bf832018-10-26 18:14:00 -070026 auto comp = [](const auto& first, const auto& second) {
Patrick Venture30047bf2018-11-01 18:52:15 -070027 return (std::strcmp(std::get<0>(first), second) < 0);
Deepak Kodihalli682326a2017-03-06 05:26:53 -060028 };
Patrick Venturef18bf832018-10-26 18:14:00 -070029 auto callout = std::lower_bound(callouts.begin(), callouts.end(),
30 (iter->second).c_str(), comp);
31 if ((callouts.end() != callout) &&
Patrick Venture30047bf2018-11-01 18:52:15 -070032 !std::strcmp((iter->second).c_str(), std::get<0>(*callout)))
Deepak Kodihalli682326a2017-03-06 05:26:53 -060033 {
Patrick Venturef18bf832018-10-26 18:14:00 -070034 list.emplace_back(std::make_tuple(
35 CALLOUT_FWD_ASSOCIATION, CALLOUT_REV_ASSOCIATION,
36 std::string(INVENTORY_ROOT) + std::get<1>(*callout)));
Deepak Kodihalli682326a2017-03-06 05:26:53 -060037 }
38 }
39}
40
Tom Joseph213aaf62017-07-25 00:02:09 +053041template <>
Patrick Venturef18bf832018-10-26 18:14:00 -070042void build<
43 xyz::openbmc_project::Common::Callout::Inventory::CALLOUT_INVENTORY_PATH>(
44 const std::string& match, const std::vector<std::string>& data,
Tom Joseph213aaf62017-07-25 00:02:09 +053045 AssociationList& list)
46{
47 std::map<std::string, std::string> metadata;
48 parse(data, metadata);
49 auto iter = metadata.find(match);
50 if (metadata.end() != iter)
51 {
52 list.emplace_back(std::make_tuple(CALLOUT_FWD_ASSOCIATION,
53 CALLOUT_REV_ASSOCIATION,
54 std::string(iter->second.c_str())));
55 }
56}
57
Deepak Kodihalli682326a2017-03-06 05:26:53 -060058#endif
59
60} // namespace associations
61} // namespace metadata
62} // namespace logging
63} // namespace phosphor