1 #include <CLI/CLI.hpp> 2 #include <nlohmann/json.hpp> 3 #include <phosphor-logging/commit.hpp> 4 #include <sdbusplus/exception.hpp> 5 6 // We don't actually use the Logging events, but we need to include the 7 // header in order to force linking against the PDI library. 8 #include <xyz/openbmc_project/Logging/event.hpp> 9 10 #include <iostream> 11 #include <string> 12 13 void list_all() 14 { 15 std::cout << "Known events:" << std::endl; 16 for (const auto& e : sdbusplus::exception::known_events()) 17 { 18 std::cout << " " << e << std::endl; 19 } 20 } 21 22 int generate_event(const std::string& eventId, const nlohmann::json& data) 23 { 24 if (eventId.empty()) 25 { 26 std::cerr << "event required" << std::endl; 27 return 1; 28 } 29 30 nlohmann::json j = {{eventId, data}}; 31 32 try 33 { 34 sdbusplus::exception::throw_via_json(j); 35 } 36 catch (sdbusplus::exception::generated_event_base& e) 37 { 38 auto path = lg2::details::commit(std::move(e)); 39 std::cout << path.str << std::endl; 40 return 0; 41 } 42 43 std::cerr << "Unknown event: " << eventId << std::endl; 44 return 1; 45 } 46 47 int main(int argc, char** argv) 48 { 49 CLI::App app{"log-create"}; 50 51 std::string jsonStr; 52 app.add_option("-j,--json", jsonStr, "Event data as a JSON object") 53 ->default_val("{}"); 54 55 std::string event{}; 56 auto event_option = app.add_option("event", event, "Event name"); 57 58 bool listOnly; 59 app.add_flag("-l,--list", listOnly, "List all events") 60 ->excludes(event_option); 61 62 CLI11_PARSE(app, argc, argv); 63 64 if (listOnly) 65 { 66 list_all(); 67 return 0; 68 } 69 70 return generate_event(event, nlohmann::json::parse(jsonStr)); 71 } 72