xref: /openbmc/google-misc/dhcp-done/subprojects/metrics-ipmi-blobs/handler.hpp (revision 03eba281d64d86ad7af436899bf6bd14f8a1907e)
1 #pragma once
2 
3 #include <blobs-ipmid/blobs.hpp>
4 #include <metric.hpp>
5 
6 #include <cstdint>
7 #include <string>
8 #include <vector>
9 
10 namespace blobs
11 {
12 
13 class MetricBlobHandler : public GenericBlobInterface
14 {
15   public:
16     MetricBlobHandler() = default;
17     ~MetricBlobHandler() = default;
18     MetricBlobHandler(const MetricBlobHandler&) = delete;
19     MetricBlobHandler& operator=(const MetricBlobHandler&) = delete;
20     MetricBlobHandler(MetricBlobHandler&&) = default;
21     MetricBlobHandler& operator=(MetricBlobHandler&&) = default;
22 
23     bool canHandleBlob(const std::string& path) override;
24     std::vector<std::string> getBlobIds() override;
25     bool deleteBlob(const std::string& path) override;
26     bool stat(const std::string& path, BlobMeta* meta) override;
27     bool open(uint16_t session, uint16_t flags,
28               const std::string& path) override;
29     std::vector<uint8_t> read(uint16_t session, uint32_t offset,
30                               uint32_t requestedSize) override;
31     bool write(uint16_t session, uint32_t offset,
32                const std::vector<uint8_t>& data) override;
33     bool writeMeta(uint16_t session, uint32_t offset,
34                    const std::vector<uint8_t>& data) override;
35     bool commit(uint16_t session, const std::vector<uint8_t>& data) override;
36     bool close(uint16_t session) override;
37     bool stat(uint16_t session, BlobMeta* meta) override;
38     bool expire(uint16_t session) override;
39 
40   private:
41     bool isReadOnlyOpenFlags(const uint16_t flag);
42     /* Every session gets its own BmcHealthSnapshot instance. */
43     std::unordered_map<uint16_t,
44                        std::unique_ptr<metric_blob::BmcHealthSnapshot>>
45         sessions;
46 };
47 
48 } // namespace blobs
49