@@ -27,6 +27,8 @@ struct Transition
27
27
uint16_t node_uid;
28
28
// enough bits to contain NodeStatus
29
29
uint8_t status;
30
+
31
+ uint8_t padding[5 ];
30
32
};
31
33
32
34
std::array<char ,16 > CreateRandomUUID ()
@@ -94,6 +96,7 @@ struct Groot2Publisher::PImpl
94
96
95
97
std::atomic_bool recording = false ;
96
98
std::deque<Transition> transitions_buffer;
99
+ std::chrono::microseconds recording_fist_time;
97
100
98
101
std::thread heartbeat_thread;
99
102
@@ -206,13 +209,15 @@ void Groot2Publisher::callback(Duration ts, const TreeNode& node,
206
209
status = 10 + static_cast <char >(prev_status);
207
210
}
208
211
*(_p->status_buffermap .at (node.UID ())) = status;
212
+
209
213
if (_p->recording )
210
214
{
211
215
Transition trans;
212
216
trans.node_uid = node.UID ();
213
217
trans.status = static_cast <uint8_t >(new_status);
218
+ auto timestamp = ts -_p->recording_fist_time ;
214
219
trans.timestamp_usec =
215
- std::chrono::duration_cast<std::chrono::microseconds>(ts ).count ();
220
+ std::chrono::duration_cast<std::chrono::microseconds>(timestamp ).count ();
216
221
_p->transitions_buffer .push_back (trans);
217
222
while (_p->transitions_buffer .size () > 1000 ) {
218
223
_p->transitions_buffer .pop_front ();
@@ -417,9 +422,16 @@ void Groot2Publisher::serverLoop()
417
422
}
418
423
419
424
auto const cmd = (requestMsg[1 ].to_string ());
425
+ std::cout << cmd << std::endl;
426
+
420
427
if (cmd == " start" )
421
428
{
422
429
_p->recording = true ;
430
+ auto now = std::chrono::system_clock::now ();
431
+
432
+ _p->recording_fist_time = std::chrono::duration_cast<std::chrono::microseconds>
433
+ (now.time_since_epoch ());
434
+
423
435
std::unique_lock<std::mutex> lk (_p->status_mutex );
424
436
_p->transitions_buffer .clear ();
425
437
}
@@ -432,17 +444,23 @@ void Groot2Publisher::serverLoop()
432
444
case Monitor::RequestType::GET_TRANSITIONS:
433
445
{
434
446
thread_local std::string trans_buffer;
435
- const size_t N = sizeof (Transition);
436
- trans_buffer.resize (N * _p->transitions_buffer .size ());
447
+ trans_buffer.resize (9 * _p->transitions_buffer .size ());
437
448
438
449
std::unique_lock<std::mutex> lk (_p->status_mutex );
439
450
size_t offset = 0 ;
440
451
for (const auto & trans: _p->transitions_buffer )
441
452
{
442
- std::memcpy (&trans_buffer[offset], &trans, N);
443
- offset += N;
453
+ std::memcpy (&trans_buffer[offset], &trans.timestamp_usec , 6 );
454
+ offset += 6 ;
455
+ std::memcpy (&trans_buffer[offset], &trans.node_uid , 2 );
456
+ offset += 2 ;
457
+ std::memcpy (&trans_buffer[offset], &trans.status , 1 );
458
+ offset += 1 ;
444
459
}
460
+ std::cout << " GET_TRANSITIONS " << _p->transitions_buffer .size () << " \n " ;
445
461
_p->transitions_buffer .clear ();
462
+ trans_buffer.resize (offset);
463
+ reply_msg.addstr (trans_buffer);
446
464
} break ;
447
465
448
466
default : {
0 commit comments