mirror of
https://github.com/Lore09/Tesi-Magistrale.git
synced 2026-02-04 05:21:15 +00:00
Added metrics to gen and build
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import argparse
|
import argparse
|
||||||
import src
|
import src
|
||||||
|
import src.utils as ut
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
||||||
@@ -29,10 +30,14 @@ def main():
|
|||||||
|
|
||||||
# Setup Pelato
|
# Setup Pelato
|
||||||
pelato = src.Pelato()
|
pelato = src.Pelato()
|
||||||
|
|
||||||
|
if pelato.metrics_enabled:
|
||||||
|
pelato.metrics = ut.load_metrics(args.dir)
|
||||||
|
|
||||||
# Esecuzione del comando specificato
|
# Esecuzione del comando specificato
|
||||||
if args.command == "gen":
|
if args.command == "gen":
|
||||||
pelato.generate(args.dir)
|
pelato.generate(args.dir)
|
||||||
|
pelato.metrics = {}
|
||||||
elif args.command == "build":
|
elif args.command == "build":
|
||||||
pelato.build(args.dir)
|
pelato.build(args.dir)
|
||||||
elif args.command == "deploy":
|
elif args.command == "deploy":
|
||||||
@@ -43,6 +48,10 @@ def main():
|
|||||||
pelato.all(args.dir)
|
pelato.all(args.dir)
|
||||||
else:
|
else:
|
||||||
parser.print_help()
|
parser.print_help()
|
||||||
|
return
|
||||||
|
|
||||||
|
if pelato.metrics_enabled:
|
||||||
|
ut.dump_metrics(pelato.metrics, args.dir)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|||||||
@@ -16,5 +16,32 @@ tasks:
|
|||||||
- edge
|
- edge
|
||||||
source_topic: test
|
source_topic: test
|
||||||
dest_topic: test_source
|
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
|
version: 1.0.0
|
||||||
@@ -6,7 +6,6 @@ import src.component_deploy.deploy as deployer
|
|||||||
import src.component_deploy.remove as remover
|
import src.component_deploy.remove as remover
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
class Pelato:
|
class Pelato:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
|
||||||
@@ -22,15 +21,17 @@ class Pelato:
|
|||||||
self.detached = os.getenv('PARALLEL_BUILD')
|
self.detached = os.getenv('PARALLEL_BUILD')
|
||||||
self.nats_host = os.getenv('NATS_HOST')
|
self.nats_host = os.getenv('NATS_HOST')
|
||||||
self.nats_port = os.getenv('NATS_PORT')
|
self.nats_port = os.getenv('NATS_PORT')
|
||||||
|
self.metrics_enabled = os.getenv('ENABLE_METRICS') == 'True'
|
||||||
|
self.metrics = {}
|
||||||
|
|
||||||
def generate(self, project_dir):
|
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):
|
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):
|
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):
|
def remove(self, project_dir):
|
||||||
remover.remove_components(project_dir, self.nats_host, self.nats_port, self.detached)
|
remover.remove_components(project_dir, self.nats_host, self.nats_port, self.detached)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import shutil
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import src.code_generator.template_compiler as template_compiler
|
import src.code_generator.template_compiler as template_compiler
|
||||||
|
import time
|
||||||
|
|
||||||
def __parse_yaml(yaml_file):
|
def __parse_yaml(yaml_file):
|
||||||
with open(yaml_file, 'r') as stream:
|
with open(yaml_file, 'r') as stream:
|
||||||
@@ -18,7 +19,10 @@ def __remove_dir_if_exists(dir_path):
|
|||||||
if os.path.isdir(dir_path):
|
if os.path.isdir(dir_path):
|
||||||
shutil.rmtree(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
|
# 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"):
|
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']}")
|
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
|
# Rimozione della cartella di output
|
||||||
output_dir = f"{project_dir}/gen"
|
output_dir = f"{project_dir}/gen"
|
||||||
__remove_dir_if_exists(output_dir)
|
__remove_dir_if_exists(output_dir)
|
||||||
@@ -55,4 +63,11 @@ def generate(project_dir, registry_url):
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"Error generating task {task['component_name']}: {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 os
|
||||||
import logging
|
import logging
|
||||||
import yaml
|
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
|
# Check if the project directory is valid
|
||||||
if not os.path.exists(f"{project_dir}/gen"):
|
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
|
# Docker client
|
||||||
client = docker.from_env()
|
client = docker.from_env()
|
||||||
|
|
||||||
|
if metrics_enabled:
|
||||||
|
start_time = time.time()
|
||||||
|
|
||||||
# Build the images for the project if they don't exist
|
# Build the images for the project if they don't exist
|
||||||
try:
|
try:
|
||||||
client.images.get("wash-build-image:latest")
|
client.images.get("wash-build-image:latest")
|
||||||
@@ -26,6 +33,8 @@ def build_project(project_dir, reg_user, reg_pass, detached):
|
|||||||
dockerfile="build.Dockerfile",
|
dockerfile="build.Dockerfile",
|
||||||
tag="wash-build-image:latest"
|
tag="wash-build-image:latest"
|
||||||
)
|
)
|
||||||
|
if metrics_enabled:
|
||||||
|
build_metrics['image_build_time'] = '%.3f'%(time.time() - start_time)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
wait_list = []
|
wait_list = []
|
||||||
@@ -46,6 +55,10 @@ def build_project(project_dir, reg_user, reg_pass, detached):
|
|||||||
logging.error(f"Error building project: {e}")
|
logging.error(f"Error building project: {e}")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if metrics_enabled:
|
||||||
|
build_metrics['components_build_time'] = '%.3f'%(time.time() - start_time)
|
||||||
|
metrics['build'] = build_metrics
|
||||||
|
|
||||||
print("Project built successfully")
|
print("Project built successfully")
|
||||||
|
|
||||||
def __build_wasm(task_dir, client, reg_user, reg_pass, detached, wait_list):
|
def __build_wasm(task_dir, client, reg_user, reg_pass, detached, wait_list):
|
||||||
|
|||||||
Reference in New Issue
Block a user