From 6e2b99a0870e467e35c8b4b95aeb1e665dded413 Mon Sep 17 00:00:00 2001 From: Jonathan Herman Date: Thu, 21 Feb 2013 18:32:24 -0500 Subject: Many bugfixes motivated by some end-to-end testing. --- parse/dir_map.py | 2 +- parse/ft.py | 14 ++++++++++---- parse/sched.py | 8 ++++++++ parse/tuple_table.py | 3 --- 4 files changed, 19 insertions(+), 8 deletions(-) (limited to 'parse') diff --git a/parse/dir_map.py b/parse/dir_map.py index 1c17f40..601dd3b 100644 --- a/parse/dir_map.py +++ b/parse/dir_map.py @@ -46,7 +46,7 @@ class DirMap(object): def remove_childless(self): def remove_childless2(node): - for key, child in node: + for key, child in node.children.items(): remove_childless2(child) if not (child.children or child.values): node.children.pop(key) diff --git a/parse/ft.py b/parse/ft.py index 5293b00..19453d1 100644 --- a/parse/ft.py +++ b/parse/ft.py @@ -3,6 +3,7 @@ import numpy as np import os import re import shutil as sh +import sys import subprocess from point import Measurement,Type @@ -28,7 +29,6 @@ def parse_overhead(result, overhead_bin, overhead, cycles, out_dir, err_file): raise Exception("Failed (%d) with command: %s" % (ret, " ".join(cmd))) if not size: os.remove(ovh_fname) - if size and not ret: # Map and sort file for stats data = np.memmap(ovh_fname, dtype="float32", mode='c') @@ -47,19 +47,22 @@ def parse_overhead(result, overhead_bin, overhead, cycles, out_dir, err_file): def sort_ft(ft_file, err_file, out_dir): '''Create and return file with sorted overheads from @ft_file.''' - out_fname = "{}/{}".format("%s/%s" % (os.getcwd(), out_dir), FT_SORTED_NAME) + out_fname = "{}/{}".format(out_dir, FT_SORTED_NAME) # Sort happens in-place sh.copyfile(ft_file, out_fname) cmd = [conf.BINS['ftsort'], out_fname] - ret = subprocess.call(cmd, cwd="%s/%s" % (os.getcwd(), out_dir), stderr=err_file, stdout=err_file) + ret = subprocess.call(cmd, cwd=out_dir, stderr=err_file, stdout=err_file) if ret: - raise Exception("Sort failed with command: %s" % " ".join(cmd)) + raise Exception("Sort failed (%d) with command: %s" % (ret, " ".join(cmd))) return out_fname def extract_ft_data(result, data_dir, work_dir, cycles): + data_dir = os.path.abspath(data_dir) + work_dir = os.path.abspath(work_dir) + freg = conf.FILES['ft_data'] + "$" bins = [f for f in os.listdir(data_dir) if re.match(freg, f)] @@ -67,6 +70,9 @@ def extract_ft_data(result, data_dir, work_dir, cycles): return False bin_file = "{}/{}".format(data_dir, bins[0]) + if not os.path.getsize(bin_file): + sys.stderr.write("Empty feather trace file %s!" % bin_file) + return False with open("%s/%s" % (work_dir, FT_ERR_NAME), 'w') as err_file: sorted_bin = sort_ft(bin_file, err_file, work_dir) diff --git a/parse/sched.py b/parse/sched.py index ba0df5e..2da0149 100644 --- a/parse/sched.py +++ b/parse/sched.py @@ -2,6 +2,7 @@ import config.config as conf import os import re import struct +import sys import subprocess from collections import defaultdict,namedtuple @@ -66,6 +67,10 @@ def register_record(name, id, method, fmt, fields): def make_iterator(fname): '''Iterate over (parsed record, processing method) in a sched-trace file.''' + if not os.path.getsize(fname): + sys.stderr.write("Empty sched_trace file %s!" % fname) + return + f = open(fname, 'rb') max_type = len(record_map) @@ -182,4 +187,7 @@ def extract_sched_data(result, data_dir, work_dir): # Summarize value groups for name, data in stat_data.iteritems(): + if not data: + continue result[name] = Measurement(str(name)).from_array(data) + diff --git a/parse/tuple_table.py b/parse/tuple_table.py index 86baa08..ee94772 100644 --- a/parse/tuple_table.py +++ b/parse/tuple_table.py @@ -3,8 +3,6 @@ from collections import defaultdict,namedtuple from point import SummaryPoint,Type from dir_map import DirMap from col_map import ColMap,ColMapBuilder - - from pprint import pprint class TupleTable(object): @@ -88,7 +86,6 @@ class ReducedTupleTable(TupleTable): self.__add_to_dirmap(dir_map, col, kv, point) dir_map.remove_childless() - print("wrote: %s" % self) return dir_map @staticmethod -- cgit v1.2.2