|  |  |  | @ -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; | 
			
		
	
		
			
				
					|  |  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  |  |   } | 
			
		
	
	
		
			
				
					|  |  |  | 
 |