2015-07-03 15 views
5

Próbuję połączyć elastyczne wyszukiwanie w moim lokalnym i zastanawiam się, skąd mogę wiedzieć, że połączenie zakończyło się sukcesem lub zakończyło się niepowodzeniem, zanim przejdzie dalej proces: Chciałbym, żeby było to możliwe w sposób podany poniżej, ale nie (zwraca zbyt wielu wartości, ale bezużyteczne):sprawdź stan połączenia elasticsearch w pythonie

try: 
    es = Elasticsearch(['http://localhost:9200/'], verify_certs=True) 
except Exception as err: 
    if "Connection refused" in err.message: 
     logging.error("Connection failed") 

mam nadzieję, że istnieje sposób, aby sprawdzić stan połączenia tak:

if es == false: 
    raise ValueError("Connection failed") 

Odpowiedz

10

Co można zrobić, to zadzwonić ping po utworzeniu Elasticsearch Insta nce, tak:

es = Elasticsearch(['http://localhost:9200/'], verify_certs=True) 

if not es.ping(): 
    raise ValueError("Connection failed") 
+0

Znam jego stary post, ale obecnie nawet ja szukam odpowiedzi na to samo pytanie, ale problem z twoją odpowiedzią jest taki, że gdy usługa elasticsearch jest wyłączona es.ping() doesn ' t zwraca False, ale zwraca błąd –

+1

Nadal można zawinąć wywołanie do es.ping w bloku try/catch (jak w oryginalnym pytaniu) i to by również wykonało zadanie. – Val

+0

Chodzi o to, że wyniesione wyjątki są powiązane. Mam na myśli ostatni zgłoszony wyjątek ConnectionError, ale także podnosi wartości NewConnectionError i ConnectionRefusedError przed tym, więc należy się z nimi obchodzić. Ponieważ nadal drukuje ślad stosu wyjątku –

Powiązane problemy