1 #pragma once 2 3 #include "types/collection_duration.hpp" 4 #include "types/collection_time_scope.hpp" 5 #include "types/operation_type.hpp" 6 #include "utils/labeled_tuple.hpp" 7 #include "utils/tstring.hpp" 8 9 #include <sdbusplus/message/types.hpp> 10 11 #include <chrono> 12 #include <string> 13 #include <tuple> 14 #include <type_traits> 15 #include <vector> 16 17 using ReadingParametersPastVersion = 18 std::vector<std::tuple<sdbusplus::message::object_path, std::string, 19 std::string, std::string>>; 20 21 using ReadingParameters = std::vector< 22 std::tuple<std::vector<sdbusplus::message::object_path>, std::string, 23 std::string, std::string, std::string, uint64_t>>; 24 25 using LabeledSensorParameters = 26 utils::LabeledTuple<std::tuple<std::string, std::string>, 27 utils::tstring::Service, utils::tstring::Path>; 28 29 using LabeledMetricParameters = utils::LabeledTuple< 30 std::tuple<std::vector<LabeledSensorParameters>, OperationType, std::string, 31 std::string, CollectionTimeScope, CollectionDuration>, 32 utils::tstring::SensorPath, utils::tstring::OperationType, 33 utils::tstring::Id, utils::tstring::MetricMetadata, 34 utils::tstring::CollectionTimeScope, utils::tstring::CollectionDuration>; 35 36 using ReadingData = std::tuple<std::string, std::string, double, uint64_t>; 37 38 using Readings = std::tuple<uint64_t, std::vector<ReadingData>>; 39 40 ReadingParameters 41 toReadingParameters(const std::vector<LabeledMetricParameters>& labeled); 42 43 enum class ReportUpdates 44 { 45 Overwrite = 0, 46 AppendStopsWhenFull, 47 AppendWrapsWhenFull, 48 NewReport 49 }; 50 51 namespace details 52 { 53 constexpr std::array<std::pair<std::string_view, ReportUpdates>, 5> 54 convDataReportUpdates = { 55 std::make_pair("Overwrite", ReportUpdates::Overwrite), 56 std::make_pair("AppendStopsWhenFull", 57 ReportUpdates::AppendStopsWhenFull), 58 std::make_pair("AppendWrapsWhenFull", 59 ReportUpdates::AppendWrapsWhenFull), 60 std::make_pair("NewReport", ReportUpdates::NewReport)}; 61 62 } // namespace details 63 64 inline ReportUpdates stringToReportUpdates(const std::string& str) 65 { 66 return utils::stringToEnum(details::convDataReportUpdates, str); 67 } 68 69 inline std::string reportUpdatesToString(ReportUpdates v) 70 { 71 return std::string(utils::enumToString(details::convDataReportUpdates, v)); 72 } 73 74 enum class ReportingType 75 { 76 OnChange = 0, 77 OnRequest, 78 Periodic 79 }; 80 81 namespace details 82 { 83 constexpr std::array<std::pair<std::string_view, ReportingType>, 3> 84 convDataReportingType = { 85 std::make_pair("OnChange", ReportingType::OnChange), 86 std::make_pair("OnRequest", ReportingType::OnRequest), 87 std::make_pair("Periodic", ReportingType::Periodic)}; 88 89 } // namespace details 90 91 inline ReportingType stringToReportingType(const std::string& str) 92 { 93 return utils::stringToEnum(details::convDataReportingType, str); 94 } 95 96 inline std::string reportingTypeToString(ReportingType v) 97 { 98 return std::string(utils::enumToString(details::convDataReportingType, v)); 99 } 100