1* // Copyright 2021 Google LLC
2* //
3* // Licensed under the Apache License, Version 2.0 (the "License");
4* // you may not use this file except in compliance with the License.
5* // You may obtain a copy of the License at
6* //
7* //      http://www.apache.org/licenses/LICENSE-2.0
8* //
9* // Unless required by applicable law or agreed to in writing, software
10* // distributed under the License is distributed on an "AS IS" BASIS,
11* // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12* // See the License for the specific language governing permissions and
13* // limitations under the License.
14* 
15* #pragma once
16* 
17* #include <blobs-ipmid/blobs.hpp>
18* #include <metric.hpp>
19* 
20* #include <cstdint>
21* #include <string>
22* #include <vector>
23* 
24* namespace blobs
25* {
26* 
27* class MetricBlobHandler : public GenericBlobInterface
28* {
29*   public:
30*     MetricBlobHandler() = default;
31*     ~MetricBlobHandler() = default;
32*     MetricBlobHandler(const MetricBlobHandler&) = delete;
33*     MetricBlobHandler& operator=(const MetricBlobHandler&) = delete;
34*     MetricBlobHandler(MetricBlobHandler&&) = default;
35*     MetricBlobHandler& operator=(MetricBlobHandler&&) = default;
36* 
37*     bool canHandleBlob(const std::string& path) override;
38*     std::vector<std::string> getBlobIds() override;
39*     bool deleteBlob(const std::string& path) override;
40*     bool stat(const std::string& path, BlobMeta* meta) override;
41*     bool open(uint16_t session, uint16_t flags,
42*               const std::string& path) override;
43*     std::vector<uint8_t> read(uint16_t session, uint32_t offset,
44*                               uint32_t requestedSize) override;
45*     bool write(uint16_t session, uint32_t offset,
46*                const std::vector<uint8_t>& data) override;
47*     bool writeMeta(uint16_t session, uint32_t offset,
48*                    const std::vector<uint8_t>& data) override;
49*     bool commit(uint16_t session, const std::vector<uint8_t>& data) override;
50*     bool close(uint16_t session) override;
51*     bool stat(uint16_t session, BlobMeta* meta) override;
52*     bool expire(uint16_t session) override;
53* 
54*   private:
55*     bool isReadOnlyOpenFlags(const uint16_t flag);
56*     /* Every session gets its own BmcHealthSnapshot instance. */
57*     std::unordered_map<uint16_t,
58*                        std::unique_ptr<metric_blob::BmcHealthSnapshot>>
59*         sessions;
60* };
61* 
62* } // namespace blobs
63*