Pārlūkot izejas kodu

Add the right stats column

Signed-off-by: Vadim Markovtsev <vadim@sourced.tech>
Vadim Markovtsev 6 gadi atpakaļ
vecāks
revīzija
ff7c2d0d6f
1 mainītis faili ar 47 papildinājumiem un 4 dzēšanām
  1. 47 4
      labours.py

+ 47 - 4
labours.py

@@ -387,7 +387,12 @@ def read_input(args):
     return reader
 
 
-DevDay = namedtuple("DevDay", ("Commits", "Added", "Removed", "Changed"))
+class DevDay(namedtuple("DevDay", ("Commits", "Added", "Removed", "Changed"))):
+    def add(self, dd):
+        return DevDay(Commits=self.Commits + dd.Commits,
+                      Added=self.Added + dd.Added,
+                      Removed=self.Removed + dd.Removed,
+                      Changed=self.Changed + dd.Changed)
 
 
 def calculate_average_lifetime(matrix):
@@ -1209,10 +1214,12 @@ def show_devs(args, name, start_date, end_date, data):
     else:
         chosen_people = set(people)
     devseries = defaultdict(list)
+    devstats = defaultdict(lambda: DevDay(0, 0, 0, 0))
     for day, devs in sorted(days.items()):
         for dev, stats in devs.items():
             if people[dev] in chosen_people:
                 devseries[dev].append((day, stats.Commits))
+                devstats[dev] = devstats[dev].add(stats)
     print("Calculating the distance matrix")
     # max-normalize the time series using a sliding window
     keys = list(devseries.keys())
@@ -1299,6 +1306,7 @@ def show_devs(args, name, start_date, end_date, data):
     prop_cycle = pyplot.rcParams["axes.prop_cycle"]
     colors = prop_cycle.by_key()["color"]
     fig, axes = pyplot.subplots(final.shape[0], 1)
+    backgrounds = ("#C4FFDB", "#FFD0CD") if args.background == "white" else ("#05401C", "#40110E")
     for ax, series, cluster, dev_i in zip(axes, final, clusters, route):
         if cluster >= 0:
             color = colors[cluster % len(colors)]
@@ -1310,10 +1318,19 @@ def show_devs(args, name, start_date, end_date, data):
         author = people[dev_i]
         ax.text(0.03, 0.5, author[:36] + (author[36:] and "..."),
                 horizontalalignment="right", verticalalignment="center",
-                transform=ax.transAxes, fontsize=14)
-        ax.text(0.97, 0.5, sum(p[1] for p in devseries[dev_i]),
+                transform=ax.transAxes, fontsize=14,
+                color="black" if args.background == "white" else "white")
+        ds = devstats[dev_i]
+        stats = "%5d %8s %8s" % (ds[0], _format_number(ds[1] - ds[2]), _format_number(ds[3]))
+        ax.text(0.97, 0.5, stats,
                 horizontalalignment="left", verticalalignment="center",
-                transform=ax.transAxes, fontsize=14)
+                transform=ax.transAxes, fontsize=14, family="monospace",
+                backgroundcolor=backgrounds[ds[1] <= ds[2]],
+                color="black" if args.background == "white" else "white")
+    axes[0].text(0.97, 1.75, " cmts    delta  changed",
+                 horizontalalignment="left", verticalalignment="center",
+                 transform=axes[0].transAxes, fontsize=14, family="monospace",
+                 color="black" if args.background == "white" else "white")
     axes[-1].set_axis_on()
     target_num_labels = 12
     num_months = (end_date.year - start_date.year) * 12 + end_date.month - start_date.month
@@ -1337,6 +1354,32 @@ def show_devs(args, name, start_date, end_date, data):
     deploy_plot(title, args.output, args.style)
 
 
+def _format_number(n):
+    power = int(numpy.log10(abs(n)))
+    if power >= 6:
+        n = n / 1000000
+        if n >= 10:
+            n = str(int(n))
+        else:
+            n = "%.1f" % n
+            if n.endswith("0"):
+                n = n[:-2]
+        suffix = "M"
+    elif power >= 3:
+        n = n / 1000
+        if n >= 10:
+            n = str(int(n))
+        else:
+            n = "%.1f" % n
+            if n.endswith("0"):
+                n = n[:-2]
+        suffix = "K"
+    else:
+        n = str(n)
+        suffix = ""
+    return n + suffix
+
+
 def main():
     args = parse_args()
     reader = read_input(args)