#ifndef OSDEV_COMPONENTS_MQTT_MEASUREMENT_IHISTOGRAM_H #define OSDEV_COMPONENTS_MQTT_MEASUREMENT_IHISTOGRAM_H // std #include #include #include namespace osdev { namespace components { namespace mqtt { namespace measurement { /** * @brief Class that holds the dynamic part of a histogram. * Used to take a snapshot of the histogram. */ class HistogramData { public: /** * @brief Construct dynamic histrogram data. * @param smallestValue A stringified version of the smallest recorded value since the last update. * @param largestValue A stringified version of the largest recorded value since the last update. * @param smallestValueSinceLastClear A stringified version of the smallest value as string since last clear. * @param largestValueSinceLastClear A stringified version of the largest value as string since last clear. * @param averageValueSinceLastClear A stringified version of the average value as string since last clear. * @param nrOfValuesSinceLastClear Number of values since last clear. * @param histCounts The histogram counts. */ HistogramData(const std::string& smallestValue, const std::string& largestValue, const std::string& smallestValueSinceLastClear, const std::string& largestValueSinceLastClear, const std::string& averageValueSinceLastClear, std::size_t nrOfValuesSinceLastClear, const std::vector& histCounts) : m_smallestValueString(smallestValue) , m_largestValueString(largestValue) , m_smallestValueSinceLastClearString(smallestValueSinceLastClear) , m_largestValueSinceLastClearString(largestValueSinceLastClear) , m_averageValueSinceLastClearString(averageValueSinceLastClear) , m_numberOfValuesSinceLastClear(nrOfValuesSinceLastClear) , m_data(histCounts) { } /** * @return The smallest recorded value as a string. */ const std::string& smallestValueString() const { return m_smallestValueString; } /** * @return The largest recorded value as a string. */ const std::string& largestValueString() const { return m_largestValueString; } /** * @return The number of value since last clear. */ std::size_t numberOfValuesSinceLastClear() const { return m_numberOfValuesSinceLastClear; } /** * @return The smallest value since last clear as a string. */ const std::string& smallestValueSinceLastClearString() const { return m_smallestValueSinceLastClearString; } /** * @return The largest value since last clear as a string. */ const std::string& largestValueSinceLastClearString() const { return m_largestValueSinceLastClearString; } /** * @return The average value since last clear as a string. */ const std::string& averageValueSinceLastClearString() const { return m_averageValueSinceLastClearString; } /** * @return The histogram counts. */ const std::vector& data() const { return m_data; } private: std::string m_smallestValueString; std::string m_largestValueString; std::string m_smallestValueSinceLastClearString; std::string m_largestValueSinceLastClearString; std::string m_averageValueSinceLastClearString; std::size_t m_numberOfValuesSinceLastClear; std::vector m_data; }; /** * @brief Interface for histogram classes * Can be used to store histograms in a container and visualize the histogram. */ class IHistogram { public: virtual ~IHistogram(); /** * @return The histogram identification (title). */ virtual const std::string& id() const = 0; /** * @return The number of buckets. */ virtual std::size_t numBuckets() const = 0; /** * @return The bucket width as a floating point value. */ virtual double bucketWidth() const = 0; /** * @return The minimum value of the histogram definition as a string. */ virtual std::string minValueString() const = 0; /** * @return The maximum value of the histogram definition as a string. */ virtual std::string maxValueString() const = 0; /** * @return The value unit as a a string. */ virtual const std::string& unit() const = 0; /** * @return The histogram data. * This takes a snapshot of the histogram data. */ virtual HistogramData histogramData() const = 0; /** * @return The number of value since last clear. */ virtual std::size_t numberOfValuesSinceLastClear() const = 0; /** * @return The smallest value since last clear as a string. */ virtual std::string smallestValueSinceLastClear() const = 0; /** * @return The largest value since last clear as a string. */ virtual std::string largestValueSinceLastClear() const = 0; /** * @return The average value since last clear as a string. */ virtual std::string averageValueSinceLastClear() const = 0; /** * @brief Clears the values that are kept between successive clearRunningValues calls. * These are: * smallestValueSinceLastClear * largestValueSinceLastClear * averageValueSinceLastClear */ virtual void clearRunningValues() = 0; /** * @return The ascii representation of the histogram. */ virtual std::string toString() const = 0; }; /** * @brief Make an ascii visualisation of the given histogram data. * @param histogram The histogram to visualize. */ std::string visualizeHistogram(const IHistogram& histogram); /** * @brief Stream operator for IHistogram instances. */ std::ostream& operator<<(std::ostream& os, const IHistogram& rhs); } // End namespace measurement } // End namespace mqtt } // End namespace components } // End namespace osdev #endif // OSDEV_COMPONENTS_MQTT_MEASUREMENT_IHISTOGRAM_H