#!/usr/bin/env python3
"""
Utilities related to performance measurement.
"""
import time

# =============================================================================


def get_memory_usage():
    """
    Returns memory usage of the current process in GB.
    WORKS ONLY ON A LINUX SYSTEM.
    """

    status = None
    result = {'peak': 0.0, 'rss': 0.0}

    try:
        # This will only work on systems with a /proc file system
        # (like Linux).
        status = open('/proc/self/status')
        for line in status:
            parts = line.split()
            key = parts[0][2:-1].lower()
            if key in result:
                result[key] = int(parts[1]) / (1024 * 1024)

    finally:

        if status is not None:
            status.close()

    return result


# =============================================================================


class MemoryLog(object):
    """
    Memory usage logging helper class.

    Create object of the MemoryLog type, provide it with the log file name.
    Then at each important point of the script call its "checkpoint" method.
    """

    def __init__(self, file_name):
        self.fp = open(file_name, "w")
        self.t0 = time.time()
        self._write("Time [s], Label, Peak [GB], RSS [GB]\n")

    def _write(self, s):
        self.fp.write(s)
        self.fp.flush()

    def checkpoint(self, label):
        mem = get_memory_usage()
        self._write(
            "{:.1f}, {}, {:.2f}, {:.2f}\n".format(
                time.time() - self.t0, label, mem["peak"], mem["rss"]
            )
        )
