1*9c5db199SXin Li# Copyright (c) 2011 The Chromium OS Authors. All rights reserved. 2*9c5db199SXin Li# Use of this source code is governed by a BSD-style license that can be 3*9c5db199SXin Li# found in the LICENSE file. 4*9c5db199SXin Li 5*9c5db199SXin Li"""Provides utility methods for interacting with upstart""" 6*9c5db199SXin Li 7*9c5db199SXin Liimport os 8*9c5db199SXin Liimport re 9*9c5db199SXin Li 10*9c5db199SXin Lifrom autotest_lib.client.common_lib import utils 11*9c5db199SXin Li 12*9c5db199SXin Li 13*9c5db199SXin Lidef emit_event(event_name): 14*9c5db199SXin Li """Fails if the emit command fails. 15*9c5db199SXin Li 16*9c5db199SXin Li @param service_name: name of the service. 17*9c5db199SXin Li """ 18*9c5db199SXin Li utils.system('initctl emit %s' % event_name) 19*9c5db199SXin Li 20*9c5db199SXin Li 21*9c5db199SXin Lidef ensure_running(service_name): 22*9c5db199SXin Li """Fails if |service_name| is not running. 23*9c5db199SXin Li 24*9c5db199SXin Li @param service_name: name of the service. 25*9c5db199SXin Li """ 26*9c5db199SXin Li cmd = 'initctl status %s | grep start/running' % service_name 27*9c5db199SXin Li utils.system(cmd) 28*9c5db199SXin Li 29*9c5db199SXin Li 30*9c5db199SXin Lidef has_service(service_name): 31*9c5db199SXin Li """Returns true if |service_name| is installed on the system. 32*9c5db199SXin Li 33*9c5db199SXin Li @param service_name: name of the service. 34*9c5db199SXin Li """ 35*9c5db199SXin Li return os.path.exists('/etc/init/' + service_name + '.conf') 36*9c5db199SXin Li 37*9c5db199SXin Li 38*9c5db199SXin Lidef is_running(service_name): 39*9c5db199SXin Li """ 40*9c5db199SXin Li Returns true if |service_name| is running. 41*9c5db199SXin Li 42*9c5db199SXin Li @param service_name: name of service 43*9c5db199SXin Li """ 44*9c5db199SXin Li cmd = 'status %s' % service_name 45*9c5db199SXin Li return utils.system_output(cmd).find('start/running') != -1 46*9c5db199SXin Li 47*9c5db199SXin Li 48*9c5db199SXin Lidef get_pid(service_name): 49*9c5db199SXin Li """ 50*9c5db199SXin Li Returns integer of PID of |service_name| or None if not running. 51*9c5db199SXin Li 52*9c5db199SXin Li @param service_name: name of service 53*9c5db199SXin Li """ 54*9c5db199SXin Li res_str = utils.system_output('status %s' % service_name) 55*9c5db199SXin Li match = re.search('process ([0-9]+)', res_str) 56*9c5db199SXin Li if not match: 57*9c5db199SXin Li return None 58*9c5db199SXin Li return int(match.group(1)) 59*9c5db199SXin Li 60*9c5db199SXin Li 61*9c5db199SXin Lidef restart_job(service_name): 62*9c5db199SXin Li """ 63*9c5db199SXin Li Restarts an upstart job if it's running. 64*9c5db199SXin Li If it's not running, start it. 65*9c5db199SXin Li 66*9c5db199SXin Li @param service_name: name of service 67*9c5db199SXin Li """ 68*9c5db199SXin Li 69*9c5db199SXin Li if is_running(service_name): 70*9c5db199SXin Li utils.system_output('restart %s' % service_name) 71*9c5db199SXin Li else: 72*9c5db199SXin Li utils.system_output('start %s' % service_name) 73*9c5db199SXin Li 74*9c5db199SXin Li 75*9c5db199SXin Lidef stop_job(service_name): 76*9c5db199SXin Li """ 77*9c5db199SXin Li Stops an upstart job. 78*9c5db199SXin Li Fails if the stop command fails. 79*9c5db199SXin Li 80*9c5db199SXin Li @param service_name: name of service 81*9c5db199SXin Li """ 82*9c5db199SXin Li 83*9c5db199SXin Li utils.system('stop %s' % service_name) 84