Skip to content

Commit 9174dce

Browse files
committed
fixed
1 parent 797e28b commit 9174dce

File tree

1 file changed

+23
-5
lines changed

1 file changed

+23
-5
lines changed

src/loggers/groot2_publisher.cpp

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ struct Transition
2727
uint16_t node_uid;
2828
// enough bits to contain NodeStatus
2929
uint8_t status;
30+
31+
uint8_t padding[5];
3032
};
3133

3234
std::array<char,16> CreateRandomUUID()
@@ -94,6 +96,7 @@ struct Groot2Publisher::PImpl
9496

9597
std::atomic_bool recording = false;
9698
std::deque<Transition> transitions_buffer;
99+
std::chrono::microseconds recording_fist_time;
97100

98101
std::thread heartbeat_thread;
99102

@@ -206,13 +209,15 @@ void Groot2Publisher::callback(Duration ts, const TreeNode& node,
206209
status = 10 + static_cast<char>(prev_status);
207210
}
208211
*(_p->status_buffermap.at(node.UID())) = status;
212+
209213
if(_p->recording)
210214
{
211215
Transition trans;
212216
trans.node_uid = node.UID();
213217
trans.status = static_cast<uint8_t>(new_status);
218+
auto timestamp = ts -_p->recording_fist_time;
214219
trans.timestamp_usec =
215-
std::chrono::duration_cast<std::chrono::microseconds>(ts).count();
220+
std::chrono::duration_cast<std::chrono::microseconds>(timestamp).count();
216221
_p->transitions_buffer.push_back(trans);
217222
while(_p->transitions_buffer.size() > 1000) {
218223
_p->transitions_buffer.pop_front();
@@ -417,9 +422,16 @@ void Groot2Publisher::serverLoop()
417422
}
418423

419424
auto const cmd = (requestMsg[1].to_string());
425+
std::cout << cmd << std::endl;
426+
420427
if(cmd == "start")
421428
{
422429
_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+
423435
std::unique_lock<std::mutex> lk(_p->status_mutex);
424436
_p->transitions_buffer.clear();
425437
}
@@ -432,17 +444,23 @@ void Groot2Publisher::serverLoop()
432444
case Monitor::RequestType::GET_TRANSITIONS:
433445
{
434446
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());
437448

438449
std::unique_lock<std::mutex> lk(_p->status_mutex);
439450
size_t offset = 0;
440451
for(const auto& trans: _p->transitions_buffer)
441452
{
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;
444459
}
460+
std::cout << "GET_TRANSITIONS " << _p->transitions_buffer.size() << "\n";
445461
_p->transitions_buffer.clear();
462+
trans_buffer.resize(offset);
463+
reply_msg.addstr(trans_buffer);
446464
} break;
447465

448466
default: {

0 commit comments

Comments
 (0)