You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
7.2 KiB
209 lines
7.2 KiB
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
# Copyright 2020 The ChromiumOS Authors
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
"""Script to maintain the Telemetry benchmark default results file.
|
|
|
|
This script allows the user to see and update the set of default
|
|
results to be used in generating reports from running the Telemetry
|
|
benchmarks.
|
|
"""
|
|
|
|
|
|
__author__ = "cmtice@google.com (Caroline Tice)"
|
|
|
|
import json
|
|
import os
|
|
import sys
|
|
|
|
from cros_utils import misc
|
|
|
|
|
|
Defaults = {}
|
|
|
|
|
|
class TelemetryDefaults(object):
|
|
"""Class for handling telemetry default return result fields."""
|
|
|
|
DEFAULTS_FILE_NAME = "crosperf/default-telemetry-results.json"
|
|
|
|
def __init__(self):
|
|
# Get the Crosperf directory; that is where the defaults
|
|
# file should be.
|
|
dirname, __ = misc.GetRoot(__file__)
|
|
fullname = os.path.join(dirname, self.DEFAULTS_FILE_NAME)
|
|
self._filename = fullname
|
|
self._defaults = {}
|
|
|
|
def ReadDefaultsFile(self):
|
|
if os.path.exists(self._filename):
|
|
with open(self._filename, "r", encoding="utf-8") as fp:
|
|
self._defaults = json.load(fp)
|
|
|
|
def WriteDefaultsFile(self):
|
|
with open(self._filename, "w", encoding="utf-8") as fp:
|
|
json.dump(self._defaults, fp, indent=2)
|
|
|
|
def ListCurrentDefaults(self, benchmark="all"):
|
|
# Show user current defaults. By default, show all. The user
|
|
# can specify the name of a particular benchmark to see only that
|
|
# benchmark's default values.
|
|
if len(self._defaults) == 0:
|
|
print("The benchmark default results are currently empty.")
|
|
if benchmark == "all":
|
|
for b in self._defaults.keys():
|
|
results = self._defaults[b]
|
|
out_str = b + " : "
|
|
for r in results:
|
|
out_str += r + " "
|
|
print(out_str)
|
|
elif benchmark in self._defaults:
|
|
results = self._defaults[benchmark]
|
|
out_str = benchmark + " : "
|
|
for r in results:
|
|
out_str += r + " "
|
|
print(out_str)
|
|
else:
|
|
print("Error: Unrecognized benchmark '%s'" % benchmark)
|
|
|
|
def AddDefault(self, benchmark, result):
|
|
if benchmark in self._defaults:
|
|
resultList = self._defaults[benchmark]
|
|
else:
|
|
resultList = []
|
|
resultList.append(result)
|
|
self._defaults[benchmark] = resultList
|
|
print("Updated results set for '%s': " % benchmark)
|
|
print("%s : %s" % (benchmark, repr(self._defaults[benchmark])))
|
|
|
|
def RemoveDefault(self, benchmark, result):
|
|
if benchmark in self._defaults:
|
|
resultList = self._defaults[benchmark]
|
|
if result in resultList:
|
|
resultList.remove(result)
|
|
print("Updated results set for '%s': " % benchmark)
|
|
print("%s : %s" % (benchmark, repr(self._defaults[benchmark])))
|
|
else:
|
|
print(
|
|
"'%s' is not in '%s's default results list."
|
|
% (result, benchmark)
|
|
)
|
|
else:
|
|
print("Cannot find benchmark named '%s'" % benchmark)
|
|
|
|
def GetDefault(self):
|
|
return self._defaults
|
|
|
|
def RemoveBenchmark(self, benchmark):
|
|
if benchmark in self._defaults:
|
|
del self._defaults[benchmark]
|
|
print("Deleted benchmark '%s' from list of benchmarks." % benchmark)
|
|
else:
|
|
print("Cannot find benchmark named '%s'" % benchmark)
|
|
|
|
def RenameBenchmark(self, old_name, new_name):
|
|
if old_name in self._defaults:
|
|
resultsList = self._defaults[old_name]
|
|
del self._defaults[old_name]
|
|
self._defaults[new_name] = resultsList
|
|
print("Renamed '%s' to '%s'." % (old_name, new_name))
|
|
else:
|
|
print("Cannot find benchmark named '%s'" % old_name)
|
|
|
|
def UsageError(self, user_input):
|
|
# Print error message, then show options
|
|
print("Error:Invalid user input: '%s'" % user_input)
|
|
self.ShowOptions()
|
|
|
|
def ShowOptions(self):
|
|
print(
|
|
"""
|
|
Below are the valid user options and their arguments, and an explanation
|
|
of what each option does. You may either print out the full name of the
|
|
option, or you may use the first letter of the option. Case (upper or
|
|
lower) does not matter, for the command (case of the result name DOES matter):
|
|
|
|
(L)ist - List all current defaults
|
|
(L)ist <benchmark> - List current defaults for benchmark
|
|
(H)elp - Show this information.
|
|
(A)dd <benchmark> <result> - Add a default result for a particular
|
|
benchmark (appends to benchmark's list
|
|
of results, if list already exists)
|
|
(D)elete <benchmark> <result> - Delete a default result for a
|
|
particular benchmark
|
|
(R)emove <benchmark> - Remove an entire benchmark (and its
|
|
results)
|
|
(M)ove <old-benchmark> <new-benchmark> - Rename a benchmark
|
|
(Q)uit - Exit this program, saving changes.
|
|
(T)erminate - Exit this program; abandon changes.
|
|
|
|
"""
|
|
)
|
|
|
|
def GetUserInput(self):
|
|
# Prompt user
|
|
print("Enter option> ")
|
|
# Process user input
|
|
inp = sys.stdin.readline()
|
|
inp = inp[:-1]
|
|
# inp = inp.lower()
|
|
words = inp.split(" ")
|
|
option = words[0]
|
|
option = option.lower()
|
|
if option in ("h", "help"):
|
|
self.ShowOptions()
|
|
elif option in ("l", "list"):
|
|
if len(words) == 1:
|
|
self.ListCurrentDefaults()
|
|
else:
|
|
self.ListCurrentDefaults(benchmark=words[1])
|
|
elif option in ("a", "add"):
|
|
if len(words) < 3:
|
|
self.UsageError(inp)
|
|
else:
|
|
benchmark = words[1]
|
|
resultList = words[2:]
|
|
for r in resultList:
|
|
self.AddDefault(benchmark, r)
|
|
elif option in ("d", "delete"):
|
|
if len(words) != 3:
|
|
self.UsageError(inp)
|
|
else:
|
|
benchmark = words[1]
|
|
result = words[2]
|
|
self.RemoveDefault(benchmark, result)
|
|
elif option in ("r", "remove"):
|
|
if len(words) != 2:
|
|
self.UsageError(inp)
|
|
else:
|
|
benchmark = words[1]
|
|
self.RemoveBenchmark(benchmark)
|
|
elif option in ("m", "move"):
|
|
if len(words) != 3:
|
|
self.UsageError(inp)
|
|
else:
|
|
old_name = words[1]
|
|
new_name = words[2]
|
|
self.RenameBenchmark(old_name, new_name)
|
|
elif option in ("q", "quit"):
|
|
self.WriteDefaultsFile()
|
|
|
|
return option in ("q", "quit", "t", "terminate")
|
|
|
|
|
|
def Main():
|
|
defaults = TelemetryDefaults()
|
|
defaults.ReadDefaultsFile()
|
|
defaults.ShowOptions()
|
|
done = defaults.GetUserInput()
|
|
while not done:
|
|
done = defaults.GetUserInput()
|
|
return 0
|
|
|
|
|
|
if __name__ == "__main__":
|
|
retval = Main()
|
|
sys.exit(retval)
|