1 #!/usr/bin/python 2 3 # Copyright 2015 The Chromium OS Authors. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 import logging 8 import logging.handlers 9 10 import common 11 from autotest_lib.client.cros import constants 12 from autotest_lib.client.cros import dark_resume_listener 13 from autotest_lib.client.cros import sys_power 14 from autotest_lib.client.cros import xmlrpc_server 15 16 17 class DarkResumeXmlRpcDelegate(xmlrpc_server.XmlRpcDelegate): 18 """Exposes methods called remotely during dark resume autotests. 19 20 All instance methods of this object without a preceding '_' are exposed via 21 an XMLRPC server. This is not a stateless handler object, which means that 22 if you store state inside the delegate, that state will remain around for 23 future calls. 24 25 """ 26 27 def __init__(self): 28 super(DarkResumeXmlRpcDelegate, self).__init__() 29 self._listener = dark_resume_listener.DarkResumeListener() 30 31 32 @xmlrpc_server.dbus_safe(None) 33 def suspend_bg_for_dark_resume(self): 34 """Suspends this system indefinitely for dark resume.""" 35 sys_power.suspend_bg_for_dark_resume() 36 37 38 @xmlrpc_server.dbus_safe(0) 39 def get_dark_resume_count(self): 40 """Gets the number of dark resumes that have occurred since 41 this listener was created.""" 42 return self._listener.count 43 44 45 if __name__ == '__main__': 46 logging.basicConfig(level=logging.DEBUG) 47 handler = logging.handlers.SysLogHandler(address = '/dev/log') 48 formatter = logging.Formatter( 49 'dark_resume_xmlrpc_server: [%(levelname)s] %(message)s') 50 handler.setFormatter(formatter) 51 logging.getLogger().addHandler(handler) 52 logging.debug('dark_resume_xmlrpc_server main...') 53 server = xmlrpc_server.XmlRpcServer( 54 'localhost', constants.DARK_RESUME_XMLRPC_SERVER_PORT) 55 server.register_delegate(DarkResumeXmlRpcDelegate()) 56 server.run() 57