telemetry/demo/mocks/mock_temperature_source.cpp
2025-09-24 19:52:20 +00:00

36 lines
924 B
C++

#include <random>
#include <thread>
#include "mock_temperature_source.hpp"
namespace djm::device {
MockTemperatureSource::MockTemperatureSource(size_t seed) : generator(seed) {}
std::optional<TemperatureReading> MockTemperatureSource::read(
std::chrono::milliseconds timeout) {
if (std::bernoulli_distribution(0.01)(generator)) {
// reading temperature failed, yikes
return std::nullopt;
}
// determine random time until read occurs
auto millisLag = std::uniform_int_distribution<>(0, 50)(generator);
if (millisLag > timeout.count()) {
return std::nullopt;
}
std::this_thread::sleep_for(std::chrono::milliseconds(millisLag));
std::normal_distribution<> normalDist(0.0, 3.5);
return TemperatureReading{
56.7 + normalDist(generator),
45.6 + normalDist(generator),
34.5 + normalDist(generator),
32.1 + normalDist(generator),
};
}
} // namespace djm::device