Added metrics to gen and build

This commit is contained in:
Lorenzo Venerandi
2025-02-20 01:15:23 +01:00
parent 0b0e4a408c
commit a30fa7e10f
6 changed files with 94 additions and 8 deletions

View File

@@ -6,7 +6,6 @@ import src.component_deploy.deploy as deployer
import src.component_deploy.remove as remover
import time
class Pelato:
def __init__(self):
@@ -22,15 +21,17 @@ class Pelato:
self.detached = os.getenv('PARALLEL_BUILD')
self.nats_host = os.getenv('NATS_HOST')
self.nats_port = os.getenv('NATS_PORT')
self.metrics_enabled = os.getenv('ENABLE_METRICS') == 'True'
self.metrics = {}
def generate(self, project_dir):
code_generator.generate(project_dir, self.registry_url)
code_generator.generate(project_dir, self.registry_url, self.metrics, self.metrics_enabled)
def build(self, project_dir):
wasm_builder.build_project(project_dir, self.reg_user, self.reg_pass, self.detached)
wasm_builder.build_project(project_dir, self.reg_user, self.reg_pass, self.detached, self.metrics, self.metrics_enabled)
def deploy(self, project_dir):
deployer.deploy_components(project_dir, self.nats_host, self.nats_port, self.detached)
deployer.deploy_components(project_dir, self.nats_host, self.nats_port, self.detached, self.metrics, self.metrics_enabled)
def remove(self, project_dir):
remover.remove_components(project_dir, self.nats_host, self.nats_port, self.detached)

View File

@@ -3,6 +3,7 @@ import shutil
import logging
import os
import src.code_generator.template_compiler as template_compiler
import time
def __parse_yaml(yaml_file):
with open(yaml_file, 'r') as stream:
@@ -18,7 +19,10 @@ def __remove_dir_if_exists(dir_path):
if os.path.isdir(dir_path):
shutil.rmtree(dir_path)
def generate(project_dir, registry_url):
def generate(project_dir, registry_url, metrics, metrics_enabled):
gen_metrics = {}
start_time = 0
# Check if the project directory is valid
if not os.path.exists(f"{project_dir}/workflow.yaml") or not os.path.exists(f"{project_dir}/tasks"):
@@ -34,6 +38,10 @@ def generate(project_dir, registry_url):
print(f"Generating code for project {config['project_name']}")
if metrics_enabled:
gen_metrics['n_task'] = len(config['tasks'])
start_time = time.time()
# Rimozione della cartella di output
output_dir = f"{project_dir}/gen"
__remove_dir_if_exists(output_dir)
@@ -55,4 +63,11 @@ def generate(project_dir, registry_url):
except Exception as e:
logging.error(f"Error generating task {task['component_name']}: {e}")
continue
continue
if metrics_enabled:
end_time = time.time()
gen_metrics['gen_time'] = '%.3f'%(end_time - start_time)
metrics['code_gen'] = gen_metrics
print("Code generation completed")

21
src/utils.py Normal file
View File

@@ -0,0 +1,21 @@
import yaml
import os
def dump_metrics(metrics, project_dir):
with open(f"{project_dir}/metrics.yaml", 'w') as file:
yaml.dump(metrics, file)
print(f"Metrics saved in {project_dir}metrics.yaml")
return
def load_metrics(project_dir):
if not os.path.exists(f"{project_dir}/metrics.yaml"):
return {}
with open(f"{project_dir}/metrics.yaml", 'r') as file:
metrics = yaml.safe_load(file)
return metrics

View File

@@ -2,8 +2,12 @@ import docker
import os
import logging
import yaml
import time
def build_project(project_dir, reg_user, reg_pass, detached):
def build_project(project_dir, reg_user, reg_pass, detached, metrics, metrics_enabled):
build_metrics = {}
start_time = 0
# Check if the project directory is valid
if not os.path.exists(f"{project_dir}/gen"):
@@ -15,6 +19,9 @@ def build_project(project_dir, reg_user, reg_pass, 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-build-image:latest")
@@ -26,6 +33,8 @@ def build_project(project_dir, reg_user, reg_pass, detached):
dockerfile="build.Dockerfile",
tag="wash-build-image:latest"
)
if metrics_enabled:
build_metrics['image_build_time'] = '%.3f'%(time.time() - start_time)
try:
wait_list = []
@@ -46,6 +55,10 @@ def build_project(project_dir, reg_user, reg_pass, detached):
logging.error(f"Error building project: {e}")
return
if metrics_enabled:
build_metrics['components_build_time'] = '%.3f'%(time.time() - start_time)
metrics['build'] = build_metrics
print("Project built successfully")
def __build_wasm(task_dir, client, reg_user, reg_pass, detached, wait_list):