feat: add metrics for nameko services 3

This commit is contained in:
BryantHe 2023-07-28 10:54:37 +08:00
parent e389125b10
commit c6c5289e44
1 changed files with 15 additions and 7 deletions

View File

@ -11,6 +11,11 @@ from python_on_whales import DockerException, ClientNotFoundError, DockerClient,
from mako.template import Template 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(): def check_docker():
""" """
Check if docker and docker compose are installed and running. 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_conf_dir = os.path.join(get_directory('chassis-agent'), 'metric-configs')
grafana_provisioning_path = os.path.join(grafana_conf_dir, 'grafana_conf/provisioning') 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_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', returned_string = docker.run(image='grafana/grafana:latest', name='grafana', hostname='grafana',
detach=True, restart='always', tty=True, interactive=True, detach=True, restart='always', tty=True, interactive=True,
publish=[(3100, 3000)], pull='missing', publish=[(3100, 3000)], pull='missing',
@ -233,7 +238,7 @@ def cli():
@click.option('-t', '--type', '_type', @click.option('-t', '--type', '_type',
default='all', default='all',
show_default=True, 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') help='The template type of nameko service')
def init(directory, _type): def init(directory, _type):
""" """
@ -258,7 +263,7 @@ def init(directory, _type):
@cli.command() @cli.command()
@click.option('-m', '--middleware', @click.option('-m', '--middleware',
required=True, required=True,
type=click.Choice(['rabbitmq', 'metrics'], case_sensitive=False), type=click.Choice(MIDDLEWARE_CHOICES, case_sensitive=False),
help='The middleware name') help='The middleware name')
def start(middleware): def start(middleware):
""" """
@ -271,7 +276,7 @@ def start(middleware):
@cli.command() @cli.command()
@click.option('-m', '--middleware', @click.option('-m', '--middleware',
required=True, required=True,
type=click.Choice(['rabbitmq', 'metrics'], case_sensitive=False), type=click.Choice(MIDDLEWARE_CHOICES, case_sensitive=False),
help='The middleware name') help='The middleware name')
def stop(middleware): def stop(middleware):
""" """
@ -288,7 +293,7 @@ def stop(middleware):
@click.option('-t', '--type', '_type', @click.option('-t', '--type', '_type',
default='unit', default='unit',
show_default=True, 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') help='The test type of the nameko service')
def test_gen(directory, _type): def test_gen(directory, _type):
""" """
@ -320,7 +325,6 @@ def metric_config_gen(module, class_name_str):
import sys import sys
from statsd.client.timer import Timer from statsd.client.timer import Timer
sys.path.append(os.getcwd()) sys.path.append(os.getcwd())
click.echo(f'sys.path: {sys.path}')
# Extract information of statsd config from the class of nameko service # Extract information of statsd config from the class of nameko service
dest_dir = module.split('.')[0] dest_dir = module.split('.')[0]
@ -349,6 +353,10 @@ def metric_config_gen(module, class_name_str):
**{'config_list': config_list}) **{'config_list': config_list})
# Generate files of json for grafana dashboard # 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(','): for class_name in class_name_str.split(','):
grafana_list = [] grafana_list = []
for config in config_list: for config in config_list:
@ -356,7 +364,7 @@ def metric_config_gen(module, class_name_str):
grafana_list.append(config) grafana_list.append(config)
grafana_configs_dir = os.path.join(get_directory('chassis-agent'), 'metric-configs') grafana_configs_dir = os.path.join(get_directory('chassis-agent'), 'metric-configs')
grafana_file_path = os.path.join(grafana_configs_dir, 'grafana.json.mako') 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', template_to_file(template_file=grafana_file_path, dest=output_file, output_encoding='utf-8',
**{'service_name': class_name, 'uid': shortuuid.uuid(), **{'service_name': class_name, 'uid': shortuuid.uuid(),
'grafana_list': grafana_list}) 'grafana_list': grafana_list})