LQL クエリを Livestatus に送信し、ソケット経由で送信します。
デバッグ中は動作します!しかし、デバッグなしで実行すると、次のエラーが表示されます。
SyntaxError: EOL while scanning string literal (<string>, line 1)
私のコードは次のとおりです。
len(__nagios_query(('GET services\nFilter: display_name ~~ test\nFilter: state = 0\n')))
def __nagios_query(query):
''' Receives the LQL query to Livestatus and sends through a socket.
Parse the return into lists and dictionaries and return ready to use. '''
result_list = []
query += "OutputFormat: python\n"
try:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((NG_HOST, NG_PORT))
s.sendall(query)
s.shutdown(socket.SHUT_WR)
answer = s.recv(NG_TIMEOUT)
s.close()
result = eval(answer)
columns = result.pop(0)
for item in result:
item = dict(zip(columns, item))
result_list.append(item)
except Exception, e:
raise e
return result_list
この新しいラインでは機能しますが、エレガントではありません。別の方法がありますか?
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((NG_HOST, NG_PORT))
s.sendall(query)
s.shutdown(socket.SHUT_WR)
#New line
time.sleep(0.1)
answer = s.recv(NG_TIMEOUT)
ps: NG_HOST は localhost ではありません