chg: [diagnostic] Added tests for server

diagnosticTool
mokaddem 2019-06-17 14:42:41 +02:00
parent 9d4c86010b
commit 1d7e6c185e
1 changed files with 40 additions and 12 deletions

View File

@ -14,6 +14,7 @@ try:
import zmq import zmq
import json import json
import flask import flask
import requests
from halo import Halo from halo import Halo
except ModuleNotFoundError as e: except ModuleNotFoundError as e:
print('Dependency not met. Either not in a virtualenv or dependency not installed.') print('Dependency not met. Either not in a virtualenv or dependency not installed.')
@ -37,6 +38,8 @@ Steps:
- check log dynamic endpoint - check log dynamic endpoint
''' '''
HOST = 'http://127.0.0.1'
PORT = 8001 # overriden by configuration file
configuration_file = {} configuration_file = {}
pgrep_subscriber_output = '' pgrep_subscriber_output = ''
pgrep_dispatcher_output = '' pgrep_dispatcher_output = ''
@ -121,7 +124,7 @@ def check_virtual_environment(spinner):
@add_spinner @add_spinner
def check_configuration(spinner): def check_configuration(spinner):
global configuration_file global configuration_file, port
configfile = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config/config.cfg') configfile = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'config/config.cfg')
cfg = configparser.ConfigParser() cfg = configparser.ConfigParser()
cfg.read(configfile) cfg.read(configfile)
@ -136,6 +139,7 @@ def check_configuration(spinner):
result, faulties = diagnostic_util.dict_compare(cfg_default, cfg) result, faulties = diagnostic_util.dict_compare(cfg_default, cfg)
faulties = [item for sublist in faulties for item in sublist] faulties = [item for sublist in faulties for item in sublist]
if result: if result:
port = configuration_file.get("Server", "port")
return (True, '') return (True, '')
else: else:
return (False, f'''Configuration incomplete. return (False, f'''Configuration incomplete.
@ -330,7 +334,7 @@ def check_dispatcher_status(spinner):
if reply is None: if reply is None:
if time_slept >= sleep_max: if time_slept >= sleep_max:
return_flag = False return_flag = False
return_text = f'''zmq_dispatcher did not respond in the given time ({int(sleep_max)}sec) return_text = f'''zmq_dispatcher did not respond in the given time ({int(sleep_max)}s)
\t Consider restarting it: {pgrep_dispatcher_output}''' \t Consider restarting it: {pgrep_dispatcher_output}'''
break break
time.sleep(sleep_duration) time.sleep(sleep_duration)
@ -346,17 +350,42 @@ def check_dispatcher_status(spinner):
@add_spinner @add_spinner
def check_server_listening(spinner): def check_server_listening(spinner):
return (False, '') url = f'{HOST}:{PORT}/_get_log_head'
spinner.text = f'Trying to connect to {url}'
r = requests.get(url)
return (
r.status_code == 200,
f'Server is {"not " if r.status_code != 200 else ""}running. Status code [{r.status_code}]'
)
@add_spinner @add_spinner
def check_static_endpoint(spinner): def check_server_dynamic_enpoint(spinner):
return (False, '') sleep_max = 15
start_time = time.time()
url = f'{HOST}:{PORT}/_logs'
@add_spinner p = subprocess.Popen(
def check_dynamic_enpoint(spinner): ['curl', '-sfN', '--header', 'Accept: text/event-stream', url],
return (False, '') stdout=subprocess.PIPE,
bufsize=1)
signal.alarm(sleep_max)
try:
for line in iter(p.stdout.readline, b''):
if line.startswith(b'data: '):
data = line[6:]
try:
j = json.loads(data)
return_flag = True
return_text = f'Dynamic endpoint returned data (took {time.time()-start_time:.2f}s)'
signal.alarm(0)
break
except Exception as e:
return_flag = False
return_text = f'Something went wrong. Output {line}'
break
except TimeoutException:
return_text = f'Dynamic endpoint did not returned data in the given time ({int(time.time()-start_time)}sec)'
return (return_flag, return_text)
def start_diagnostic(): def start_diagnostic():
@ -371,8 +400,7 @@ def start_diagnostic():
check_buffer_change_rate() check_buffer_change_rate()
check_dispatcher_status() check_dispatcher_status()
check_server_listening() check_server_listening()
check_static_endpoint() check_server_dynamic_enpoint()
check_dynamic_enpoint()
def main(): def main():