blob: 3664550774e3e272c5563082be19fdfc669347a5 [file] [log] [blame]
Zane Shelleyf685afd2021-02-15 15:39:44 -06001#pragma once
2
Zane Shelleyc85716c2021-08-17 10:54:06 -05003#include <analyzer/callout.hpp>
Zane Shelley95135822021-08-23 09:00:05 -05004#include <analyzer/guard.hpp>
Zane Shelley8af9e462021-03-11 10:44:28 -06005#include <hei_main.hpp>
Zane Shelleyf685afd2021-02-15 15:39:44 -06006#include <nlohmann/json.hpp>
7
8namespace analyzer
9{
10
Zane Shelley64791cf2021-02-15 17:02:37 -060011/**
12 * @brief Data regarding required service actions based on the hardware error
13 * analysis.
14 */
15class ServiceData
16{
17 public:
Zane Shelley8af9e462021-03-11 10:44:28 -060018 /**
19 * @brief Constructor from components.
20 * @param The signature of the root cause attention.
Zane Shelleyca496192021-08-09 12:05:52 -050021 * @param True if the signature list contained a system checkstop attention.
22 * False, otherwise.
Zane Shelley8af9e462021-03-11 10:44:28 -060023 */
Zane Shelleyca496192021-08-09 12:05:52 -050024 ServiceData(const libhei::Signature& i_rootCause, bool i_isCheckstop) :
25 iv_rootCause(i_rootCause), iv_isCheckstop(i_isCheckstop)
Zane Shelley8af9e462021-03-11 10:44:28 -060026 {}
Zane Shelley64791cf2021-02-15 17:02:37 -060027
28 /** @brief Destructor. */
29 ~ServiceData() = default;
30
31 /** @brief Copy constructor. */
32 ServiceData(const ServiceData&) = default;
33
34 /** @brief Assignment operator. */
35 ServiceData& operator=(const ServiceData&) = default;
36
37 private:
Zane Shelley8af9e462021-03-11 10:44:28 -060038 /** The signature of the root cause attention. */
39 const libhei::Signature iv_rootCause;
40
Zane Shelleyca496192021-08-09 12:05:52 -050041 /** True if the signature list contained a system checkstop attention.
42 * False, otherwise. */
43 const bool iv_isCheckstop;
44
Zane Shelley64791cf2021-02-15 17:02:37 -060045 /** The list of callouts that will be added to a PEL. */
Zane Shelleyc85716c2021-08-17 10:54:06 -050046 nlohmann::json iv_calloutList = nlohmann::json::array();
Zane Shelley64791cf2021-02-15 17:02:37 -060047
Zane Shelley5f6e3de2021-02-23 13:57:37 -060048 /** The list of hardware guard requests. Some information will be added to
Zane Shelley95135822021-08-23 09:00:05 -050049 * the PEL, but the actual guard record will be created after submitting
50 * the PEL. */
51 std::vector<Guard> iv_guardList;
Zane Shelley5f6e3de2021-02-23 13:57:37 -060052
Zane Shelley64791cf2021-02-15 17:02:37 -060053 public:
Zane Shelley8af9e462021-03-11 10:44:28 -060054 /** @return The signature of the root cause attention. */
55 const libhei::Signature& getRootCause() const
56 {
57 return iv_rootCause;
58 }
59
Zane Shelleyca496192021-08-09 12:05:52 -050060 /** @return True if the signature list contained a system checkstop
61 * attention. False, otherwise. */
62 bool queryCheckstop() const
63 {
64 return iv_isCheckstop;
65 }
66
Zane Shelleyc85716c2021-08-17 10:54:06 -050067 /**
68 * @brief Add callout information to the callout list.
69 * @param The JSON object for this callout.
70 */
71 void addCallout(const nlohmann::json& i_callout)
Zane Shelley64791cf2021-02-15 17:02:37 -060072 {
73 iv_calloutList.push_back(i_callout);
74 }
75
Zane Shelley95135822021-08-23 09:00:05 -050076 /**
77 * @brief Add a guard request to the guard list.
78 * @param i_path Entity path for the target part.
79 * @param i_guard True, if the part should be guarded. False, otherwise.
80 */
81 void addGuard(const std::string& i_path, bool i_guard)
Zane Shelley5f6e3de2021-02-23 13:57:37 -060082 {
Zane Shelley95135822021-08-23 09:00:05 -050083 Guard::Type guardType = Guard::Type::NONE;
84 if (i_guard)
85 {
86 // The guard type is dependent on the presence of a system checkstop
87 // attention.
88 guardType =
89 queryCheckstop() ? Guard::Type::FATAL : Guard::Type::NON_FATAL;
90 }
91
92 iv_guardList.emplace_back(i_path, guardType);
Zane Shelley5f6e3de2021-02-23 13:57:37 -060093 }
94
Zane Shelleyc85716c2021-08-17 10:54:06 -050095 /** @brief Accessor to iv_calloutList. */
96 const nlohmann::json& getCalloutList() const
Zane Shelley64791cf2021-02-15 17:02:37 -060097 {
Zane Shelleyc85716c2021-08-17 10:54:06 -050098 return iv_calloutList;
Zane Shelley64791cf2021-02-15 17:02:37 -060099 }
Zane Shelley5f6e3de2021-02-23 13:57:37 -0600100
Zane Shelley95135822021-08-23 09:00:05 -0500101 /** @brief Accessor to iv_guardList. */
102 const std::vector<Guard>& getGuardList() const
Zane Shelley5f6e3de2021-02-23 13:57:37 -0600103 {
Zane Shelley95135822021-08-23 09:00:05 -0500104 return iv_guardList;
Zane Shelley5f6e3de2021-02-23 13:57:37 -0600105 }
Zane Shelley64791cf2021-02-15 17:02:37 -0600106};
107
Zane Shelleyf685afd2021-02-15 15:39:44 -0600108} // namespace analyzer