Add --logging_level option to crosperf.

Add --logging_level={verbose, average, quiet} option to crosperf,
optionally reducing the amount of logging output.  "verbose" gives
the same output Crosperf always gave; "quiet" gives minimal output, and
"average" is in the middle. The default for now is "verbose". Doing this
also involved adding logging levels to the command_executer, and to
image_chromeos (again, with the default being "verbose").

BUG=None
TEST=Tested all three levels of logging, with and without having to
reimage the DUT.  It all worked properly.

Change-Id: Icf8c9a6831fe25202adcb624c6c7e1d1a7ac25a5
Reviewed-on: https://chrome-internal-review.googlesource.com/156883
Reviewed-by: Caroline Tice <cmtice@google.com>
Commit-Queue: Caroline Tice <cmtice@google.com>
Tested-by: Caroline Tice <cmtice@google.com>
diff --git a/utils/command_executer.py b/utils/command_executer.py
index a4dca64..137348b 100644
--- a/utils/command_executer.py
+++ b/utils/command_executer.py
@@ -16,6 +16,7 @@
 
 mock_default = False
 
+LOG_LEVEL=("quiet", "average", "verbose")
 
 def InitCommandExecuter(mock=False):
   global mock_default
@@ -23,21 +24,28 @@
   mock_default = mock
 
 
-def GetCommandExecuter(logger_to_set=None, mock=False):
+def GetCommandExecuter(logger_to_set=None, mock=False, log_level="verbose"):
   # If the default is a mock executer, always return one.
   if mock_default or mock:
     return MockCommandExecuter(logger_to_set)
   else:
-    return CommandExecuter(logger_to_set)
+    return CommandExecuter(log_level, logger_to_set)
 
 
 class CommandExecuter:
-  def __init__(self, logger_to_set=None):
+  def __init__(self, log_level, logger_to_set=None):
+    self.log_level = log_level
     if logger_to_set is not None:
       self.logger = logger_to_set
     else:
       self.logger = logger.GetLogger()
 
+  def GetLogLevel(self):
+    return self.log_level
+
+  def SetLogLevel(self, log_level):
+    self.log_level = log_level
+
   def RunCommand(self, cmd, return_output=False, machine=None,
                  username=None, command_terminator=None,
                  command_timeout=None,
@@ -47,7 +55,11 @@
 
     cmd = str(cmd)
 
-    self.logger.LogCmd(cmd, machine, username, print_to_console)
+    if self.log_level == "quiet":
+      print_to_console=False
+
+    if self.log_level == "verbose":
+      self.logger.LogCmd(cmd, machine, username, print_to_console)
     if command_terminator and command_terminator.IsTerminated():
       self.logger.LogError("Command was terminated!", print_to_console)
       if return_output:
@@ -170,7 +182,11 @@
                      terminated_timeout=10,
                      print_to_console=True):
     """Run a command on a chromeos box"""
-    self.logger.LogCmd(cmd, print_to_console)
+
+    if self.log_level != "verbose":
+      print_to_console=False
+
+    self.logger.LogCmd(cmd, print_to_console=print_to_console)
     self.logger.LogFatalIf(not machine, "No machine provided!")
     self.logger.LogFatalIf(not chromeos_root, "chromeos_root not given!")
     chromeos_root = os.path.expanduser(chromeos_root)
@@ -213,7 +229,11 @@
                        terminated_timeout=10,
                        print_to_console=True,
                        cros_sdk_options=""):
-    self.logger.LogCmd(command, print_to_console)
+
+    if self.log_level != "verbose":
+      print_to_console = False
+
+    self.logger.LogCmd(command, print_to_console=print_to_console)
 
     handle, command_file = tempfile.mkstemp(dir=os.path.join(chromeos_root,
                                                            "src/scripts"),