Loading CHANGELOG.md +2 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Add system physical requirements section to INSTALL (#26937) - Warn when there is not enough disk space (#26937) - Implement Torflow scaling (#27108) - Create methods to easy graph generation and obtain statistics to compare with current torflow results.(#27688) ### Fixed Loading sbws/core/generate.py +1 −1 Original line number Diff line number Diff line Loading @@ -74,4 +74,4 @@ def main(args, conf): output = args.output or \ conf.getpath('paths', 'v3bw_fname').format(now_fname()) bw_file.write(output) log.info('Mean bandwidth per line: %f "KiB"', bw_file.mean_bw) bw_file.info_stats sbws/lib/v3bwfile.py +67 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,17 @@ class V3BWHeader(object): assert isinstance(text, str) return self.from_lines_v110(text.split(LINE_SEP)) @classmethod def from_lines_v100(cls, lines): """ :param list lines: list of lines to parse :returns: tuple of V3BWHeader object and non-header lines """ assert isinstance(lines, list) h = cls(lines[0]) # last line is new line return h, lines[1:-1] @staticmethod def generator_started_from_file(state_fpath): ''' Loading Loading @@ -429,6 +440,27 @@ class V3BWFile(object): f = cls(header, bw_lines) return f @classmethod def from_v110_fpath(cls, fpath): log.info('Parsing bandwidth file %s', fpath) with open(fpath) as fd: text = fd.read() all_lines = text.split(LINE_SEP) header, lines = V3BWHeader.from_lines_v110(all_lines) bw_lines = [V3BWLine.from_bw_line_v110(line) for line in lines] return cls(header, bw_lines) @classmethod def from_v100_fpath(cls, fpath): log.info('Parsing bandwidth file %s', fpath) with open(fpath) as fd: text = fd.read() all_lines = text.split(LINE_SEP) header, lines = V3BWHeader.from_lines_v100(all_lines) bw_lines = sorted([V3BWLine.from_bw_line_v110(l) for l in lines], key=lambda l: l.bw) return cls(header, bw_lines) @staticmethod def bw_kb(bw_lines, reverse=False): bw_lines_scaled = copy.deepcopy(bw_lines) Loading Loading @@ -691,6 +723,41 @@ class V3BWFile(object): def median_bw(self): return median([l.bw for l in self.bw_lines]) @property def max_bw(self): return max([l.bw for l in self.bw_lines]) @property def min_bw(self): return min([l.bw for l in self.bw_lines]) @property def info_stats(self): if not self.bw_lines: return [log.info(': '.join([attr, str(getattr(self, attr))])) for attr in ['sum_bw', 'mean_bw', 'median_bw', 'num', 'max_bw', 'min_bw']] def bw_line_for_node_id(self, node_id): """Returns the bandwidth line for a given node fingerprint. Used to combine data when plotting. """ bwl = [l for l in self.bw_lines if l.node_id == node_id] if bwl: return bwl[0] return None def to_plt(self, attrs=['bw'], sorted_by=None): """Return bandwidth data in a format useful for matplotlib. Used from external tool to plot. """ x = [i for i in range(0, self.num)] ys = [[getattr(l, k) for l in self.bw_lines] for k in attrs] return x, ys, attrs def write(self, output): if output == '/dev/stdout': log.info("Writing to stdout is not supported.") Loading Loading
CHANGELOG.md +2 −0 Original line number Diff line number Diff line Loading @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Add system physical requirements section to INSTALL (#26937) - Warn when there is not enough disk space (#26937) - Implement Torflow scaling (#27108) - Create methods to easy graph generation and obtain statistics to compare with current torflow results.(#27688) ### Fixed Loading
sbws/core/generate.py +1 −1 Original line number Diff line number Diff line Loading @@ -74,4 +74,4 @@ def main(args, conf): output = args.output or \ conf.getpath('paths', 'v3bw_fname').format(now_fname()) bw_file.write(output) log.info('Mean bandwidth per line: %f "KiB"', bw_file.mean_bw) bw_file.info_stats
sbws/lib/v3bwfile.py +67 −0 Original line number Diff line number Diff line Loading @@ -139,6 +139,17 @@ class V3BWHeader(object): assert isinstance(text, str) return self.from_lines_v110(text.split(LINE_SEP)) @classmethod def from_lines_v100(cls, lines): """ :param list lines: list of lines to parse :returns: tuple of V3BWHeader object and non-header lines """ assert isinstance(lines, list) h = cls(lines[0]) # last line is new line return h, lines[1:-1] @staticmethod def generator_started_from_file(state_fpath): ''' Loading Loading @@ -429,6 +440,27 @@ class V3BWFile(object): f = cls(header, bw_lines) return f @classmethod def from_v110_fpath(cls, fpath): log.info('Parsing bandwidth file %s', fpath) with open(fpath) as fd: text = fd.read() all_lines = text.split(LINE_SEP) header, lines = V3BWHeader.from_lines_v110(all_lines) bw_lines = [V3BWLine.from_bw_line_v110(line) for line in lines] return cls(header, bw_lines) @classmethod def from_v100_fpath(cls, fpath): log.info('Parsing bandwidth file %s', fpath) with open(fpath) as fd: text = fd.read() all_lines = text.split(LINE_SEP) header, lines = V3BWHeader.from_lines_v100(all_lines) bw_lines = sorted([V3BWLine.from_bw_line_v110(l) for l in lines], key=lambda l: l.bw) return cls(header, bw_lines) @staticmethod def bw_kb(bw_lines, reverse=False): bw_lines_scaled = copy.deepcopy(bw_lines) Loading Loading @@ -691,6 +723,41 @@ class V3BWFile(object): def median_bw(self): return median([l.bw for l in self.bw_lines]) @property def max_bw(self): return max([l.bw for l in self.bw_lines]) @property def min_bw(self): return min([l.bw for l in self.bw_lines]) @property def info_stats(self): if not self.bw_lines: return [log.info(': '.join([attr, str(getattr(self, attr))])) for attr in ['sum_bw', 'mean_bw', 'median_bw', 'num', 'max_bw', 'min_bw']] def bw_line_for_node_id(self, node_id): """Returns the bandwidth line for a given node fingerprint. Used to combine data when plotting. """ bwl = [l for l in self.bw_lines if l.node_id == node_id] if bwl: return bwl[0] return None def to_plt(self, attrs=['bw'], sorted_by=None): """Return bandwidth data in a format useful for matplotlib. Used from external tool to plot. """ x = [i for i in range(0, self.num)] ys = [[getattr(l, k) for l in self.bw_lines] for k in attrs] return x, ys, attrs def write(self, output): if output == '/dev/stdout': log.info("Writing to stdout is not supported.") Loading