From 7932fadb5e38b21b4aa50a7bdb232142367d89f3 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Tue, 18 Nov 2008 18:28:26 -0700
Subject: [PATCH] webapi: add 'summary' string to checker results JSON

---
 docs/frontends/webapi.txt            | 1 +
 src/allmydata/immutable/checker.py   | 8 +++++++-
 src/allmydata/test/test_system.py    | 3 +++
 src/allmydata/web/checker_results.py | 1 +
 4 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/docs/frontends/webapi.txt b/docs/frontends/webapi.txt
index a91a478d..2ecba410 100644
--- a/docs/frontends/webapi.txt
+++ b/docs/frontends/webapi.txt
@@ -750,6 +750,7 @@ POST $URL?t=check
 
    storage-index: a base32-encoded string with the objects's storage index,
                   or an empty string for LIT files
+   summary: a string, with a one-line summary of the stats of the file
    results: a dictionary that describes the state of the file. For LIT files,
             this dictionary has only the 'healthy' key, which will always be
             True. For distributed files, this dictionary has the following
diff --git a/src/allmydata/immutable/checker.py b/src/allmydata/immutable/checker.py
index 91bced99..3c6218ee 100644
--- a/src/allmydata/immutable/checker.py
+++ b/src/allmydata/immutable/checker.py
@@ -109,7 +109,11 @@ class SimpleCHKFileChecker:
                           ",".join(["sh%d" % shnum
                                     for shnum in sorted(missing)]))
         r.set_report(report)
-        # TODO: r.set_summary(summary)
+        if healthy:
+            r.set_summary("Healthy")
+        else:
+            r.set_summary("Not Healthy")
+            # TODO: more detail
         return r
 
 class VerifyingOutput:
@@ -123,6 +127,7 @@ class VerifyingOutput:
         self._results = results
         results.set_healthy(False)
         results.set_recoverable(False)
+        results.set_summary("Not Healthy")
 
     def setup_hashtrees(self, plaintext_hashtree, crypttext_hashtree):
         self._crypttext_hash_tree = crypttext_hashtree
@@ -145,6 +150,7 @@ class VerifyingOutput:
     def finish(self):
         self._results.set_healthy(True)
         self._results.set_recoverable(True)
+        self._results.set_summary("Healthy")
         # the return value of finish() is passed out of FileDownloader._done,
         # but SimpleCHKFileVerifier overrides this with the CheckerResults
         # instance instead.
diff --git a/src/allmydata/test/test_system.py b/src/allmydata/test/test_system.py
index 716544ee..c519dfaa 100644
--- a/src/allmydata/test/test_system.py
+++ b/src/allmydata/test/test_system.py
@@ -2204,6 +2204,9 @@ class DeepCheckWebGood(DeepCheckBase, unittest.TestCase):
 
         self.failUnlessEqual(data["storage-index"],
                              base32.b2a(n.get_storage_index()), where)
+        self.failUnless("summary" in data, (where, data))
+        self.failUnlessEqual(data["summary"].lower(), "healthy",
+                             "%s: '%s'" % (where, data["summary"]))
         r = data["results"]
         self.failUnlessEqual(r["healthy"], True, where)
         needs_rebalancing = bool( len(self.clients) < 10 )
diff --git a/src/allmydata/web/checker_results.py b/src/allmydata/web/checker_results.py
index ff19aa08..d59344eb 100644
--- a/src/allmydata/web/checker_results.py
+++ b/src/allmydata/web/checker_results.py
@@ -82,6 +82,7 @@ class ResultsBase:
     def _json_check_results(self, r):
         data = {}
         data["storage-index"] = r.get_storage_index_string()
+        data["summary"] = r.get_summary()
         data["results"] = self._json_check_counts(r.get_data())
         data["results"]["needs-rebalancing"] = r.needs_rebalancing()
         data["results"]["healthy"] = r.is_healthy()
-- 
2.45.2