aboutsummaryrefslogtreecommitdiffstats
path: root/assemble_files.py
blob: 75c6c0773b203e061e6dbeb1ca1550c7a5590ed3 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env python

import sys

from plot import decode
from os.path  import splitext, basename

from glob import glob
from collections import defaultdict

import optparse

o = optparse.make_option

opts = [
    o('-s', '--split', action='store_true', dest='split_files',
      help='split out files into individual per-wss files'),
    ]


defaults = {
    'split_files' : False,
    }

options = None

#G-EDF/testpoint_ucap=13.75_wss=1792_dist=exp-10-10-100_deadlines=implicit_host=ludwig_scheduler=G-EDF.csv

def key(fname):
    name, ext = splitext(basename(fname))
    conf = decode(name)
    if 'quanta' in conf:
        q = '_quanta=%s' % conf['quanta']
    else:
        q = ''
    s  = 'scheduler=%s'  % conf['scheduler']
    d  = 'dist=%s'  % conf['dist']
    dl = 'deadlines=%s' % conf['deadlines']
    h  = 'host=%s'  % conf['host']

    if options.split_files:
        w = '_wss=%s' % conf['wss']
    else:
        w = ''

    return '_'.join([d, dl, s, h]) + q + w

def assemble_results(dir):
    files = glob(dir + '/*.csv')

    parts = defaultdict(list)

    for f in files:
        k = key(f)
        parts[k].append(f)

    if options.split_files:
        nametag = 'dwss'
    else:
        nametag = 'dall'

    for i, k in enumerate(parts):
        comment = 1
        print '[%d/%d] Processing %s' % (i+ 1, len(parts), k)
        out = open('%s_%s.csv' % (nametag, k), 'w')
        for f in sorted(parts[k]):
            for line in open(f):
                if line[0] != '#' or comment:
                    out.write(line)
                    if line[0] == '#':
                        comment -= 1
        out.close()



if __name__ == '__main__':
    parser = optparse.OptionParser(option_list=opts)
    parser.set_defaults(**defaults)
    (options, dirs) = parser.parse_args()

    for d in dirs:
        assemble_results(d)