def from_data( cls, metric_name: str, today_timestamp: int, offsets: List[Tuple[str, int]], current_values: Dict[str, int], metric_data: Dict[str, Dict[str, int]], color_overrides: FrozenSet[str], ) -> 'Metric': return cls( metric_name, metric_name in color_overrides, current_values[metric_name], tuple( Delta( flask.url_for( 'graph.show', metric_name=metric_name, start=str(timestamp), end=str(today_timestamp), ), (current_values[metric_name] - metric_data[time_name][metric_name]), ) for time_name, timestamp in offsets), flask.url_for('graph.all_data', metric_name=metric_name), )
def show(metric_name, start_timestamp, end_timestamp): start_timestamp = int(start_timestamp) end_timestamp = int(end_timestamp) metric_info = logic.get_metric_info(flask.g.db, metric_name) metric_changes = sorted( logic.get_major_changes_for_metric( flask.g.db, start_timestamp, end_timestamp, metric_info.id, )) metric_changes = [( datetime.datetime.fromtimestamp(timestamp).strftime( '%Y-%m-%d %H:%M:%S', ), sha, CommitDelta.from_data( metric_name, Delta('javascript:;', value), color_overrides=flask.g.config.color_overrides, ), ) for timestamp, sha, value in metric_changes] override_classname = ('color-override' if metric_name in flask.g.config.color_overrides else '') rendered_template = render_template( 'changes.mako', changes=metric_changes, override_classname=override_classname, ) return json.dumps({'body': rendered_template})
def from_data( cls, metric_name, today_timestamp, offsets, current_values, metric_data, color_overrides, ): return cls( metric_name, metric_name in color_overrides, current_values[metric_name], tuple( Delta( flask.url_for( 'graph.show', metric_name=metric_name, start=str(timestamp), end=str(today_timestamp), ), (current_values[metric_name] - metric_data[time_name][metric_name]), ) for time_name, timestamp in offsets), flask.url_for('graph.all_data', metric_name=metric_name), )
def data() -> str: metric_names = frozenset(flask.g.config.widget_metrics) diff = flask.request.form['diff'].encode('UTF-8') metric_config = GenerateOptions.from_yaml( yaml.load(open('generate_config.yaml').read()), ) parsers = get_metric_parsers_from_args( metric_config.metric_package_names, skip_defaults=False, ) metrics = get_metrics(BLANK_COMMIT, diff, parsers, metric_config.exclude) metrics = tuple( metric for metric in metrics if metric.value and metric.name in metric_names ) commit_deltas = sorted( CommitDelta.from_data( metric.name, Delta('javascript:;', metric.value), color_overrides=flask.g.config.color_overrides, ) for metric in metrics ) return json.dumps({ 'metrics': render_template('widget.mako', commit_deltas=commit_deltas), })
def show(sha: str) -> str: changes = logic.get_metric_changes(flask.g.db, sha) commit_deltas = sorted( CommitDelta.from_data( metric_name, Delta('javascript:;', change), color_overrides=flask.g.config.color_overrides, ) for metric_name, change in changes) links = [(link_name, link.format(sha=sha)) for link_name, link in flask.g.config.commit_links] return render_template( 'commit.mako', sha=sha, short_sha=sha[:8], commit_deltas=commit_deltas, links=links, )
def test_delta_classname_zero(): delta = Delta('url', 0) assert delta.classname == 'metric-none'
def test_delta_classname_negative(): delta = Delta('url', -9001) assert delta.classname == 'metric-down'
def test_delta_classname_positive(): delta = Delta('url', 9001) assert delta.classname == 'metric-up'