xref: /openbmc/openpower-vpd-parser/wait-vpd-parser/include/inventory_backup_handler.hpp (revision a933617b3ac1e2239d2bc78b85bb8c125007266d)
1 #pragma once
2 
3 #include "constants.hpp"
4 #include "logger.hpp"
5 
6 #include <filesystem>
7 
8 /**
9  * @brief Class to handle backup inventory data.
10  *
11  * This class is used for handling inventory backup data. This contains methods
12  * to handle checking inventory backed up data, restoring said data and
13  * restarting inventory manager service if needed
14  */
15 class InventoryBackupHandler
16 {
17   public:
18     /*
19      * Deleted methods
20      */
21     InventoryBackupHandler() = delete;
22     InventoryBackupHandler(const InventoryBackupHandler&) = delete;
23     InventoryBackupHandler operator=(const InventoryBackupHandler&) = delete;
24     InventoryBackupHandler(const InventoryBackupHandler&&) = delete;
25     InventoryBackupHandler operator=(const InventoryBackupHandler&&) = delete;
26 
27     /**
28      * @brief Parameterized Constructor
29      *
30      * @param[in] i_inventoryServiceName - Inventory manager service name
31      * @param[in] i_inventoryPrimaryPath - Absolute file path to inventory
32      * manager primary data location
33      * @param[in] i_inventoryBackupPath - Absolute file path to inventory
34      * manager backup data location
35      */
InventoryBackupHandler(const std::string_view i_inventoryServiceName,const std::filesystem::path i_inventoryPrimaryPath,const std::filesystem::path i_inventoryBackupPath)36     InventoryBackupHandler(const std::string_view i_inventoryServiceName,
37                            const std::filesystem::path i_inventoryPrimaryPath,
38                            const std::filesystem::path i_inventoryBackupPath) :
39         m_inventoryManagerServiceName{i_inventoryServiceName},
40         m_inventoryPrimaryPath{i_inventoryPrimaryPath},
41         m_inventoryBackupPath{i_inventoryBackupPath},
42         m_logger{vpd::Logger::getLoggerInstance()}
43     {}
44 
45     /**
46      * @brief API to restore inventory data from backup file path to inventory
47      * persisted path
48      *
49      * @param[out] o_errCode - To set error code in case of error.
50      *
51      * @return true if the restoration is successful, false otherwise
52      *
53      */
54     bool restoreInventoryBackupData(uint16_t& o_errCode) const noexcept;
55 
56     /**
57      * @brief API to clear inventory backup data from backup file path
58      *
59      * @param[out] o_errCode - To set error code in case of error.
60      *
61      * @return true if backup data has been cleared, false otherwise
62      *
63      */
64     bool clearInventoryBackupData(uint16_t& o_errCode) const noexcept;
65 
66     /**
67      * @brief API to restart inventory manager service
68      *
69      * @param[out] o_errCode - To set error code in case of error.
70      *
71      * @return true if inventory manager service is successfully restarted,
72      * false otherwise
73      *
74      */
75     bool restartInventoryManagerService(uint16_t& o_errCode) const noexcept;
76 
77   private:
78     /**
79      * @brief API to check if inventory backup path has data
80      *
81      * @param[out] o_errCode - To set error code in case of error.
82      *
83      * @return true if inventory backup data is found, false otherwise
84      *
85      */
86     bool checkInventoryBackupPath(uint16_t& o_errCode) const noexcept;
87 
88     /**
89      * @brief API to move files from source path to destination path
90      *
91      * @param[in] i_src - Source path
92      * @param[in] i_dest - Destination path
93      *
94      * @return true if the files are successfully moved, false otherwise
95      */
96     bool moveFiles(const std::filesystem::path& l_src,
97                    const std::filesystem::path& l_dest) const noexcept;
98 
99     /* Members */
100     // inventory manager service name
101     std::string m_inventoryManagerServiceName;
102 
103     // inventory data primary path
104     std::filesystem::path m_inventoryPrimaryPath;
105 
106     // inventory data backup path
107     std::filesystem::path m_inventoryBackupPath;
108 
109     // logger instance
110     std::shared_ptr<vpd::Logger> m_logger{nullptr};
111 };
112