# 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.

"""Wrapper module for dealing with setting the process title (seen in `ps`)."""

from __future__ import print_function

import __main__ as main
import os

# Import the relevant funcs into our namespace for callers.
try:
  # pylint: disable=unused-import, no-name-in-module
  from setproctitle import getproctitle, setproctitle
except ImportError:
  # Module not available -> can't do anything.
  getproctitle = lambda: None
  setproctitle = lambda _x: None


# Used with the settitle helper below.
_SCRIPT_NAME = os.path.basename(main.__file__)


# Used to distinguish between different runs.
_TITLE_PID = os.getpid()


def settitle(*args):
  """Set the process title to something useful to make `ps` output easy."""
  base = ('%s/%s' % (_SCRIPT_NAME, _TITLE_PID),)
  setproctitle(': '.join(base + args))
