diff --git a/execution/strategies/cli_parser.py b/execution/lib/cli_parser.py similarity index 78% rename from execution/strategies/cli_parser.py rename to execution/lib/cli_parser.py index 0b16b6ba5b5c569ed48b319ce068cf0c169c19c8..4ab3155e03b51f012f059e0643f5235c48e37bb4 100644 --- a/execution/strategies/cli_parser.py +++ b/execution/lib/cli_parser.py @@ -1,4 +1,14 @@ import argparse +import os + +def env_list_default(env, tf): + """ + Makes a list from an environment string. + """ + v = os.environ.get(env) + if v is not None: + v = [tf(s) for s in v.split(',')] + return v def default_parser(description): """ @@ -8,29 +18,30 @@ def default_parser(description): parser = argparse.ArgumentParser(description=description) parser.add_argument('--uc', metavar='<uc>', + default=os.environ.get('UC'), help='[mandatory] use case number, one of 1, 2, 3 or 4') parser.add_argument('--partitions', '-p', - default=40, - type=int, metavar='<partitions>', + type=int, + default=os.environ.get('PARTITIONS', 40), help='Number of partitions for Kafka topics') parser.add_argument('--cpu-limit', '-cpu', - default='1000m', metavar='<CPU limit>', + default=os.environ.get('CPU_LIMIT', '1000m'), help='Kubernetes CPU limit') parser.add_argument('--memory-limit', '-mem', - default='4Gi', metavar='<memory limit>', + default=os.environ.get('MEMORY_LIMIT', '4Gi'), help='Kubernetes memory limit') parser.add_argument('--commit-ms', - default=100, - type=int, metavar='<commit ms>', + type=int, + default=os.environ.get('COMMIT_MS', 100), help='Kafka Streams commit interval in milliseconds') parser.add_argument('--duration', '-d', - default=5, - type=int, metavar='<duration>', + type=int, + default=os.environ.get('DURATION', 5), help='Duration in minutes subexperiments should be \ executed for') parser.add_argument('--reset', @@ -49,22 +60,24 @@ def benchmark_parser(description): parser = default_parser(description) parser.add_argument('--loads', - type=int, metavar='<load>', + type=int, nargs='+', + default=env_list_default('LOADS', int), help='[mandatory] Loads that should be executed') parser.add_argument('--instances', '-i', dest='instances_list', - type=int, metavar='<instances>', + type=int, nargs='+', + default=env_list_default('INSTANCES', int), help='[mandatory] List of instances used in benchmarks') parser.add_argument('--domain-restriction', action="store_true", help='To use domain restriction. For details see README') parser.add_argument('--search-strategy', - default='default', metavar='<strategy>', + default=os.environ.get('SEARCH_STRATEGY', 'default'), help='The benchmarking search strategy. Can be set to default, linear-search or binary-search') return parser @@ -76,13 +89,16 @@ def execution_parser(description): parser = default_parser(description) parser.add_argument('--exp-id', metavar='<exp id>', + default=os.environ.get('EXP_ID'), help='[mandatory] ID of the experiment') parser.add_argument('--load', - type=int, metavar='<load>', + type=int, + default=os.environ.get('LOAD'), help='[mandatory] Load that should be used for benchmakr') parser.add_argument('--instances', - type=int, metavar='<instances>', + type=int, + default=os.environ.get('INSTANCES'), help='[mandatory] Numbers of instances to be benchmarked') return parser diff --git a/execution/run_uc.py b/execution/run_uc.py index 3a21e23e6971fd0df6a19dd2a9d32cbf83e9af9b..bb2c9191951bf0678c4a5c2d9040b5030c7a362b 100644 --- a/execution/run_uc.py +++ b/execution/run_uc.py @@ -5,7 +5,7 @@ from kubernetes.stream import stream import lag_analysis import logging # logging from os import path # path utilities -from strategies.cli_parser import execution_parser +from lib.cli_parser import execution_parser import subprocess # execute bash commands import sys # for exit of program import time # process sleep diff --git a/execution/theodolite.py b/execution/theodolite.py index b76e0b2da01aef318fe8c5a5a1265276051f301d..2c45bc06740641139c6f72eb142cfd195f96abd0 100755 --- a/execution/theodolite.py +++ b/execution/theodolite.py @@ -1,11 +1,11 @@ #!/usr/bin/env python import argparse +from lib.cli_parser import benchmark_parser import logging # logging import os import sys from strategies.config import ExperimentConfig -from strategies.cli_parser import benchmark_parser import strategies.strategies.domain_restriction.lower_bound_strategy as lower_bound_strategy import strategies.strategies.domain_restriction.no_lower_bound_strategy as no_lower_bound_strategy import strategies.strategies.search.check_all_strategy as check_all_strategy