mirror of
				https://github.com/viq/NewsBlur.git
				synced 2025-11-01 09:09:16 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			27 lines
		
	
	
		
			No EOL
		
	
	
		
			828 B
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			No EOL
		
	
	
		
			828 B
		
	
	
	
		
			Python
		
	
	
	
	
	
import pymongo
 | 
						|
 | 
						|
PRIMARY_STATE = 1
 | 
						|
SECONDARY_STATE = 2
 | 
						|
 | 
						|
def mongo_max_replication_lag(connection):
 | 
						|
    try:
 | 
						|
        status = connection.admin.command('replSetGetStatus')
 | 
						|
    except pymongo.errors.OperationFailure:
 | 
						|
        return 0
 | 
						|
        
 | 
						|
    members = status['members']
 | 
						|
    primary_optime = None
 | 
						|
    oldest_secondary_optime = None
 | 
						|
    for member in members:
 | 
						|
        member_state = member['state']
 | 
						|
        optime = member['optime']
 | 
						|
        if member_state == PRIMARY_STATE:
 | 
						|
            primary_optime = optime.time
 | 
						|
        elif member_state == SECONDARY_STATE:
 | 
						|
            if not oldest_secondary_optime or optime.time < oldest_secondary_optime:
 | 
						|
                oldest_secondary_optime = optime.time
 | 
						|
 | 
						|
    if not primary_optime or not oldest_secondary_optime:
 | 
						|
        return 0
 | 
						|
 | 
						|
    return primary_optime - oldest_secondary_optime |