From 11f939470467863f2bd200aeada7c7c58f55ee6e Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Wed, 15 Feb 2012 18:18:53 +0000
Subject: [PATCH] remove 'provisioning'/'reliability' from WUI, add to
 misc/operations_helpers

Also remove docs related to reliability/provisioning pages
---
 docs/architecture.rst                         |  6 --
 docs/frontends/webapi.rst                     | 11 ---
 .../provisioning}/provisioning.py             |  0
 .../provisioning}/provisioning.xhtml          |  0
 .../provisioning}/reliability.py              |  0
 .../provisioning}/reliability.xhtml           |  0
 .../provisioning}/test_provisioning.py        |  0
 .../provisioning/web_reliability.py           |  0
 src/allmydata/test/test_web.py                | 84 -------------------
 src/allmydata/web/root.py                     | 25 +-----
 src/allmydata/web/welcome.xhtml               |  3 -
 11 files changed, 2 insertions(+), 127 deletions(-)
 rename {src/allmydata => misc/operations_helpers/provisioning}/provisioning.py (100%)
 rename {src/allmydata/web => misc/operations_helpers/provisioning}/provisioning.xhtml (100%)
 rename {src/allmydata => misc/operations_helpers/provisioning}/reliability.py (100%)
 rename {src/allmydata/web => misc/operations_helpers/provisioning}/reliability.xhtml (100%)
 rename {src/allmydata/test => misc/operations_helpers/provisioning}/test_provisioning.py (100%)
 rename src/allmydata/web/reliability.py => misc/operations_helpers/provisioning/web_reliability.py (100%)

diff --git a/docs/architecture.rst b/docs/architecture.rst
index 3a9e08fb..362a1792 100644
--- a/docs/architecture.rst
+++ b/docs/architecture.rst
@@ -553,9 +553,3 @@ will be able to reduce the expansion factor down to a bare minimum while
 still retaining high reliability, but large unstable grids (where nodes are
 coming and going very quickly) may require more repair/verification bandwidth
 than actual upload/download traffic.
-
-Tahoe-LAFS nodes that run a webserver have a page dedicated to provisioning
-decisions: this tool may help you evaluate different expansion factors and
-view the disk consumption of each. It is also acquiring some sections with
-availability/reliability numbers, as well as preliminary cost analysis data.
-This tool will continue to evolve as our analysis improves.
diff --git a/docs/frontends/webapi.rst b/docs/frontends/webapi.rst
index 47ab7542..b67ee334 100644
--- a/docs/frontends/webapi.rst
+++ b/docs/frontends/webapi.rst
@@ -1805,17 +1805,6 @@ This is the "Welcome Page", and contains a few distinct sections::
  implementation hashes synchronously, so clients will probably never see
  progress-hash!=1.0).
 
