2016-05-27 3 views
1

Мне нужно создать функцию, которая проверяет, работают ли серверы Mongo с помощью функции ping. Я настроил клиентов прямо там (конфигурационный файл имеет словарь с номерами портов)Проверка серверов с мотором (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. Я не могу найти какую-либо другую документацию по этой или любой другой функции, которая проверяет, продолжают ли серверы работать. Если кто-то знает, как лучше контролировать статус с помощью Motor, я открыт. Благодаря!

ответ

2

Во-первых, нет функции «пинга». Следовательно, MotorClient думает, что вы пытаетесь получить доступ к базе данных с именем «ping». База данных с именем «ping» показана в исключении «неизвестный объект». Для всех команд MongoDB, таких как «ping», просто используйте MotorDatabase command method.

Во-вторых, двигатель асинхронный. Вы должны использовать методы Motor в сопрограмме Tornado с инструкцией «yield». Например:

@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.

Смежные вопросы