mirror of
https://github.com/logos-co/nomos-simulations.git
synced 2025-01-22 08:29:30 +00:00
Use python for scripts
This commit is contained in:
parent
99ec9cec32
commit
f6ae008e40
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
simulation
|
34
scripts/build_cases.py
Normal file
34
scripts/build_cases.py
Normal file
@ -0,0 +1,34 @@
|
||||
import csv
|
||||
import shutil
|
||||
from build_config import build_config
|
||||
|
||||
def build_case(overlay, committees, nodes, config_name, max_view=1, network='default'):
|
||||
build_config(overlay, committees, nodes, config_name, max_view, network)
|
||||
shutil.move(f"{config_name}.json", "../configs/")
|
||||
|
||||
def build_cases(csv_path):
|
||||
with open(csv_path, 'r') as csv_file:
|
||||
reader = csv.reader(csv_file)
|
||||
|
||||
for row in reader:
|
||||
overlay_type, node_count, committees = row
|
||||
|
||||
if overlay_type == "overlay":
|
||||
continue
|
||||
|
||||
config_name = f"{overlay_type}_{node_count}_{committees}"
|
||||
|
||||
build_case(overlay_type, committees, node_count, f"{config_name}_view_1_default")
|
||||
build_case(overlay_type, committees, node_count, f"{config_name}_view_10_default", max_view="10")
|
||||
build_case(overlay_type, committees, node_count, f"{config_name}_view_10_optimistic", max_view="10", network="optimistic")
|
||||
build_case(overlay_type, committees, node_count, f"{config_name}_view_10_pessimistic", max_view="10", network="pessimistic")
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
if len(sys.argv) != 2:
|
||||
print("Usage: python generate_configs.py <path_to_csv_file>")
|
||||
sys.exit(1)
|
||||
|
||||
csv_path = sys.argv[1]
|
||||
build_cases(csv_path)
|
||||
|
@ -1,22 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Check if the input file is provided
|
||||
if [ "$#" -ne 1 ]; then
|
||||
echo "Usage: $0 <path_to_csv_file>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Read the CSV file line by line
|
||||
while IFS=, read -r overlay_type node_count committees; do
|
||||
if [[ "$overlay_type" == "overlay" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
CONFIG_NAME="${overlay_type}_${node_count}_${committees}"
|
||||
./build_config.sh "$overlay_type" "$committees" "$node_count" $CONFIG_NAME"_view_1_default"
|
||||
./build_config.sh "$overlay_type" "$committees" "$node_count" $CONFIG_NAME"_view_10_default" 10
|
||||
./build_config.sh "$overlay_type" "$committees" "$node_count" $CONFIG_NAME"_view_10_optimistic" 10 optimistic
|
||||
./build_config.sh "$overlay_type" "$committees" "$node_count" $CONFIG_NAME"_view_10_pessimistic" 10 pessimistic
|
||||
mv *.json ../configs/
|
||||
done < $1
|
||||
|
54
scripts/build_config.py
Normal file
54
scripts/build_config.py
Normal file
@ -0,0 +1,54 @@
|
||||
import sys
|
||||
import os
|
||||
import json
|
||||
|
||||
TEMPLATE_PATH = "config_builder/template.json"
|
||||
TEMPORARY_PATH = "config_builder/temp.json"
|
||||
NETWORK_UPDATE_PATH = "config_builder/network"
|
||||
RECORD_UPDATE_PATH = "config_builder/record.json"
|
||||
|
||||
def build_config(overlay_type, number_of_committees, node_count, config_name, max_view=1, network='default'):
|
||||
|
||||
with open(TEMPLATE_PATH, 'r') as f:
|
||||
data = json.load(f)
|
||||
|
||||
network_file = f"{NETWORK_UPDATE_PATH}/network_{network}.json"
|
||||
with open(network_file, 'r') as f:
|
||||
network_update = json.load(f)
|
||||
data["network_settings"] = network_update["network_settings"]
|
||||
|
||||
with open(RECORD_UPDATE_PATH, 'r') as f:
|
||||
record_update = json.load(f)
|
||||
data["record_settings"] = record_update["record_settings"]
|
||||
|
||||
data["node_count"] = int(node_count)
|
||||
data["stream_settings"]["path"] = f"output/{config_name}.json"
|
||||
data["wards"][0]["max_view"] = int(max_view)
|
||||
|
||||
if overlay_type == "tree":
|
||||
data["overlay_settings"]["number_of_committees"] = int(number_of_committees)
|
||||
elif overlay_type == "branch":
|
||||
data["overlay_settings"]["branch_depth"] = int(number_of_committees)
|
||||
else:
|
||||
print("Unknown overlay type. Supported types are 'tree' and 'branch'.")
|
||||
return
|
||||
|
||||
with open(f"{config_name}.json", 'w') as f:
|
||||
json.dump(data, f, indent=4)
|
||||
|
||||
print(f"Configuration built and saved as {config_name}.json")
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 5:
|
||||
print("Usage: python config_builder.py <overlay_type> <number_of_committees> <node_count> <config_name> [max_view] [network_config]")
|
||||
sys.exit(1)
|
||||
|
||||
overlay_type = sys.argv[1]
|
||||
number_of_committees = sys.argv[2]
|
||||
node_count = sys.argv[3]
|
||||
config_name = sys.argv[4]
|
||||
max_view = sys.argv[5] if len(sys.argv) > 5 else 1
|
||||
network_config = sys.argv[6] if len(sys.argv) > 6 else 'default'
|
||||
|
||||
build_config(overlay_type, number_of_committees, node_count, config_name, max_view, network_config)
|
||||
|
@ -1,57 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ "$#" -lt 4 ]; then
|
||||
echo "Usage: $0 <overlay_type> <number_of_committees> <node_count> <config_name> [max_view] [network_config]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v jq &> /dev/null; then
|
||||
echo "jq is not installed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v sponge &> /dev/null; then
|
||||
echo "moreutils is not installed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
OVERLAY_TYPE=$1
|
||||
NUMBER_OF_COMMITTEES=$2
|
||||
NODE_COUNT=$3
|
||||
CONFIG_NAME=$4
|
||||
MAX_VIEW=${5:-1}
|
||||
NETWORK_CONFIG=${6:-default}
|
||||
|
||||
TEMPLATE_PATH="config_builder/template.json"
|
||||
TEMPORARY_PATH="config_builder/temp.json"
|
||||
NETWORK_UPDATE_PATH="config_builder/network/network_$NETWORK_CONFIG.json"
|
||||
RECORD_UPDATE_PATH="config_builder/record.json"
|
||||
|
||||
# Update the template with the network settings
|
||||
jq --slurpfile networkUpdate $NETWORK_UPDATE_PATH \
|
||||
'.network_settings = $networkUpdate[0].network_settings' $TEMPLATE_PATH | sponge $TEMPORARY_PATH
|
||||
|
||||
# Update the template with the record settings
|
||||
jq --slurpfile recordUpdate $RECORD_UPDATE_PATH \
|
||||
'.record_settings = $recordUpdate[0].record_settings' $TEMPORARY_PATH | sponge $TEMPORARY_PATH
|
||||
|
||||
# Update new JSON with the command line arguments
|
||||
jq --arg numCommit "$NUMBER_OF_COMMITTEES" \
|
||||
--arg nodeCount "$NODE_COUNT" \
|
||||
--arg confName "$CONFIG_NAME" \
|
||||
--arg maxView "$MAX_VIEW" \
|
||||
'.node_count = ($nodeCount | tonumber) | .stream_settings.path = "output/" + $confName + ".json" | .wards[0].max_view = ($maxView | tonumber)' $TEMPORARY_PATH | sponge $TEMPORARY_PATH
|
||||
|
||||
if [ "$OVERLAY_TYPE" == "tree" ]; then
|
||||
jq --arg numCommit "$NUMBER_OF_COMMITTEES" \
|
||||
'.overlay_settings.number_of_committees = ($numCommit | tonumber)' $TEMPORARY_PATH | sponge $TEMPORARY_PATH
|
||||
elif [ "$OVERLAY_TYPE" == "branch" ]; then
|
||||
cat $TEMPORARY_PATH | jq --arg numCommit "$NUMBER_OF_COMMITTEES" \
|
||||
'.overlay_settings.branch_depth = ($numCommit | tonumber)' $TEMPORARY_PATH | sponge $TEMPORARY_PATH
|
||||
else
|
||||
echo "Unknown overlay type. Supported types are 'tree' and 'branch'."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
mv $TEMPORARY_PATH "$CONFIG_NAME.json"
|
||||
echo "Configuration built and saved as $CONFIG_NAME.json"
|
@ -1,6 +1,15 @@
|
||||
{
|
||||
"record_settings": {
|
||||
"node_id": true,
|
||||
"current_view": true
|
||||
"current_view": true,
|
||||
"highest_voted_view": true,
|
||||
"local_high_qc": true,
|
||||
"safe_blocks": false,
|
||||
"last_view_timeout_qc": true,
|
||||
"latest_committed_block": true,
|
||||
"latest_committed_view": true,
|
||||
"root_committee": false,
|
||||
"parent_committee": false,
|
||||
"child_committees": false,
|
||||
"committed_blocks": false
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user