-``GET /provisioning/``
-
- This page provides a basic tool to predict the likely storage and bandwidth
- requirements of a large Tahoe grid. It provides forms to input things like
- total number of users, number of files per user, average file size, number
- of servers, expansion ratio, hard drive failure rate, etc. It then provides
- numbers like how many disks per server will be needed, how many read
- operations per second should be expected, and the likely MTBF for files in
- the grid. This information is very preliminary, and the model upon which it
- is based still needs a lot of work.
-
 ``GET /helper_status/``
 
  If the node is running a helper (i.e. if [helper]enabled is set to True in
diff --git a/src/allmydata/provisioning.py b/misc/operations_helpers/provisioning/provisioning.py
similarity index 100%
rename from src/allmydata/provisioning.py
rename to misc/operations_helpers/provisioning/provisioning.py
diff --git a/src/allmydata/web/provisioning.xhtml b/misc/operations_helpers/provisioning/provisioning.xhtml
similarity index 100%
rename from src/allmydata/web/provisioning.xhtml
rename to misc/operations_helpers/provisioning/provisioning.xhtml
diff --git a/src/allmydata/reliability.py b/misc/operations_helpers/provisioning/reliability.py
similarity index 100%
rename from src/allmydata/reliability.py
rename to misc/operations_helpers/provisioning/reliability.py
diff --git a/src/allmydata/web/reliability.xhtml b/misc/operations_helpers/provisioning/reliability.xhtml
similarity index 100%
rename from src/allmydata/web/reliability.xhtml
rename to misc/operations_helpers/provisioning/reliability.xhtml
diff --git a/src/allmydata/test/test_provisioning.py b/misc/operations_helpers/provisioning/test_provisioning.py
similarity index 100%
rename from src/allmydata/test/test_provisioning.py
rename to misc/operations_helpers/provisioning/test_provisioning.py
diff --git a/src/allmydata/web/reliability.py b/misc/operations_helpers/provisioning/web_reliability.py
similarity index 100%
rename from src/allmydata/web/reliability.py
rename to misc/operations_helpers/provisioning/web_reliability.py
diff --git a/src/allmydata/test/test_web.py b/src/allmydata/test/test_web.py
index d918bc15..edafd242 100644
--- a/src/allmydata/test/test_web.py
+++ b/src/allmydata/test/test_web.py
@@ -512,90 +512,6 @@ class Web(WebMixin, WebErrorMixin, testutil.StallMixin, testutil.ReallyEqualMixi
         d.addCallback(_check)
         return d
 
-    def test_provisioning(self):
-        d = self.GET("/provisioning/")
-        def _check(res):
-            self.failUnlessIn('Provisioning Tool', res)
-            self.failUnlessIn(FAVICON_MARKUP, res)
-
-            fields = {'filled': True,
-                      "num_users": int(50e3),
-                      "files_per_user": 1000,
-                      "space_per_user": int(1e9),
-                      "sharing_ratio": 1.0,
-                      "encoding_parameters": "3-of-10-5",
-                      "num_servers": 30,
-                      "ownership_mode": "A",
-                      "download_rate": 100,
-                      "upload_rate": 10,
-                      "delete_rate": 10,
-                      "lease_timer": 7,
-                      }
-            return self.POST("/provisioning/", **fields)
-
-        d.addCallback(_check)
-        def _check2(res):
-            self.failUnlessIn('Provisioning Tool', res)
-            self.failUnlessIn(FAVICON_MARKUP, res)
-            self.failUnlessIn("Share space consumed: 167.01TB", res)
-
-            fields = {'filled': True,
-                      "num_users": int(50e6),
-                      "files_per_user": 1000,
-                      "space_per_user": int(5e9),
-                      "sharing_ratio": 1.0,
-                      "encoding_parameters": "25-of-100-50",
-                      "num_servers": 30000,
-                      "ownership_mode": "E",
-                      "drive_failure_model": "U",
-                      "drive_size": 1000,
-                      "download_rate": 1000,
-                      "upload_rate": 100,
-                      "delete_rate": 100,
-                      "lease_timer": 7,
-                      }
-            return self.POST("/provisioning/", **fields)
-        d.addCallback(_check2)
-        def _check3(res):
-            self.failUnlessIn("Share space consumed: huge!", res)
-            fields = {'filled': True}
-            return self.POST("/provisioning/", **fields)
-        d.addCallback(_check3)
-        def _check4(res):
-            self.failUnlessIn("Share space consumed:", res)
-        d.addCallback(_check4)
-        return d
-
-    def test_reliability_tool(self):
-        try:
-            from allmydata import reliability
-            _hush_pyflakes = reliability
-            del _hush_pyflakes
-        except:
-            raise unittest.SkipTest("reliability tool requires NumPy")
-
-        d = self.GET("/reliability/")
-        def _check(res):
-            self.failUnlessIn('Reliability Tool', res)
-            fields = {'drive_lifetime': "8Y",
-                      "k": "3",
-                      "R": "7",
-                      "N": "10",
-                      "delta": "100000",
-                      "check_period": "1M",
-                      "report_period": "3M",
-                      "report_span": "5Y",
-                      }
-            return self.POST("/reliability/", **fields)
-
-        d.addCallback(_check)
-        def _check2(res):
-            self.failUnlessIn('Reliability Tool', res)
-            r = r'Probability of loss \(no maintenance\):\s+<span>0.033591'
-            self.failUnless(re.search(r, res), res)
-        d.addCallback(_check2)
-        return d
-
     def test_status(self):
         h = self.s.get_history()
         dl_num = h.list_all_download_statuses()[0].get_counter()
diff --git a/src/allmydata/web/root.py b/src/allmydata/web/root.py
index 615f98d1..47793201 100644
--- a/src/allmydata/web/root.py
+++ b/src/allmydata/web/root.py
@@ -2,18 +2,17 @@ import time, os
 
 from twisted.internet import address
 from twisted.web import http
-from nevow import rend, url, loaders, tags as T
+from nevow import rend, url, tags as T
 from nevow.inevow import IRequest
 from nevow.static import File as nevow_File # TODO: merge with static.File?
 from nevow.util import resource_filename
 
 import allmydata # to display import path
 from allmydata import get_package_versions_string
-from allmydata import provisioning
 from allmydata.util import idlib, log
 from allmydata.interfaces import IFileNode
 from allmydata.web import filenode, directory, unlinked, status, operations
-from allmydata.web import reliability, storage
+from allmydata.web import storage
 from allmydata.web.common import abbreviate_size, getxmlfile, WebError, \
      get_arg, RenderMixin, get_format, get_mutable_type
 
@@ -126,20 +125,6 @@ class IncidentReporter(RenderMixin, rend.Page):
         req.setHeader("content-type", "text/plain")
         return "Thank you for your report!"
 
-class NoReliability(rend.Page):
-    docFactory = loaders.xmlstr('''\
-<html xmlns:n="http://nevow.com/ns/nevow/0.1">
-  <head>
-    <title>AllMyData - Tahoe</title>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-  </head>
-  <body>
-  <h2>"Reliability" page not available</h2>
-  <p>Please install the python "NumPy" module to enable this page.</p>
-  </body>
-</html>
-''')
-
 SPACE = u"\u00A0"*2
 
 class Root(rend.Page):
@@ -175,12 +160,6 @@ class Root(rend.Page):
         # needs to created on each request
         return status.HelperStatus(self.client.helper)
 
-    child_provisioning = provisioning.ProvisioningTool()
-    if reliability.is_available():
-        child_reliability = reliability.ReliabilityTool()
-    else:
-        child_reliability = NoReliability()
-
     child_report_incident = IncidentReporter()
     #child_server # let's reserve this for storage-server-over-HTTP
 
diff --git a/src/allmydata/web/welcome.xhtml b/src/allmydata/web/welcome.xhtml
index b5a191e4..6bf1deba 100644
--- a/src/allmydata/web/welcome.xhtml
+++ b/src/allmydata/web/welcome.xhtml
@@ -91,9 +91,6 @@
   <div>Please visit the <a target="_blank" href="http://tahoe-lafs.org">Tahoe-LAFS home page</a> for
   code updates and bug reporting.</div>
 
-  <div>The <a href="provisioning">provisioning tool</a> and <a
-  href="reliability">reliability calculator</a> may also be useful.</div>
-
   <div n:render="incident_button" />
 </div>
 
-- 
2.45.2