Commit 46726ade authored by juga's avatar juga
Browse files

chg: report, cli: Add bw comparative report

to show bw for all the bwauths in a consensus, depending on date
parent ab4e4357
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@ from django.conf import settings
from django.core.management.base import BaseCommand

from bwauthealth.report import (
    bw_comparative,
    missing_relays,
    missing_relays_header,
    report,
@@ -33,6 +34,12 @@ class Command(BaseCommand):
            default=os.path.join(settings.MISSING_RELAYS_PATH),
            help="Path to the csv output file.",
        )
        parser.add_argument(
            "-b",
            "--bw-comparative",
            default=os.path.join(settings.BW_COMPARATIVE_PATH),
            help="Path to the csv output file.",
        )
        parser.add_argument(
            "-e", "--end", type=valid_datetime,
        )
@@ -63,3 +70,10 @@ class Command(BaseCommand):
            for row in rows:
                csv_writer.writerow(row)
        logger.info("Written %s", options["missing_relays_path"])

        rows = bw_comparative(options["start"], options["end"])
        with open(options["bw_comparative"], "w") as fd:
            csv_writer = csv.writer(fd)
            for row in rows:
                csv_writer.writerow(row)
        logger.info("Written %s", options["bw_comparative"])
+28 −0
Original line number Diff line number Diff line
@@ -76,3 +76,31 @@ def missing_relays(start=None, end=None):
            row = [consensus, bwfile, fp, nickname]
            rows.append(row)
    return rows


def bw_comparative(start=None, end=None):
    if not start:
        start = util.previous_consensus(settings.NOW)
    if not end:
        end = util.end_dt(start)
    logger.info("Time period from %s to %s", start, end)
    rows = []
    consensuses = Consensus.objects.filter(
        valid_after__gte=start, valid_after__lt=end
    )
    for consensus in consensuses:
        logger.debug("Consensus %s", consensus)
        bwfiles = consensus.bwfile_set.all()
        header = ["fingerprint"] + [bwfile for bwfile in bwfiles]
        rows = [header]
        for rs in consensus.routerstatuses():
            relay = rs.relay
            row = [relay.fingerprint]
            for bwfile in bwfiles:
                try:
                    relaybw = relay.relaybw_set.get(bwfile=bwfile)
                    row.append(relaybw.bw)
                except:
                    row.append("")
            rows.append(row)
    return rows
+1 −0
Original line number Diff line number Diff line
@@ -134,6 +134,7 @@ CACHE_CONSENSUS = os.path.join(CACHE_PATH, "consensuses")
CACHE_DESCRIPTOR = os.path.join(CACHE_PATH, "descriptors")
REPORT_PATH = os.path.join(BASE_DIR, "..", "report.csv")
MISSING_RELAYS_PATH = os.path.join(BASE_DIR, "..", "missing_relays.csv")
BW_COMPARATIVE_PATH = os.path.join(BASE_DIR, "..", "bw_comparative.csv")

NOW = datetime.datetime.utcnow()