2017-12-04 1 views
0

dbym.rs.printSlaveReplicationInfo를 python에서 pymongo로 가져 오려고했지만 올바른 방법이 없기 때문에 노력하고 있습니다. 다음을 시도했지만 아무런 도움이되지 않았습니다.pyMongo와 함께 mongo에서 replicationLag 가져 오기

>>>from pymongo import MongoClient 
>>>client = MongoClient() 
>>>db = client.test_database 
>>>db.rs.printSlaveReplicationInfo     
Collection(Database(MongoClient([u'10.0.0.19:10006', u'10.0.0.68:10002']), u'xyz'), u'rs.printSlaveReplicationInfo') 
db.rs.printSlaveReplicationInfo() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib64/python2.7/site-packages/pymongo/collection.py", line 2413, in __call__ 
    self.__name.split(".")[-1]) 
TypeError: 'Collection' object is not callable. If you meant to call the 'printSlaveReplicationInfo' method on a 'Collection' object it is failing because no such method exists. 
>>> db.rs        
Collection(Database(MongoClient([u'10.0.0.19:10006', u'10.0.0.68:10002']), u'xyz'), u'rs') 

아무도 도와 드릴 수 있습니까? 또는 그것을하는 방법?

미리 감사드립니다.

(참고 :.이 명령을 실행하려면 관리자 권한이 있어야합니다)

답변

0

은 내가 answer.Here는 전체 코드 발견

uri = "mongodb://usernamen:[email protected]:port/admin" 
conn = pymongo.MongoClient(uri) 
db = conn['admin'] 
db_stats = db.command({'replSetGetStatus' :1}) 


primary_optime = 0 
secondary_optime = 0 

for key in db_stats['members'] : 
    if key['stateStr'] == 'SECONDARY' : 
     secondary_optime = key['optimeDate'] 
    if key['stateStr'] == 'PRIMARY' : 
     primary_optime =key['optimeDate'] 

print 'primary_optime : ' + str(primary_optime) 
print 'secondary_optime : ' + str(secondary_optime) 

seconds_lag = (primary_optime - secondary_optime).total_seconds() 
#total_seconds() userd to get the lag in seconds rather than datetime object 
print 'secondary_lag : ' + str(seconds_lag) 

optime은, 날짜를 reperesents하는 때까지 그 몽고 노드에 데이터가 있습니다.

당신은 여기에 대한 자세한 내용을보실 수 있습니다 :

https://docs.mongodb.com/manual/reference/command/replSetGetStatus/

관련 문제