mirror of
https://github.com/Lore09/Tesi-Magistrale.git
synced 2025-12-19 04:14:35 +00:00
Added metrics to gen and build
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import argparse
|
||||
import src
|
||||
import src.utils as ut
|
||||
|
||||
def main():
|
||||
|
||||
@@ -29,10 +30,14 @@ def main():
|
||||
|
||||
# Setup Pelato
|
||||
pelato = src.Pelato()
|
||||
|
||||
if pelato.metrics_enabled:
|
||||
pelato.metrics = ut.load_metrics(args.dir)
|
||||
|
||||
# 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":
|
||||
@@ -43,6 +48,10 @@ def main():
|
||||
pelato.all(args.dir)
|
||||
else:
|
||||
parser.print_help()
|
||||
return
|
||||
|
||||
if pelato.metrics_enabled:
|
||||
ut.dump_metrics(pelato.metrics, args.dir)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -16,5 +16,32 @@ tasks:
|
||||
- edge
|
||||
source_topic: test
|
||||
dest_topic: test_source
|
||||
component_name: test_producer_help
|
||||
component_name: test_producer_help1
|
||||
version: 1.0.0
|
||||
- name: Aiutatemi
|
||||
type: producer_nats
|
||||
code: danano.go
|
||||
targets:
|
||||
- edge
|
||||
source_topic: test
|
||||
dest_topic: test_source
|
||||
component_name: test_producer_help2
|
||||
version: 1.0.0
|
||||
- name: Aiutatemi
|
||||
type: producer_nats
|
||||
code: danano.go
|
||||
targets:
|
||||
- edge
|
||||
source_topic: test
|
||||
dest_topic: test_source
|
||||
component_name: test_producer_help3
|
||||
version: 1.0.0
|
||||
- name: Aiutatemi
|
||||
type: producer_nats
|
||||
code: danano.go
|
||||
targets:
|
||||
- edge
|
||||
source_topic: test
|
||||
dest_topic: test_source
|
||||
component_name: test_producer_help4
|
||||
version: 1.0.0
|
||||
@@ -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)
|
||||
|
||||
@@ -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
21
src/utils.py
Normal 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
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user