From c6c5289e44e1314812247f3a7ff0485b95f3ad67 Mon Sep 17 00:00:00 2001 From: BryantHe Date: Fri, 28 Jul 2023 10:54:37 +0800 Subject: [PATCH] feat: add metrics for nameko services 3 --- namekoplus/command.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/namekoplus/command.py b/namekoplus/command.py index 7fa2482..471a091 100644 --- a/namekoplus/command.py +++ b/namekoplus/command.py @@ -11,6 +11,11 @@ from python_on_whales import DockerException, ClientNotFoundError, DockerClient, from mako.template import Template +INIT_TYPE_CHOICES = ['all', 'rpc', 'event', 'http', 'timer', 'demo'] +MIDDLEWARE_CHOICES = ['rabbitmq', 'metrics'] +TEST_TYPE_CHOICES = ['unit'] + + def check_docker(): """ Check if docker and docker compose are installed and running. @@ -132,7 +137,7 @@ def start_grafana(): grafana_conf_dir = os.path.join(get_directory('chassis-agent'), 'metric-configs') grafana_provisioning_path = os.path.join(grafana_conf_dir, 'grafana_conf/provisioning') grafana_config_path = os.path.join(grafana_conf_dir, 'grafana_conf/config/grafana.ini') - grafana_dashboard_path = os.path.join(grafana_conf_dir, 'grafana_conf/dashboards') + grafana_dashboard_path = os.path.join('.', 'grafana_dashboards') returned_string = docker.run(image='grafana/grafana:latest', name='grafana', hostname='grafana', detach=True, restart='always', tty=True, interactive=True, publish=[(3100, 3000)], pull='missing', @@ -233,7 +238,7 @@ def cli(): @click.option('-t', '--type', '_type', default='all', show_default=True, - type=click.Choice(['all', 'rpc', 'event', 'http', 'timer', 'demo'], case_sensitive=False), + type=click.Choice(INIT_TYPE_CHOICES, case_sensitive=False), help='The template type of nameko service') def init(directory, _type): """ @@ -258,7 +263,7 @@ def init(directory, _type): @cli.command() @click.option('-m', '--middleware', required=True, - type=click.Choice(['rabbitmq', 'metrics'], case_sensitive=False), + type=click.Choice(MIDDLEWARE_CHOICES, case_sensitive=False), help='The middleware name') def start(middleware): """ @@ -271,7 +276,7 @@ def start(middleware): @cli.command() @click.option('-m', '--middleware', required=True, - type=click.Choice(['rabbitmq', 'metrics'], case_sensitive=False), + type=click.Choice(MIDDLEWARE_CHOICES, case_sensitive=False), help='The middleware name') def stop(middleware): """ @@ -288,7 +293,7 @@ def stop(middleware): @click.option('-t', '--type', '_type', default='unit', show_default=True, - type=click.Choice(['unit'], case_sensitive=False), + type=click.Choice(TEST_TYPE_CHOICES, case_sensitive=False), help='The test type of the nameko service') def test_gen(directory, _type): """ @@ -320,7 +325,6 @@ def metric_config_gen(module, class_name_str): import sys from statsd.client.timer import Timer sys.path.append(os.getcwd()) - click.echo(f'sys.path: {sys.path}') # Extract information of statsd config from the class of nameko service dest_dir = module.split('.')[0] @@ -349,6 +353,10 @@ def metric_config_gen(module, class_name_str): **{'config_list': config_list}) # Generate files of json for grafana dashboard + if not os.access('grafana_dashboards', os.F_OK): + with status(f'Creating directory {os.path.abspath("grafana_dashboards")!r}'): + os.makedirs('grafana_dashboards') + for class_name in class_name_str.split(','): grafana_list = [] for config in config_list: @@ -356,7 +364,7 @@ def metric_config_gen(module, class_name_str): grafana_list.append(config) grafana_configs_dir = os.path.join(get_directory('chassis-agent'), 'metric-configs') grafana_file_path = os.path.join(grafana_configs_dir, 'grafana.json.mako') - output_file = os.path.join(dest_dir, f'{class_name}_Grafana.json') + output_file = os.path.join('grafana_dashboards', f'{class_name}_Grafana.json') template_to_file(template_file=grafana_file_path, dest=output_file, output_encoding='utf-8', **{'service_name': class_name, 'uid': shortuuid.uuid(), 'grafana_list': grafana_list})