blob: d493cb1d9dd0a937e2615d60cc80c951ed39bed7 [file] [log] [blame]
Jayanth Othayoth224882b2017-05-04 05:46:45 -05001#pragma once
2
Dhruvaraj Subhashchandrana6ab8062020-10-29 15:29:10 -05003#include "xyz/openbmc_project/Common/Progress/server.hpp"
Jayanth Othayoth224882b2017-05-04 05:46:45 -05004#include "xyz/openbmc_project/Dump/Entry/server.hpp"
5#include "xyz/openbmc_project/Object/Delete/server.hpp"
6#include "xyz/openbmc_project/Time/EpochTime/server.hpp"
7
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -05008#include <experimental/filesystem>
9#include <sdbusplus/bus.hpp>
10#include <sdbusplus/server/object.hpp>
11
Jayanth Othayoth224882b2017-05-04 05:46:45 -050012namespace phosphor
13{
14namespace dump
15{
16
17template <typename T>
18using ServerObject = typename sdbusplus::server::object::object<T>;
19
Dhruvaraj Subhashchandrana6ab8062020-10-29 15:29:10 -050020// TODO Revisit whether sdbusplus::xyz::openbmc_project::Time::server::EpochTime
21// still needed in dump entry since start time and completed time are available
22// from sdbusplus::xyz::openbmc_project::Common::server::Progress
23// #ibm-openbmc/2809
Jayanth Othayoth224882b2017-05-04 05:46:45 -050024using EntryIfaces = sdbusplus::server::object::object<
Dhruvaraj Subhashchandrana6ab8062020-10-29 15:29:10 -050025 sdbusplus::xyz::openbmc_project::Common::server::Progress,
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050026 sdbusplus::xyz::openbmc_project::Dump::server::Entry,
27 sdbusplus::xyz::openbmc_project::Object::server::Delete,
28 sdbusplus::xyz::openbmc_project::Time::server::EpochTime>;
Jayanth Othayoth224882b2017-05-04 05:46:45 -050029
Dhruvaraj Subhashchandrana6ab8062020-10-29 15:29:10 -050030using OperationStatus =
31 sdbusplus::xyz::openbmc_project::Common::server::Progress::OperationStatus;
Jayanth Othayotha320c7c2017-06-14 07:17:21 -050032namespace fs = std::experimental::filesystem;
33
34class Manager;
35
Jayanth Othayoth224882b2017-05-04 05:46:45 -050036/** @class Entry
Dhruvaraj Subhashchandranf140f662020-01-30 00:29:01 -060037 * @brief Base Dump Entry implementation.
Jayanth Othayoth224882b2017-05-04 05:46:45 -050038 * @details A concrete implementation for the
39 * xyz.openbmc_project.Dump.Entry DBus API
40 */
41class Entry : public EntryIfaces
42{
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050043 public:
44 Entry() = delete;
45 Entry(const Entry&) = delete;
46 Entry& operator=(const Entry&) = delete;
47 Entry(Entry&&) = delete;
48 Entry& operator=(Entry&&) = delete;
49 ~Entry() = default;
Jayanth Othayoth224882b2017-05-04 05:46:45 -050050
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050051 /** @brief Constructor for the Dump Entry Object
52 * @param[in] bus - Bus to attach to.
53 * @param[in] objPath - Object path to attach to
54 * @param[in] dumpId - Dump id.
55 * @param[in] timeStamp - Dump creation timestamp
56 * since the epoch.
Dhruvaraj Subhashchandran4a98e8f2020-01-29 07:11:08 -060057 * @param[in] dumpSize - Dump file size in bytes.
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050058 * @param[in] parent - The dump entry's parent.
59 */
60 Entry(sdbusplus::bus::bus& bus, const std::string& objPath, uint32_t dumpId,
Dhruvaraj Subhashchandrana6ab8062020-10-29 15:29:10 -050061 uint64_t timeStamp, uint64_t dumpSize, OperationStatus dumpStatus,
62 Manager& parent) :
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050063 EntryIfaces(bus, objPath.c_str(), true),
Dhruvaraj Subhashchandran4a98e8f2020-01-29 07:11:08 -060064 parent(parent), id(dumpId)
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050065 {
Dhruvaraj Subhashchandran4a98e8f2020-01-29 07:11:08 -060066 size(dumpSize);
Dhruvaraj Subhashchandrana6ab8062020-10-29 15:29:10 -050067 status(dumpStatus);
68
69 // If the object is created after the dump creation keep
70 // all same as timeStamp
71 // if the object created before the dump creation, update
72 // only the start time. Completed and elapsed time will
73 // be updated once the dump is completed.
74 if (dumpStatus == OperationStatus::Completed)
75 {
76 elapsed(timeStamp);
77 startTime(timeStamp);
78 completedTime(timeStamp);
79 }
80 else
81 {
82 elapsed(0);
83 startTime(timeStamp);
84 completedTime(0);
85 }
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050086 // Emit deferred signal.
87 this->emit_object_added();
88 };
Jayanth Othayoth224882b2017-05-04 05:46:45 -050089
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -050090 /** @brief Delete this d-bus object.
91 */
92 void delete_() override;
Jayanth Othayoth224882b2017-05-04 05:46:45 -050093
Dhruvaraj Subhashchandran4a98e8f2020-01-29 07:11:08 -060094 /** @brief Method to initiate the offload of dump
Dhruvaraj Subhashchandran69e61522020-02-04 06:39:11 -060095 * @param[in] uri - URI to offload dump
Dhruvaraj Subhashchandran4a98e8f2020-01-29 07:11:08 -060096 */
Dhruvaraj Subhashchandran69e61522020-02-04 06:39:11 -060097 void initiateOffload(std::string uri) override
Dhruvaraj Subhashchandran4a98e8f2020-01-29 07:11:08 -060098 {
Dhruvaraj Subhashchandran69e61522020-02-04 06:39:11 -060099 offloadUri(uri);
Dhruvaraj Subhashchandran4a98e8f2020-01-29 07:11:08 -0600100 }
Jayanth Othayotha320c7c2017-06-14 07:17:21 -0500101
Dhruvaraj Subhashchandran4a98e8f2020-01-29 07:11:08 -0600102 protected:
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -0500103 /** @brief This entry's parent */
104 Manager& parent;
Jayanth Othayotha320c7c2017-06-14 07:17:21 -0500105
Jayanth Othayothcb65ffc2018-10-16 08:29:32 -0500106 /** @brief This entry's id */
107 uint32_t id;
Jayanth Othayoth224882b2017-05-04 05:46:45 -0500108};
109
110} // namespace dump
111} // namespace phosphor