"""Information about running process."""

import psutil


class ProcessInfo:
    """Provides information about a running process."""

    def __init__(self, pid):
        """Initializes process information.

        Args:
          pid (int): process identifier (PID).

        Raises:
          OSError: If the process identified by the PID does not exist.
        """
        if not psutil.pid_exists(pid):
            raise OSError(f"Process with PID: {pid:d} does not exist")

        self._process = psutil.Process(pid)

    def GetUsedMemory(self):
        """Retrieves the amount of memory used by the process.

        Returns:
          int: amount of memory in bytes used by the process or None
              if not available.
        """
        try:
            memory_info = self._process.memory_info()
        except psutil.NoSuchProcess:
            return None

        # Psutil will return different memory information depending on what is
        # available in that platform.
        memory_data = getattr(memory_info, "data", 0)
        memory_shared = getattr(memory_info, "shared", 0)

        return memory_data + memory_shared
