loggerd: don't let a single service clog up the main thread
parent
9afc95474d
commit
baf1a77ca2
|
@ -180,6 +180,7 @@ void rotate_if_needed(LoggerdState *s) {
|
|||
void loggerd_thread() {
|
||||
// setup messaging
|
||||
typedef struct QlogState {
|
||||
std::string name;
|
||||
int counter, freq;
|
||||
} QlogState;
|
||||
std::unordered_map<SubSocket*, QlogState> qlog_states;
|
||||
|
@ -195,7 +196,11 @@ void loggerd_thread() {
|
|||
SubSocket * sock = SubSocket::create(s.ctx, it.name);
|
||||
assert(sock != NULL);
|
||||
poller->registerSocket(sock);
|
||||
qlog_states[sock] = {.counter = 0, .freq = it.decimation};
|
||||
qlog_states[sock] = {
|
||||
.name = it.name,
|
||||
.counter = 0,
|
||||
.freq = it.decimation,
|
||||
};
|
||||
}
|
||||
|
||||
// init logger
|
||||
|
@ -219,6 +224,7 @@ void loggerd_thread() {
|
|||
// poll for new messages on all sockets
|
||||
for (auto sock : poller->poll(1000)) {
|
||||
// drain socket
|
||||
int count = 0;
|
||||
QlogState &qs = qlog_states[sock];
|
||||
Message *msg = nullptr;
|
||||
while (!do_exit && (msg = sock->receive(true))) {
|
||||
|
@ -233,6 +239,12 @@ void loggerd_thread() {
|
|||
double seconds = (millis_since_boot() - start_ts) / 1000.0;
|
||||
LOGD("%lu messages, %.2f msg/sec, %.2f KB/sec", msg_count, msg_count / seconds, bytes_count * 0.001 / seconds);
|
||||
}
|
||||
|
||||
count++;
|
||||
if (count >= 50) {
|
||||
LOGE("large volume of '%s' messages", qs.name.c_str());
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue