[Autotest][PY3] Migrating site_utils (log_socket_server to server_manager)

BUG=chromium:990593
TEST=dummy_pass, suite:dummy

Change-Id: I3dc1d7347d0a4533e53952c1e4a6729e53ef6811
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/autotest/+/2551384
Commit-Queue: Derek Beckett <dbeckett@chromium.org>
Tested-by: Derek Beckett <dbeckett@chromium.org>
Reviewed-by: Greg Edelston <gredelston@google.com>
diff --git a/site_utils/log_socket_server.py b/site_utils/log_socket_server.py
index 9de8080..ac948ae 100644
--- a/site_utils/log_socket_server.py
+++ b/site_utils/log_socket_server.py
@@ -1,3 +1,4 @@
+# Lint as: python2, python3
 # The source code is from following Python documentation:
 # https://docs.python.org/2/howto/logging-cookbook.html#network-logging
 
@@ -10,19 +11,23 @@
 #         logging.handlers.DEFAULT_TCP_LOGGING_PORT)
 # logging.getLogger().addHandler(socketHandler)
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import ctypes
 import pickle
 import logging
 import multiprocessing
 import select
-import SocketServer
+import six.moves.socketserver
 import struct
 import time
 
 import common
 from autotest_lib.client.common_lib import utils
 
-class LogRecordStreamHandler(SocketServer.StreamRequestHandler):
+class LogRecordStreamHandler(six.moves.socketserver.StreamRequestHandler):
     """Handler for a streaming logging request.
 
     This basically logs the record using whatever logging policy is
@@ -76,7 +81,7 @@
         logger.handle(record)
 
 
-class LogRecordSocketReceiver(SocketServer.ThreadingTCPServer):
+class LogRecordSocketReceiver(six.moves.socketserver.ThreadingTCPServer):
     """Simple TCP socket-based logging receiver.
     """
 
@@ -86,7 +91,7 @@
                  handler=LogRecordStreamHandler):
         if not port:
             port = utils.get_unused_port()
-        SocketServer.ThreadingTCPServer.__init__(self, (host, port), handler)
+        six.moves.socketserver.ThreadingTCPServer.__init__(self, (host, port), handler)
         self.abort = 0
         self.timeout = 1
         self.logname = None
@@ -95,7 +100,7 @@
 
     def serve_until_stopped(self):
         """Run the socket receiver until aborted."""
-        print 'Log Record Socket Receiver is started.'
+        print('Log Record Socket Receiver is started.')
         abort = 0
         while not abort:
             rd, wr, ex = select.select([self.socket.fileno()], [], [],
@@ -103,7 +108,7 @@
             if rd:
                 self.handle_request()
             abort = self.abort
-        print 'Log Record Socket Receiver is stopped.'
+        print('Log Record Socket Receiver is stopped.')
 
 
 class LogSocketServer:
@@ -132,7 +137,7 @@
         while not server_started.value:
             time.sleep(0.1)
         LogSocketServer.port = port.value
-        print 'Log Record Socket Server is started at port %d.' % port.value
+        print('Log Record Socket Server is started at port %d.' % port.value)
 
 
     @staticmethod
diff --git a/site_utils/log_socket_server_unittest.py b/site_utils/log_socket_server_unittest.py
index 58c9403..a289670 100644
--- a/site_utils/log_socket_server_unittest.py
+++ b/site_utils/log_socket_server_unittest.py
@@ -1,7 +1,12 @@
+# Lint as: python2, python3
 # Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import logging
 import logging.handlers
 import mox
@@ -11,7 +16,8 @@
 import os
 import unittest
 
-import log_socket_server
+from autotest_lib.site_utils import log_socket_server
+from six.moves import range
 
 
 class TestLogSocketServer(mox.MoxTestBase):
diff --git a/site_utils/perf_compare.py b/site_utils/perf_compare.py
index b303413..0318d25 100644
--- a/site_utils/perf_compare.py
+++ b/site_utils/perf_compare.py
@@ -58,6 +58,9 @@
 """
 
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
 import json
 import logging
 import math
@@ -67,6 +70,7 @@
 import shutil
 import subprocess
 import sys
+from six.moves import input
 
 
 _ITERATIONS = 5
@@ -150,7 +154,7 @@
                         else benchmark_to_add['iterations'])
                 else:
                     benchmark_to_add['iterations'] = iter_num
-        benchmarks_to_run = identified_benchmarks.values()
+        benchmarks_to_run = list(identified_benchmarks.values())
 
     return benchmarks_to_run, perf_keys_requested
 
diff --git a/site_utils/rpc_flight_recorder.py b/site_utils/rpc_flight_recorder.py
index 7462f5b..f86f980 100755
--- a/site_utils/rpc_flight_recorder.py
+++ b/site_utils/rpc_flight_recorder.py
@@ -10,7 +10,7 @@
 import time
 import logging
 import multiprocessing
-import urllib2
+from six.moves import urllib
 
 import common
 from autotest_lib.client.common_lib import global_config
@@ -224,7 +224,7 @@
                 if expected is not None and expected != result:
                     _failed(f, msg_str, 'IncorrectResponse')
 
-            except urllib2.HTTPError as e:
+            except urllib.error.HTTPError as e:
                 _failed(f, msg_str, 'HTTPError:%d' % e.code)
 
             except Exception as e:
diff --git a/site_utils/rpc_logserver.py b/site_utils/rpc_logserver.py
index ce7518e..4e225aa 100755
--- a/site_utils/rpc_logserver.py
+++ b/site_utils/rpc_logserver.py
@@ -5,6 +5,10 @@
 # found in the LICENSE file.
 
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import argparse
 import ctypes
 import logging
@@ -51,7 +55,7 @@
         LogServer.process.start()
         while not server_started.value:
             time.sleep(0.1)
-        print 'LogServer is started at port %d.' % port
+        print('LogServer is started at port %d.' % port)
 
 
     @staticmethod
diff --git a/site_utils/server_manager.py b/site_utils/server_manager.py
index 5a7d183..90c8430 100644
--- a/site_utils/server_manager.py
+++ b/site_utils/server_manager.py
@@ -1,3 +1,4 @@
+# Lint as: python2, python3
 # Copyright 2014 The Chromium OS Authors. All rights reserved.
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
@@ -30,6 +31,10 @@
 """
 
 
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+
 import datetime
 
 import common
@@ -74,7 +79,7 @@
     server_manager_actions.try_execute(server, [role], enable=True,
                                        post_change=True, do_action=action)
 
-    print 'Role %s is added to server %s.' % (role, server.hostname)
+    print('Role %s is added to server %s.' % (role, server.hostname))
 
 
 def _delete_role(server, role, action=False):
@@ -100,7 +105,7 @@
     server_manager_actions.try_execute(server, [role], enable=False,
                                        post_change=False, do_action=action)
 
-    print 'Deleting role %s from server %s...' % (role, server.hostname)
+    print('Deleting role %s from server %s...' % (role, server.hostname))
     server.roles.get(role=role).delete()
 
     # Apply actions to disable the role for the server after the role is
@@ -112,7 +117,7 @@
         server.status == server_models.Server.STATUS.PRIMARY):
         print ('Server %s has no role.')
 
-    print 'Role %s is deleted from server %s.' % (role, server.hostname)
+    print('Role %s is deleted from server %s.' % (role, server.hostname))
 
 
 def _change_status(server, status, action):
@@ -175,9 +180,9 @@
                                        prev_status=prev_status,
                                        do_action=action)
 
-    print ('Status of server %s is changed from %s to %s. Affected roles: %s' %
-           (server.hostname, prev_status, status,
-            ', '.join(server.get_role_names())))
+    print('Status of server %s is changed from %s to %s. Affected roles: %s' %
+          (server.hostname, prev_status, status,
+           ', '.join(server.get_role_names())))
 
 
 @server_manager_utils.verify_server(exist=False)
@@ -211,17 +216,17 @@
     @raise ServerActionError: If delete server action failed, e.g., server is
             not found in database.
     """
-    print 'Deleting server %s from server database.' % hostname
+    print('Deleting server %s from server database.' % hostname)
 
     if (server_manager_utils.use_server_db() and
         server.status == server_models.Server.STATUS.PRIMARY):
-        print ('Server %s is in status primary, need to disable its '
-               'current roles first.' % hostname)
+        print('Server %s is in status primary, need to disable its '
+              'current roles first.' % hostname)
         for role in server.roles.all():
             _delete_role(server, role.role)
 
     server.delete()
-    print 'Server %s is deleted from server database.' % hostname
+    print('Server %s is deleted from server database.' % hostname)
 
 
 @server_manager_utils.verify_server()