1 #pragma once 2 3 #include "types/collection_duration.hpp" 4 #include "types/collection_time_scope.hpp" 5 #include "types/duration_types.hpp" 6 #include "types/operation_type.hpp" 7 8 #include <memory> 9 #include <optional> 10 #include <vector> 11 12 namespace metrics 13 { 14 15 class CollectionData 16 { 17 public: 18 virtual ~CollectionData() = default; 19 20 virtual std::optional<double> update(Milliseconds timestamp) = 0; 21 virtual double update(Milliseconds timestamp, double value) = 0; 22 bool updateLastValue(double value); 23 24 private: 25 std::optional<double> lastValue; 26 }; 27 28 std::vector<std::unique_ptr<CollectionData>> 29 makeCollectionData(size_t size, OperationType, CollectionTimeScope, 30 CollectionDuration); 31 32 } // namespace metrics 33