Container System 0.1.0
High-performance C++20 type-safe container framework with SIMD-accelerated serialization
Loading...
Searching...
No Matches
scenarios::IoTDataCollectionSystem Class Reference

IoT Data Collection System. More...

Collaboration diagram for scenarios::IoTDataCollectionSystem:
Collaboration graph

Classes

struct  SensorReading
 

Public Member Functions

void simulate_iot_scenario ()
 

Private Member Functions

void send_iot_batch (const std::vector< SensorReading > &batch)
 

Private Attributes

std::atomic< int > readings_collected_ {0}
 
std::atomic< int > batches_sent_ {0}
 

Detailed Description

IoT Data Collection System.

Simulates collecting sensor data from multiple IoT devices, aggregating them, and sending to a central processing system.

Examples
real_world_scenarios.cpp.

Definition at line 52 of file real_world_scenarios.cpp.

Member Function Documentation

◆ send_iot_batch()

void scenarios::IoTDataCollectionSystem::send_iot_batch ( const std::vector< SensorReading > & batch)
inlineprivate
Examples
real_world_scenarios.cpp.

Definition at line 154 of file real_world_scenarios.cpp.

154 {
155 auto container = std::make_shared<value_container>();
156 container->set_source("iot_aggregator", "batch_processor");
157 container->set_target("iot_analytics_service", "data_processor");
158 container->set_message_type("sensor_data_batch");
159
160 container->set("batch_size", static_cast<int32_t>(batch.size()));
161 container->set("batch_timestamp", static_cast<int64_t>(
162 std::chrono::duration_cast<std::chrono::milliseconds>(
163 std::chrono::system_clock::now().time_since_epoch()).count()));
164
165 for (size_t i = 0; i < batch.size(); ++i) {
166 const auto& reading = batch[i];
167 std::string prefix = "reading_" + std::to_string(i) + "_";
168
169 container->set(prefix + "device_id", reading.device_id);
170 container->set(prefix + "sensor_type", reading.sensor_type);
171 container->set(prefix + "value", reading.value);
172 container->set(prefix + "timestamp", static_cast<int64_t>(
173 std::chrono::duration_cast<std::chrono::milliseconds>(
174 reading.timestamp.time_since_epoch()).count()));
175 }
176
177 std::string serialized = container->serialize_string(value_container::serialization_format::binary).value();
178 std::cout << " Sent IoT batch: " << batch.size() << " readings, "
179 << serialized.size() << " bytes" << std::endl;
180 }

Referenced by simulate_iot_scenario().

Here is the caller graph for this function:

◆ simulate_iot_scenario()

void scenarios::IoTDataCollectionSystem::simulate_iot_scenario ( )
inline
Examples
real_world_scenarios.cpp.

Definition at line 65 of file real_world_scenarios.cpp.

65 {
66 std::cout << "\n=== IoT Data Collection Scenario ===" << std::endl;
67
68 const int num_devices = 5;
69 const int readings_per_device = 20;
70 const int batch_size = 10;
71
72 std::vector<std::string> device_types = {"temperature", "humidity", "pressure"};
73 std::vector<std::thread> device_threads;
74
75 std::queue<SensorReading> sensor_queue;
76 std::mutex queue_mutex;
77 std::condition_variable queue_cv;
78 std::atomic<bool> collection_active{true};
79
80 // Data aggregator thread
81 std::thread aggregator_thread([&]() {
82 std::vector<SensorReading> batch;
83 batch.reserve(batch_size);
84
85 while (collection_active || !sensor_queue.empty()) {
86 std::unique_lock<std::mutex> lock(queue_mutex);
87 queue_cv.wait(lock, [&]() { return !sensor_queue.empty() || !collection_active; });
88
89 while (!sensor_queue.empty() && batch.size() < static_cast<size_t>(batch_size)) {
90 batch.push_back(sensor_queue.front());
91 sensor_queue.pop();
92 }
93
94 if (!batch.empty()) {
95 lock.unlock();
96 send_iot_batch(batch);
97 batch.clear();
99 }
100 }
101 });
102
103 // Device simulation threads
104 std::random_device rd;
105 for (int device_id = 0; device_id < num_devices; ++device_id) {
106 device_threads.emplace_back([&, device_id]() {
107 std::mt19937 gen(rd());
108 std::uniform_real_distribution<> temp_dist(18.0, 35.0);
109 std::uniform_real_distribution<> humidity_dist(30.0, 80.0);
110 std::uniform_real_distribution<> pressure_dist(990.0, 1030.0);
111
112 for (int reading = 0; reading < readings_per_device; ++reading) {
113 for (const auto& sensor_type : device_types) {
114 SensorReading sensor_reading;
115 sensor_reading.device_id = "device_" + std::to_string(device_id);
116 sensor_reading.sensor_type = sensor_type;
117 sensor_reading.timestamp = std::chrono::system_clock::now();
118
119 if (sensor_type == "temperature") {
120 sensor_reading.value = temp_dist(gen);
121 } else if (sensor_type == "humidity") {
122 sensor_reading.value = humidity_dist(gen);
123 } else {
124 sensor_reading.value = pressure_dist(gen);
125 }
126
127 {
128 std::lock_guard<std::mutex> lock(queue_mutex);
129 sensor_queue.push(sensor_reading);
130 }
131 queue_cv.notify_one();
133
134 std::this_thread::sleep_for(std::chrono::milliseconds(5));
135 }
136 }
137 });
138 }
139
140 for (auto& thread : device_threads) {
141 thread.join();
142 }
143
144 collection_active = false;
145 queue_cv.notify_all();
146 aggregator_thread.join();
147
148 std::cout << "IoT simulation completed:" << std::endl;
149 std::cout << " Readings collected: " << readings_collected_.load() << std::endl;
150 std::cout << " Batches sent: " << batches_sent_.load() << std::endl;
151 }
void send_iot_batch(const std::vector< SensorReading > &batch)

References batches_sent_, scenarios::IoTDataCollectionSystem::SensorReading::device_id, readings_collected_, send_iot_batch(), scenarios::IoTDataCollectionSystem::SensorReading::sensor_type, scenarios::IoTDataCollectionSystem::SensorReading::timestamp, and scenarios::IoTDataCollectionSystem::SensorReading::value.

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ batches_sent_

std::atomic<int> scenarios::IoTDataCollectionSystem::batches_sent_ {0}
private
Examples
real_world_scenarios.cpp.

Definition at line 62 of file real_world_scenarios.cpp.

62{0};

Referenced by simulate_iot_scenario().

◆ readings_collected_

std::atomic<int> scenarios::IoTDataCollectionSystem::readings_collected_ {0}
private
Examples
real_world_scenarios.cpp.

Definition at line 61 of file real_world_scenarios.cpp.

61{0};

Referenced by simulate_iot_scenario().


The documentation for this class was generated from the following file: