mirror of
https://github.com/Bryanthelol/namekoplus
synced 2025-09-14 21:46:03 +08:00
Compare commits
1 Commits
857d26d092
...
v0.4.0
Author | SHA1 | Date | |
---|---|---|---|
c35e7195f3 |
@@ -1,3 +1,4 @@
|
||||
import importlib
|
||||
import inspect
|
||||
import os
|
||||
import shutil
|
||||
@@ -10,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.
|
||||
@@ -131,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',
|
||||
@@ -232,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):
|
||||
"""
|
||||
@@ -257,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):
|
||||
"""
|
||||
@@ -270,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):
|
||||
"""
|
||||
@@ -287,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):
|
||||
"""
|
||||
@@ -316,12 +322,15 @@ def metric_config_gen(module, class_name_str):
|
||||
"""
|
||||
Generate metric config for nameko services.
|
||||
"""
|
||||
import sys
|
||||
from statsd.client.timer import Timer
|
||||
sys.path.append(os.getcwd())
|
||||
|
||||
# Extract information of statsd config from the class of nameko service
|
||||
dest_dir = module.split('.')[0]
|
||||
file_name = module.split('.')[-1]
|
||||
_module = __import__(module)
|
||||
|
||||
config_list = []
|
||||
for class_name in class_name_str.split(','):
|
||||
members = inspect.getmembers(getattr(getattr(_module, file_name), class_name), predicate=inspect.isfunction)
|
||||
@@ -338,6 +347,7 @@ def metric_config_gen(module, class_name_str):
|
||||
})
|
||||
|
||||
# Generate one file of statsd config yaml for statsd exporter
|
||||
with status(f'Creating statsd_mapping.yml'):
|
||||
metric_configs_dir = os.path.join(get_directory('chassis-agent'), 'metric-configs')
|
||||
template_file_path = os.path.join(metric_configs_dir, 'statsd_mapping.yml.mako')
|
||||
output_file = os.path.join('.', 'statsd_mapping.yml')
|
||||
@@ -345,6 +355,11 @@ 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')
|
||||
|
||||
with status(f'Creating files of Grafana.json into the directory of grafana_dashboards'):
|
||||
for class_name in class_name_str.split(','):
|
||||
grafana_list = []
|
||||
for config in config_list:
|
||||
@@ -352,7 +367,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})
|
||||
|
Reference in New Issue
Block a user