update_telemetry_defaults.py revision 88272d479f2761cc1906fea564c73033f77a6270
188272d479f2761cc1906fea564c73033f77a6270Caroline Tice#!/usr/bin/python2 2fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice# 3fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice# Copyright 2013 Google Inc. All Rights Reserved. 4fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice"""Script to maintain the Telemetry benchmark default results file. 5fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 6fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeThis script allows the user to see and update the set of default 7fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeresults to be used in generating reports from running the Telemetry 8fb27ee972816c8c2fddf2540792131fad2a25d0dcmticebenchmarks. 9fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 10fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice""" 11fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 1288272d479f2761cc1906fea564c73033f77a6270Caroline Ticefrom __future__ import print_function 1388272d479f2761cc1906fea564c73033f77a6270Caroline Tice 14f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano__author__ = 'cmtice@google.com (Caroline Tice)' 15fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 16fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeimport os 17fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeimport sys 18fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeimport json 19fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 2088272d479f2761cc1906fea564c73033f77a6270Caroline Ticefrom cros_utils import misc 21fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 22fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeDefaults = {} 23fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 24fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 25fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeclass TelemetryDefaults(object): 2688272d479f2761cc1906fea564c73033f77a6270Caroline Tice """Class for handling telemetry default return result fields.""" 27fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 28ef4ca8a8cfe05ec09447896db42fb220d07834f8Caroline Tice DEFAULTS_FILE_NAME = 'crosperf/default-telemetry-results.json' 29ef4ca8a8cfe05ec09447896db42fb220d07834f8Caroline Tice 30fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice def __init__(self): 31fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # Get the Crosperf directory; that is where the defaults 32fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # file should be. 33ef4ca8a8cfe05ec09447896db42fb220d07834f8Caroline Tice dirname, __ = misc.GetRoot(__file__) 34ef4ca8a8cfe05ec09447896db42fb220d07834f8Caroline Tice fullname = os.path.join(dirname, self.DEFAULTS_FILE_NAME) 35fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self._filename = fullname 36fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self._defaults = {} 37fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 38f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def ReadDefaultsFile(self): 39fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if os.path.exists(self._filename): 40f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano with open(self._filename, 'r') as fp: 41fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self._defaults = json.load(fp) 42fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 43f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def WriteDefaultsFile(self): 44f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano with open(self._filename, 'w') as fp: 4527dc583d33d461daad462f82ab7974b07cb31117cmtice json.dump(self._defaults, fp, indent=2) 46fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 47f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def ListCurrentDefaults(self, benchmark=all): 48fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # Show user current defaults. By default, show all. The user 49fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # can specify the name of a particular benchmark to see only that 50fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # benchmark's default values. 51fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if len(self._defaults) == 0: 52f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print('The benchmark default results are currently empty.') 53fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if benchmark == all: 54fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice for b in self._defaults.keys(): 55fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice results = self._defaults[b] 56fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice out_str = b + ' : ' 57fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice for r in results: 58f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano out_str += r + ' ' 59f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print(out_str) 60fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice elif benchmark in self._defaults: 61fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice results = self._defaults[benchmark] 62fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice out_str = benchmark + ' : ' 63fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice for r in results: 64f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano out_str += r + ' ' 65f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print(out_str) 66fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 67f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Error: Unrecognized benchmark '%s'" % benchmark) 68fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 69f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def AddDefault(self, benchmark, result): 70fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if benchmark in self._defaults: 71fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice resultList = self._defaults[benchmark] 72fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 73fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice resultList = [] 74fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice resultList.append(result) 75fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self._defaults[benchmark] = resultList 76f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Updated results set for '%s': " % benchmark) 77f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print('%s : %s' % (benchmark, repr(self._defaults[benchmark]))) 78fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 79f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def RemoveDefault(self, benchmark, result): 80fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if benchmark in self._defaults: 81fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice resultList = self._defaults[benchmark] 82fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if result in resultList: 83fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice resultList.remove(result) 84f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Updated results set for '%s': " % benchmark) 85f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print('%s : %s' % (benchmark, repr(self._defaults[benchmark]))) 86fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 87f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("'%s' is not in '%s's default results list." % 88f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano (result, benchmark)) 89fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 90f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Cannot find benchmark named '%s'" % benchmark) 91fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 92f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def GetDefault(self): 930009415847e04be4670c025e1b475adc7de23cc8Yunlian Jiang return self._defaults 940009415847e04be4670c025e1b475adc7de23cc8Yunlian Jiang 95f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def RemoveBenchmark(self, benchmark): 96fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if benchmark in self._defaults: 97fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice del self._defaults[benchmark] 98f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Deleted benchmark '%s' from list of benchmarks." % benchmark) 99fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 100f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Cannot find benchmark named '%s'" % benchmark) 101fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 102f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def RenameBenchmark(self, old_name, new_name): 103fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if old_name in self._defaults: 104fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice resultsList = self._defaults[old_name] 105fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice del self._defaults[old_name] 106fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self._defaults[new_name] = resultsList 107f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Renamed '%s' to '%s'." % (old_name, new_name)) 108fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 109f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Cannot find benchmark named '%s'" % old_name) 110fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 111fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice def UsageError(self, user_input): 112fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # Print error message, then show options 113f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print("Error:Invalid user input: '%s'" % user_input) 114fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.ShowOptions() 115fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 116f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def ShowOptions(self): 11788272d479f2761cc1906fea564c73033f77a6270Caroline Tice print(""" 118fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeBelow are the valid user options and their arguments, and an explanation 119fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeof what each option does. You may either print out the full name of the 120fb27ee972816c8c2fddf2540792131fad2a25d0dcmticeoption, or you may use the first letter of the option. Case (upper or 121fb27ee972816c8c2fddf2540792131fad2a25d0dcmticelower) does not matter, for the command (case of the result name DOES matter): 122fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 123fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (L)ist - List all current defaults 124fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (L)ist <benchmark> - List current defaults for benchmark 125fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (H)elp - Show this information. 126fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (A)dd <benchmark> <result> - Add a default result for a particular 127fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice benchmark (appends to benchmark's list 128fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice of results, if list already exists) 129fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (D)elete <benchmark> <result> - Delete a default result for a 130fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice particular benchmark 131fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (R)emove <benchmark> - Remove an entire benchmark (and its 132fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice results) 133fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (M)ove <old-benchmark> <new-benchmark> - Rename a benchmark 134fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (Q)uit - Exit this program, saving changes. 135fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice (T)erminate - Exit this program; abandon changes. 136fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 13788272d479f2761cc1906fea564c73033f77a6270Caroline Tice""") 138fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 139f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano def GetUserInput(self): 140fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # Prompt user 141f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano print('Enter option> ') 142fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # Process user input 143fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice inp = sys.stdin.readline() 144fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice inp = inp[:-1] 145fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice # inp = inp.lower() 146f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano words = inp.split(' ') 147fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice option = words[0] 148fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice option = option.lower() 149fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if option == 'h' or option == 'help': 150fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.ShowOptions() 151fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice elif option == 'l' or option == 'list': 152fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if len(words) == 1: 153fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.ListCurrentDefaults() 154fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 155fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.ListCurrentDefaults(benchmark=words[1]) 156fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice elif option == 'a' or option == 'add': 157fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if len(words) < 3: 158f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano self.UsageError(inp) 159fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 160fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice benchmark = words[1] 161fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice resultList = words[2:] 162fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice for r in resultList: 163fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.AddDefault(benchmark, r) 164fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice elif option == 'd' or option == 'delete': 165fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if len(words) != 3: 166f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano self.UsageError(inp) 167fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 168fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice benchmark = words[1] 169fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice result = words[2] 170fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.RemoveDefault(benchmark, result) 171fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice elif option == 'r' or option == 'remove': 172fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if len(words) != 2: 173f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano self.UsageError(inp) 174fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 175fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice benchmark = words[1] 176fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.RemoveBenchmark(benchmark) 177fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice elif option == 'm' or option == 'move': 178fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice if len(words) != 3: 179f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano self.UsageError(inp) 180fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice else: 181fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice old_name = words[1] 182fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice new_name = words[2] 183fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.RenameBenchmark(old_name, new_name) 184fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice elif option == 'q' or option == 'quit': 185fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice self.WriteDefaultsFile() 186fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 187fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice return (option == 'q' or option == 'quit' or option == 't' or 188fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice option == 'terminate') 189fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 190fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 191fb27ee972816c8c2fddf2540792131fad2a25d0dcmticedef Main(): 192fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice defaults = TelemetryDefaults() 193fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice defaults.ReadDefaultsFile() 194fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice defaults.ShowOptions() 195fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice done = defaults.GetUserInput() 196fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice while not done: 197fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice done = defaults.GetUserInput() 198fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice return 0 199fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice 200f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozano 201f2a3ef46f75d2196a93d3ed27f4d1fcf22b54fbeLuis Lozanoif __name__ == '__main__': 202fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice retval = Main() 203fb27ee972816c8c2fddf2540792131fad2a25d0dcmtice sys.exit(retval) 204