ftl/benchmark/ftl_php_benchmark_yaml.py (95 lines of code) (raw):

"""A script to generate a cloudbuild yaml.""" import os import yaml import argparse # Add directories for new tests here. DEP_TESTS = ['small_app', 'medium_app', 'large_app'] APP_SIZE_TESTS = { 'scratch_small': '5', 'scratch_medium': '500', 'scratch_large': '50000' } _DATA_DIR = '/workspace/ftl/php/benchmark/data/' _PHP_BASE = 'gcr.io/gae-runtimes/php72_app_builder:argo_current' parser = argparse.ArgumentParser( description='Generate cloudbuild yaml for FTL benchmarking.') parser.add_argument( '--iterations', action='store', type=int, default=5, help='Number of times to build the image.') parser.add_argument( '--dep-test', dest='dep_test', action='store_true', default=False, help='Flag to enable to dependency test for the benchmark.') parser.add_argument( '--app-size-test', dest='app_size_test', action='store_true', default=False, help='Flag to enable the app size test for the benchmark.') def main(): args = parser.parse_args() if not (args.dep_test and args.app_size): args.dep_test = True args.app_size = True cloudbuild_yaml = { 'steps': [ # We need to chmod in some cases for permissions. { 'name': 'ubuntu', 'args': ['chmod', 'a+rx', '-R', '/workspace'] }, # Build the FTL image from source and load it into the daemon. { 'name': 'gcr.io/cloud-builders/bazel@sha256:7360c36bded15db68a35cfb1740a994f0a09ad5ce378a97f96d698bc223e442a', 'args': [ 'run', '//ftl/php/benchmark:php_benchmark_image', '--', '--norun' ], }, # Build the php builder par file { 'name': 'gcr.io/cloud-builders/bazel@sha256:7360c36bded15db68a35cfb1740a994f0a09ad5ce378a97f96d698bc223e442a', 'args': ['build', 'ftl:php_builder.par'] }, ] } # Generate a set of steps for each test and add them. if args.dep_test: for app_dir in DEP_TESTS: cloudbuild_yaml['steps'] += dependency_test_step( app_dir, args.iterations) # Generate a set of steps for each test and add them. if args.app_size_test: for app_dir in APP_SIZE_TESTS: cloudbuild_yaml['steps'] += app_size_test_step( app_dir, args.iterations, APP_SIZE_TESTS[app_dir]) print yaml.dump(cloudbuild_yaml) def dependency_test_step(app_dir, iterations): name = 'gcr.io/ftl-node-test/benchmark_%s:latest' % app_dir return [ # First build the image { 'name': 'bazel/ftl/php/benchmark:php_benchmark_image', 'args': [ '--base', _PHP_BASE, '--name', name, '--directory', os.path.join(_DATA_DIR + app_dir), '--description', app_dir, '--iterations', str(iterations) ] } ] def app_size_test_step(app_dir, iterations, gen_files): name = 'gcr.io/ftl-node-test/benchmark_%s:latest' % app_dir return [ # First build the image { 'name': 'bazel/ftl/php/benchmark:php_benchmark_image', 'args': [ '--base', _PHP_BASE, '--name', name, '--directory', os.path.join(_DATA_DIR + app_dir), '--description', app_dir, '--iterations', str(iterations), '--gen_files', gen_files ] } ] if __name__ == "__main__": main()