| #!/usr/bin/env python | |
| """Run Cluster Telemetry to compute n-grams from SKPs.""" | |
| import argparse | |
| import os | |
| import re | |
| import subprocess | |
| import sys | |
| import tempfile | |
| NGRAMS_LUA_SUBSTITUTION_STR = '-- CHANGEME\nlocal n = \d+\n-- CHANGEME' | |
| SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__)) | |
| def main(): | |
| # Parse arguments. | |
| parser = argparse.ArgumentParser( | |
| description='Run Cluster Telemetry to compute n-grams from SKPs.') | |
| parser.add_argument('--n', help='Compute n-grams with this integer as N', | |
| required=True) | |
| args, extra_args = parser.parse_known_args() | |
| # Read the n-gram Lua script. | |
| script_path = os.path.join(SCRIPT_DIR, 'ngrams.lua') | |
| with open(script_path) as f: | |
| script_contents = f.read() | |
| # Replace the default value of n with the value specified by the user. | |
| new_contents, subd = re.subn(NGRAMS_LUA_SUBSTITUTION_STR, | |
| 'local n = %s' % args.n, script_contents, 1) | |
| if subd != 1: | |
| raise Exception('Unable to replace N in %s; expected to find:\n%s' % ( | |
| script_path, sub)) | |
| # Write the new script contents to a temporary file. | |
| tmp_script = tempfile.NamedTemporaryFile(delete=False) | |
| try: | |
| tmp_script.write(new_contents) | |
| tmp_script.close() | |
| # Run trigger_ct_lua with the new script, forwarding the rest of the | |
| # passed-in arguments to the script. | |
| trigger_ct_lua = os.path.join(SCRIPT_DIR, 'trigger_ct_lua') | |
| cmd = ['python', trigger_ct_lua, | |
| '--script', tmp_script.name, | |
| '--aggregator', os.path.join(SCRIPT_DIR, 'ngrams_aggregate.lua')] | |
| cmd.extend(extra_args) | |
| try: | |
| subprocess.check_call(cmd) | |
| except subprocess.CalledProcessError: | |
| exit(1) | |
| finally: | |
| os.remove(tmp_script.name) | |
| if __name__ == '__main__': | |
| main() |