#!/usr/bin/env python3

from collections import defaultdict
import re
import sys

import ggplot as gg
import pandas
import yaml

def record_from_log(log):
    log_path = log
    with open(log) as log:
        # filter out garbage in log
        log = re.findall(r'\w+:.*', log.read())
        log = '\n'.join(log)
        return yaml.load(log)

if __name__ == '__main__':
    routers = set()
    traces = defaultdict(list)
    for log in sys.argv[1:]:
        record = record_from_log(log)
        record['trace'] = re.sub(r'.*(shed\d).*', '\\1', record['trace'])
        if record['community'] != 'none':
            record['router'] += '_' + record['community']
        routers.add(record['router'])
        del record['community']
        traces[record['trace']].append(record)

    traces = {
        trace: pandas.DataFrame.from_records(records)
        for trace, records in traces.items()
    }

    def get_router(trace, router):
        trace = traces[trace]
        return trace[trace['router'] == router]

    summary = []

    for trace in traces:
        for router in routers:
            df = get_router(trace, router).mean()
            df['trace'] = trace
            df['router'] = router
            summary.append(df)

    summary = pandas.DataFrame.from_records(summary)

    for router in routers:
        aes = gg.aes(
            x='trace',
            y='delivery_ratio',
            weight='delivery_ratio',
        )

        plt = gg.ggplot(aes, summary[summary['router']==router])
        plt += gg.geom_bar()
        plt += gg.ggtitle(f'{router}')
        plt += gg.ylim(low=0, high=1)

        plt.save(f'{router}.png', width=8, height=6, dpi=300)