From 5c7f08101166f7831e58fd8f3a9121b71c4f7804 Mon Sep 17 00:00:00 2001
From: Per Cederqvist <ceder@lysator.liu.se>
Date: Thu, 14 Jun 2007 18:24:41 +0000
Subject: [PATCH] Added the lysrdiff-sizechange utility.

* lysrdiff-sizechange.py: New script.  Report the most recent size
  change of each backup task.

* Makefile (install): Added lysrdiff-sizechange.py.
---
 ChangeLog              |  5 ++++
 Makefile               |  1 +
 lysrdiff-sizechange.py | 54 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+)
 create mode 100755 lysrdiff-sizechange.py

diff --git a/ChangeLog b/ChangeLog
index 9ede102..e1037fe 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2007-06-14  Per Cederqvist  <ceder@shafan.lysator.liu.se>
 
+	Added the lysrdiff-sizechange utility.
+	* lysrdiff-sizechange.py: New script.  Report the most recent size
+	change of each backup task.
+	* Makefile (install): Added lysrdiff-sizechange.py.
+
 	New options --continue and --only-clone.  Better remote watching
 	of the status.
 
diff --git a/Makefile b/Makefile
index 9452920..001285a 100644
--- a/Makefile
+++ b/Makefile
@@ -12,6 +12,7 @@ install: install-one-task
 	cp lysrdiff-move-obsolete $(BINDIR)/
 	cp lysrdiff-move-job $(BINDIR)/
 	cp lysrdiff-label-disk $(BINDIR)/
+	cp lysrdiff-sizechange.py $(BINDIR)/
 
 install-one-task:
 	cp backup-one-task $(BINDIR)/
diff --git a/lysrdiff-sizechange.py b/lysrdiff-sizechange.py
new file mode 100755
index 0000000..8a549ed
--- /dev/null
+++ b/lysrdiff-sizechange.py
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+
+import os
+import sys
+
+def root(disk, part):
+    return "/lysrdiff/%d/perm/%d/lysrdiff" % (disk, part)
+
+def taskfile(disk, part):
+    return "%s/tasks" % root(disk, part)
+
+def summary_file(disk, part, category, subcategory):
+    return "%s/backups/%s/%s/backup-summary.txt" % (
+        root(disk, part), category, subcategory)
+
+def parse_summary(line):
+    start_date, start_time, end_date, end_time, infotext = line.split(" ", 4)
+    info = {}
+    for item in infotext.split(" "):
+        key, val = item.split("=", 1)
+        info[key] = val
+    return (start_date + " " + start_time,
+            end_date + " " + end_time,
+            info)
+
+def report_sizechange(disk, part, category, subcategory):
+    prev = 0
+    curr = 0
+    for line in open(summary_file(disk, part, category, subcategory)):
+        start, end, info = parse_summary(line)
+        sz = info.get("totalsize")
+        if sz is not None:
+            try:
+                sz = int(sz)
+                prev = curr
+                curr = sz
+            except ValueError:
+                pass
+
+    print curr - prev, category, subcategory
+
+
+def report_partition_sizechange(disk, part):
+    for line in open(taskfile(disk, part)):
+        category, subcategory, server, origin = line.split(" ", 3)
+        report_sizechange(disk, part, category, subcategory)
+
+def main():
+    for spec in sys.argv[1:]:
+        disk, part = spec.split("/")
+        report_partition_sizechange(int(disk), int(part))
+
+if __name__ == '__main__':
+    main()
-- 
GitLab