web: fix output=JSON, add buttons for repair/json to the 'run deep-check' form

This commit is contained in:
Brian Warner 2008-09-10 14:11:37 -07:00
parent f570ad7ba5
commit ca273eeaf1
2 changed files with 29 additions and 20 deletions

View File

@ -47,7 +47,8 @@ class ResultsBase:
for serverid in d["servers-responding"]] for serverid in d["servers-responding"]]
sharemap = {} sharemap = {}
for (shareid, serverids) in d["sharemap"].items(): for (shareid, serverids) in d["sharemap"].items():
sharemap[shareid] = [base32.b2a(serverid) for serverid in serverids] sharemap[shareid] = [idlib.nodeid_b2a(serverid)
for serverid in serverids]
r["sharemap"] = sharemap r["sharemap"] = sharemap
r["count-wrong-shares"] = d["count-wrong-shares"] r["count-wrong-shares"] = d["count-wrong-shares"]
@ -62,12 +63,17 @@ class ResultsBase:
assert isinstance(s, (list, tuple)) assert isinstance(s, (list, tuple))
return [html.escape(w) for w in s] return [html.escape(w) for w in s]
class LiteralCheckerResults(rend.Page): def want_json(self, ctx):
output = get_arg(inevow.IRequest(ctx), "output", "").lower()
if output.lower() == "json":
return True
return False
class LiteralCheckerResults(rend.Page, ResultsBase):
docFactory = getxmlfile("literal-checker-results.xhtml") docFactory = getxmlfile("literal-checker-results.xhtml")
def renderHTTP(self, ctx): def renderHTTP(self, ctx):
t = get_arg(inevow.IRequest(ctx), "output", "") if self.want_json(ctx):
if t.lower() == "json":
return self.json(ctx) return self.json(ctx)
return rend.Page.renderHTTP(self, ctx) return rend.Page.renderHTTP(self, ctx)
@ -85,8 +91,7 @@ class CheckerResults(rend.Page, ResultsBase):
self.r = ICheckerResults(results) self.r = ICheckerResults(results)
def renderHTTP(self, ctx): def renderHTTP(self, ctx):
t = get_arg(inevow.IRequest(ctx), "output", "") if self.want_json(ctx):
if t.lower() == "json":
return self.json(ctx) return self.json(ctx)
return rend.Page.renderHTTP(self, ctx) return rend.Page.renderHTTP(self, ctx)
@ -121,8 +126,7 @@ class CheckAndRepairResults(rend.Page, ResultsBase):
self.r = ICheckAndRepairResults(results) self.r = ICheckAndRepairResults(results)
def renderHTTP(self, ctx): def renderHTTP(self, ctx):
t = get_arg(inevow.IRequest(ctx), "output", None) if self.want_json(ctx):
if t == "json":
return self.json(ctx) return self.json(ctx)
return rend.Page.renderHTTP(self, ctx) return rend.Page.renderHTTP(self, ctx)
@ -173,8 +177,7 @@ class DeepCheckResults(rend.Page, ResultsBase):
self.r = results self.r = results
def renderHTTP(self, ctx): def renderHTTP(self, ctx):
t = get_arg(inevow.IRequest(ctx), "output", None) if self.want_json(ctx):
if t == "json":
return self.json(ctx) return self.json(ctx)
return rend.Page.renderHTTP(self, ctx) return rend.Page.renderHTTP(self, ctx)
@ -187,8 +190,8 @@ class DeepCheckResults(rend.Page, ResultsBase):
data["count-objects-healthy"] = c["count-objects-healthy"] data["count-objects-healthy"] = c["count-objects-healthy"]
data["count-objects-unhealthy"] = c["count-objects-unhealthy"] data["count-objects-unhealthy"] = c["count-objects-unhealthy"]
data["count-corrupt-shares"] = c["count-corrupt-shares"] data["count-corrupt-shares"] = c["count-corrupt-shares"]
data["list-corrupt-shares"] = [ (idlib.b2a(serverid), data["list-corrupt-shares"] = [ (idlib.nodeid_b2a(serverid),
idlib.b2a(storage_index), base32.b2a(storage_index),
shnum) shnum)
for (serverid, storage_index, shnum) for (serverid, storage_index, shnum)
in self.r.get_corrupt_shares() ] in self.r.get_corrupt_shares() ]
@ -306,8 +309,7 @@ class DeepCheckAndRepairResults(rend.Page, ResultsBase):
self.r = results self.r = results
def renderHTTP(self, ctx): def renderHTTP(self, ctx):
t = get_arg(inevow.IRequest(ctx), "output", None) if self.want_json(ctx):
if t == "json":
return self.json(ctx) return self.json(ctx)
return rend.Page.renderHTTP(self, ctx) return rend.Page.renderHTTP(self, ctx)
@ -330,13 +332,13 @@ class DeepCheckAndRepairResults(rend.Page, ResultsBase):
data["count-corrupt-shares-pre-repair"] = c["count-corrupt-shares-pre-repair"] data["count-corrupt-shares-pre-repair"] = c["count-corrupt-shares-pre-repair"]
data["count-corrupt-shares-post-repair"] = c["count-corrupt-shares-pre-repair"] data["count-corrupt-shares-post-repair"] = c["count-corrupt-shares-pre-repair"]
data["list-corrupt-shares"] = [ (idlib.b2a(serverid), data["list-corrupt-shares"] = [ (idlib.nodeid_b2a(serverid),
idlib.b2a(storage_index), base32.b2a(storage_index),
shnum) shnum)
for (serverid, storage_index, shnum) for (serverid, storage_index, shnum)
in self.r.get_corrupt_shares() ] in self.r.get_corrupt_shares() ]
data["list-remaining-corrupt-shares"] = [ (idlib.b2a(serverid), data["list-remaining-corrupt-shares"] = [ (idlib.nodeid_b2a(serverid),
idlib.b2a(storage_index), base32.b2a(storage_index),
shnum) shnum)
for (serverid, storage_index, shnum) for (serverid, storage_index, shnum)
in self.r.get_remaining_corrupt_shares() ] in self.r.get_remaining_corrupt_shares() ]

View File

@ -567,10 +567,17 @@ class DirectoryAsHTML(rend.Page):
T.input(type="hidden", name="t", value="deep-check"), T.input(type="hidden", name="t", value="deep-check"),
T.input(type="hidden", name="return_to", value="."), T.input(type="hidden", name="return_to", value="."),
T.legend(class_="freeform-form-label")["Run a deep-check operation (EXPENSIVE)"], T.legend(class_="freeform-form-label")["Run a deep-check operation (EXPENSIVE)"],
T.input(type="submit", value="Deep-Check"), T.div[
" ",
"Verify every bit? (EVEN MORE EXPENSIVE):", "Verify every bit? (EVEN MORE EXPENSIVE):",
T.input(type="checkbox", name="verify"), T.input(type="checkbox", name="verify"),
],
T.div["Repair any problems?: ",
T.input(type="checkbox", name="repair")],
T.div["Emit results in JSON format?: ",
T.input(type="checkbox", name="output", value="JSON")],
T.input(type="submit", value="Deep-Check"),
]] ]]
forms.append(T.div(class_="freeform-form")[deep_check]) forms.append(T.div(class_="freeform-form")[deep_check])