#! /usr/bin/python

"""Groups memory by allocation sizes.

Takes a log entry and sorts sorts everything into groups based on what size
chunks the memory has been allocated in. groups is an array that contains the
divisions (in bytes).

The output format is:

timestamp, percent of memory in chunks < groups[0], percent between groups[0]
and groups[1], etc.

"""

import argparse
from utils import compute_total_diff
from datetime import datetime

pretty_print = True

parser = argparse.ArgumentParser()
parser.add_argument("filename")
args = parser.parse_args()

my_file = open(args.filename)
output_file = open("groups.csv", "a")

# The cutoffs for each group in the output (in bytes)
groups = [1024, 8192, 65536, 524288, 4194304]

base_time = datetime(2014, 6, 11, 0, 0)
prev_line = ""
half_entry = (None, None)

for line in my_file:
    if "heap profile:" in line:
        if half_entry[0] is not None:
            group_totals = half_entry[1]
            total = sum(group_totals) * 1.0
            to_join = [half_entry[0]] + [value / total for value in group_totals]
            to_output = ",".join([str(elem) for elem in to_join])
            output_file.write(to_output)
        total_diff = compute_total_diff(line, base_time)
        half_entry = (total_diff, [0]*(len(groups) + 1))
    if "] @ " in line and "heap profile:" not in line:
        mem_samples = line.strip().split("[")[0]
        num_samples, total_mem = map(int, mem_samples.strip().split(":"))
        mem_per_sample = total_mem // num_samples
        group_totals = half_entry[1]
        for cutoff_index in range(len(groups)):
            if mem_per_sample <= groups[cutoff_index]:
                group_totals[cutoff_index] += total_mem
                break
        if mem_per_sample > groups[-1]:
            group_totals[-1] += total_mem
