diff --git a/pelato.py b/pelato.py index 5a688f4..a3c84be 100644 --- a/pelato.py +++ b/pelato.py @@ -1,6 +1,7 @@ import argparse import src import src.utils as ut +import time def main(): @@ -32,12 +33,12 @@ def main(): pelato = src.Pelato() if pelato.metrics_enabled: - pelato.metrics = ut.load_metrics(args.dir) + pelato.metrics = {} + start_time = time.time() # Esecuzione del comando specificato if args.command == "gen": pelato.generate(args.dir) - pelato.metrics = {} elif args.command == "build": pelato.build(args.dir) elif args.command == "deploy": @@ -51,7 +52,12 @@ def main(): return if pelato.metrics_enabled: - ut.dump_metrics(pelato.metrics, args.dir) + end_time = time.time() + pelato.metrics['time_total'] = '%.3f'%(end_time - start_time) + + full_metrics = ut.load_metrics(args.dir) + full_metrics['runs'].append(pelato.metrics) + ut.dump_metrics(full_metrics, args.dir) if __name__ == "__main__": main() diff --git a/src/code_generator/generator.py b/src/code_generator/generator.py index 676fbbb..635eb99 100644 --- a/src/code_generator/generator.py +++ b/src/code_generator/generator.py @@ -39,7 +39,7 @@ def generate(project_dir, registry_url, metrics, metrics_enabled): print(f"Generating code for project {config['project_name']}") if metrics_enabled: - gen_metrics['n_task'] = len(config['tasks']) + metrics['n_task'] = len(config['tasks']) start_time = time.time() # Rimozione della cartella di output diff --git a/src/component_deploy/deploy.py b/src/component_deploy/deploy.py index b1eaac8..7600306 100644 --- a/src/component_deploy/deploy.py +++ b/src/component_deploy/deploy.py @@ -2,9 +2,12 @@ import docker import os import logging import yaml +import time -def deploy_components(project_dir, nats_host, nats_port, detached): +def deploy_components(project_dir, nats_host, nats_port, detached, metrics, metrics_enabled): + deploy_metrics = {} + # Check if the project directory is valid if not os.path.exists(f"{project_dir}/gen"): logging.error(f"Project directory is not valid") @@ -15,10 +18,13 @@ def deploy_components(project_dir, nats_host, nats_port, detached): # Docker client client = docker.from_env() + if metrics_enabled: + start_time = time.time() + # Build the images for the project if they don't exist try: client.images.get("wash-deploy-image:latest") - except docker.errors.ImageNotFound: + except: print(' - Building wash-deploy-image from Dockerfile...') client.images.build( @@ -26,6 +32,8 @@ def deploy_components(project_dir, nats_host, nats_port, detached): dockerfile="deploy.Dockerfile", tag="wash-deploy-image:latest" ) + if metrics_enabled: + deploy_metrics['image_build_time'] = '%.3f'%(time.time() - start_time) try: wait_list = [] @@ -46,6 +54,10 @@ def deploy_components(project_dir, nats_host, nats_port, detached): logging.error(f"Error deploying project: {e}") return + if metrics_enabled: + deploy_metrics['components_deploy_time'] = '%.3f'%(time.time() - start_time) + metrics['deploy'] = deploy_metrics + print("Project deployed successfully") def __deploy_wadm(task_dir, client, nats_host, nats_port, detached, wait_list): diff --git a/src/utils.py b/src/utils.py index 42960c7..7914675 100644 --- a/src/utils.py +++ b/src/utils.py @@ -13,7 +13,9 @@ def dump_metrics(metrics, project_dir): def load_metrics(project_dir): if not os.path.exists(f"{project_dir}/metrics.yaml"): - return {} + return { + "runs": [] + } with open(f"{project_dir}/metrics.yaml", 'r') as file: metrics = yaml.safe_load(file)