| 
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1715,7 +1715,7 @@ static void *stratum_sender(void *arg) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					static void *statsupdate(void *arg) | 
					 | 
					 | 
					 | 
					static void *statsupdate(void *arg) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					{ | 
					 | 
					 | 
					 | 
					{ | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						ckpool_t __maybe_unused *ckp = (ckpool_t *)arg; | 
					 | 
					 | 
					 | 
						ckpool_t *ckp = (ckpool_t *)arg; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						rename_proc("statsupdate"); | 
					 | 
					 | 
					 | 
						rename_proc("statsupdate"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -1724,7 +1724,7 @@ static void *statsupdate(void *arg) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
						while (42) { | 
					 | 
					 | 
					 | 
						while (42) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							char suffix1[16], suffix5[16], suffix15[16], suffix60[16]; | 
					 | 
					 | 
					 | 
							char suffix1[16], suffix5[16], suffix15[16], suffix60[16]; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							char suffix360[16], suffix1440[16]; | 
					 | 
					 | 
					 | 
							char suffix360[16], suffix1440[16], logout[512] = {}; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							const double nonces = 4294967296; | 
					 | 
					 | 
					 | 
							const double nonces = 4294967296; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							double sps1, sps5, sps15, sps60; | 
					 | 
					 | 
					 | 
							double sps1, sps5, sps15, sps60; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							user_instance_t *instance, *tmp; | 
					 | 
					 | 
					 | 
							user_instance_t *instance, *tmp; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					 | 
					@ -1776,6 +1776,9 @@ static void *statsupdate(void *arg) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							ck_rlock(&instance_lock); | 
					 | 
					 | 
					 | 
							ck_rlock(&instance_lock); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							HASH_ITER(hh, user_instances, instance, tmp) { | 
					 | 
					 | 
					 | 
							HASH_ITER(hh, user_instances, instance, tmp) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								char fname[512] = {}; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								FILE *fp; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								ghs = instance->dsps1 * nonces; | 
					 | 
					 | 
					 | 
								ghs = instance->dsps1 * nonces; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								suffix_string(ghs, suffix1, 16, 0); | 
					 | 
					 | 
					 | 
								suffix_string(ghs, suffix1, 16, 0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								ghs = instance->dsps5 * nonces; | 
					 | 
					 | 
					 | 
								ghs = instance->dsps5 * nonces; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					 | 
					@ -1788,10 +1791,19 @@ static void *statsupdate(void *arg) | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								suffix_string(ghs, suffix360, 16, 0); | 
					 | 
					 | 
					 | 
								suffix_string(ghs, suffix360, 16, 0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								ghs = instance->dsps1440 * nonces; | 
					 | 
					 | 
					 | 
								ghs = instance->dsps1440 * nonces; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								suffix_string(ghs, suffix1440, 16, 0); | 
					 | 
					 | 
					 | 
								suffix_string(ghs, suffix1440, 16, 0); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
								LOGNOTICE("User %s:  A: %ld  R: %ld  " | 
					 | 
					 | 
					 | 
								snprintf(logout, 511, "A: %ld  R: %ld  " | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									 "Hashrate: (1m):%s  (5m):%s  (15m):%s  (1h):%s  (6h):%s  (1d):%s", | 
					 | 
					 | 
					 | 
									 "Hashrate: (1m):%s  (5m):%s  (15m):%s  (1h):%s  (6h):%s  (1d):%s", | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									  instance->username, instance->diff_accepted, instance->diff_rejected, | 
					 | 
					 | 
					 | 
									 instance->diff_accepted, instance->diff_rejected, | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
									 suffix1, suffix5, suffix15, suffix60, suffix360, suffix1440); | 
					 | 
					 | 
					 | 
									 suffix1, suffix5, suffix15, suffix60, suffix360, suffix1440); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								LOGNOTICE("User %s: %s", instance->username, logout); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								snprintf(fname, 511, "%s/%s", ckp->logdir, instance->username); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								fp = fopen(fname, "w"); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								if (unlikely(!fp)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									LOGERR("Failed to fopen %s", fname); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
									continue; | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								fprintf(fp, "%s\n", logout); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
					 | 
								fclose(fp); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							} | 
					 | 
					 | 
					 | 
							} | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
							ck_runlock(&instance_lock); | 
					 | 
					 | 
					 | 
							ck_runlock(&instance_lock); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					 | 
					
 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					 | 
					
  |