diff --git a/deploy_mock/build.sh b/deploy_mock/build.sh new file mode 100644 index 0000000000000000000000000000000000000000..f36fc7c859d22a776f6d81d2b7ec3abbfeea2e11 --- /dev/null +++ b/deploy_mock/build.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# Create .env file +echo "NBCLIENTS=$1" | cat > scripts/.env + +# create a folders with data and script +python scripts/setup.py --clients $1 + + + + diff --git a/deploy_mock/scripts/setup.py b/deploy_mock/scripts/setup.py new file mode 100644 index 0000000000000000000000000000000000000000..16b1501c68dd85fc5bfa6a35df2e7cf51345db15 --- /dev/null +++ b/deploy_mock/scripts/setup.py @@ -0,0 +1,61 @@ +"""Python script to generate experiment folders""" + +import csv +import os +import shutil +from pathlib import Path +from typing import Optional + +import fire + +FILEDIR = os.path.dirname(__file__) + + +def generate_folders(clients: int): + + """Generate the server folder and the appropriate number of client folders, + with appropriate scripts and simulated, unique data""" + + # Clear existing files + dest_dir = os.path.join(Path(FILEDIR).resolve().parents[0], "nodes") + shutil.rmtree(dest_dir, ignore_errors=True) + + # Get grpc directory + grpc_dir = os.path.join(Path(FILEDIR).resolve().parents[0], "comms") + + # create server folder + write_dir(dest_dir, grpc_dir, "server", dotenv=True) + + # create client folders + for clt in range(clients): + clt_dir = write_dir(dest_dir, grpc_dir, "client", clt) + file_path = os.path.join(clt_dir, "data.csv") + with open(file_path, "w", encoding="UTF8") as f: + writer = csv.writer(f) + writer.writerow([0, 1]) + writer.writerow([clt / 2, clt / 2]) + + +def write_dir( + dest_dir: str, + grpc_dir: str, + dir_type: str, + client_nb: Optional[int] = None, + dotenv: bool = False, +) -> str: + + opj = os.path.join # local alias to shorten code + name = f"{dir_type}_{client_nb}" if client_nb is not None else dir_type + out_dir = opj(dest_dir, name) + os.makedirs(out_dir, exist_ok=True) + shutil.copyfile(opj(FILEDIR, f"{dir_type}.py"), opj(out_dir, "run.py")) + shutil.copyfile(opj(FILEDIR, f"{dir_type}.sh"), opj(out_dir, "run.sh")) + shutil.copytree(grpc_dir, opj(out_dir, "comms")) + if dotenv: + shutil.copyfile(opj(FILEDIR, ".env"), opj(out_dir, ".env")) + + return out_dir + + +if __name__ == "__main__": + fire.Fire(generate_folders)