2016-05-27 4 views
1

ping機能を使ってMongoサーバーが稼働していることを確認する関数を作成する必要があります。私はMotor(Mongodb&Tornado)でサーバーを確認する

clientList = [] 
for value in configuration["mongodbServer"]: 
    client = motor.motor_tornado.MotorClient('mongodb://localhost:{}'.format(value)) 
    clientList.append(client) 

(設定ファイルは、ポート番号の辞書を持っている)右がクライアントを設定してから、私はこの機能を実行します。

class MongoChecker(Checker): 

formatter = 'stashboard.formatters.MongoFormatter' 
def check(self): 
for x in clientList: 
     if x.ping: 
      return x.ping 

と私は取得エラー:

yielded unknown object MotorDatabase(Database(MongoClient([]), 'ping'))\n", 

私は私の問題は、私は間違ってping関数を使用していると思う。私は、サーバーがまだ稼働しているかどうかを確認するための機能については、他のドキュメントや他の種類のものを見つけることはできません。モーターを使って状態を監視する方法が分かっている人は、私は開いています。ありがとう!

答えて

2

まず、「ping」機能はありません。したがって、MotorClientは、「ping」という名前のデータベースにアクセスしようとしていると考えます。 「ping」という名前のデータベースは、「不明なオブジェクト」例外に表示されます。 "ping"のようなMongoDBのすべてのコマンドについては、MotorDatabaseのcommand methodを使用してください。

第2に、モーターは非同期です。 Tornadoコルーチンでは、 "yield"ステートメントでMotorメソッドを使用する必要があります。たとえば、次のように

@gen.coroutine 
def check(): 
    try: 
     result = yield client.admin.command({'ping': 1}) 
     print(result) 
    except ConnectionFailure as exc: 
     print(exc) 

あなたが同期これをテストしたい場合は、あなたが完了するのコルーチンのためだけの十分な長IOLoopを実行することができます:トルネードコルーチンの概要について

from pymongo.errors import ConnectionFailure 
from tornado import gen 
from tornado.ioloop import IOLoop 

import motor.motor_tornado 

client = motor.motor_tornado.MotorClient() 
IOLoop.current().run_sync(check) 

Refactoring Tornado Coroutinesを参照し、 Tornado documentation

関連する問題