HEX
Server: nginx/1.22.1
System: Linux VM-16-9-centos 3.10.0-1160.99.1.el7.x86_64 #1 SMP Wed Sep 13 14:19:20 UTC 2023 x86_64
User: www (1001)
PHP: 7.3.31
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: //lib/python2.7/site-packages/vdo/vdomgmnt/Utils.py
#
# Copyright (c) 2018 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA. 
#

"""
  Utils - miscellaneous utilities for the VDO manager

  $Id: //eng/vdo-releases/magnesium/src/python/vdo/vdomgmnt/Utils.py#1 $

"""
from utils import CommandError, runCommand
import distutils.spawn
import errno
import os
import signal
import time

class Utils(object):
  """Utils contains miscellaneous utilities."""

  KiB = 1024
  MiB = 1024 * KiB
  GiB = 1024 * MiB
  TiB = 1024 * GiB
  PiB = 1024 * TiB

  ######################################################################
  # Public methods
  ######################################################################
  @staticmethod
  def abspathPath(path):
    """Takes a path or a colon-separated list of paths and makes
    each one an absolute path. Paths that don't exist are left alone."""
    return os.pathsep.join([os.path.abspath(p) for p in path.split(os.pathsep)])

  ######################################################################
  @staticmethod
  def appendToPath(path):
    """Appends a directory or directories to the current PATH.

    Arguments:
      path (str): A directory or colon-separated list of directories.
    """
    os.environ['PATH'] += os.pathsep + path

  ######################################################################
  @staticmethod
  def isPowerOfTwo(i):
    """Returns True iff its argument is a power of two."""
    return (i != 0) and ((i & (i - 1)) == 0)

  ######################################################################
  @classmethod
  def killProcess(cls, pid):
    """Kills a process and waits for it to die.

    Arguments:
      pid:      process id to kill
    Throws:
      Any unexpected OS error
    """
    try:
      os.kill(pid, signal.SIGTERM)
      while True:
        time.sleep(1)
        os.kill(pid, 0)
    except OSError as e:
      if e.errno != errno.ESRCH:
        raise e

  ######################################################################
  @staticmethod
  def maxNum(a, b):
    """Returns the maximum of two numbers."""
    if a > b:
      return a
    return b

  ######################################################################
  @staticmethod
  def which(cmd):
    """Finds the full path to a command.

    Arguments:
      cmd (str): The command to search for.
    Returns:
      The full path as a string, or None if the command is not found.
    """
    return distutils.spawn.find_executable(cmd)

  ######################################################################
  # Overridden methods
  ######################################################################
  def __init__(self):
    pass