xref: /openbmc/google-misc/ncsid/subprojects/metrics-ipmi-blobs/metric.hpp (revision dab96f131fb3a46d93f1093feccc9095d8589ece)
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 "metricblob.pb.h"
18* 
19* #include <unistd.h>
20* 
21* #include <blobs-ipmid/blobs.hpp>
22* 
23* #include <atomic>
24* #include <cstdint>
25* #include <string>
26* #include <string_view>
27* #include <unordered_map>
28* #include <vector>
29* 
30* namespace metric_blob
31* {
32* 
33* class BmcHealthSnapshot
34* {
35*   public:
36*     BmcHealthSnapshot();
37* 
38*     /**
39*      * Reads data from this metric
40*      * @param offset: offset into the data to read
41*      * @param requestedSize: how many bytes to read
42*      * @returns Bytes able to read. Returns empty if nothing can be read.
43*      */
44*     std::string_view read(uint32_t offset, uint32_t requestedSize);
45* 
46*     /**
47*      * Returns information about the amount of readable data and whether the
48*      * metric has finished populating.
49*      * @param meta: Struct to fill with the metadata info
50*      */
51*     bool stat(blobs::BlobMeta& meta);
52* 
53*     /**
54*      * Start the metric collection process
55*      */
56*     void doWork();
57* 
58*     /**
59*      * The size of the content string.
60*      */
61*     uint32_t size();
62* 
63*   private:
64*     /**
65*      * Serialize to the pb_dump_ array.
66*      */
67*     void serializeSnapshotToArray(
68*         const bmcmetrics::metricproto::BmcMetricSnapshot& snapshot);
69* 
70*     // The two following functions access the snapshot's string table so they
71*     // have to be member functions.
72*     bmcmetrics::metricproto::BmcProcStatMetric getProcStatList();
73*     bmcmetrics::metricproto::BmcFdStatMetric getFdStatList();
74* 
75*     int getStringID(const std::string_view s);
76*     std::atomic<bool> done;
77*     std::vector<char> pbDump;
78*     std::unordered_map<std::string, int> stringTable;
79*     int stringId;
80*     long ticksPerSec;
81* };
82* 
83* } // namespace metric_blob
84*