You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ga...@apache.org on 2015/02/19 13:42:58 UTC

fauxton commit: updated refs/heads/master to a014c0b

Repository: couchdb-fauxton
Updated Branches:
  refs/heads/master 133eda4a2 -> a014c0b64


add a warning for deletion of a  systemdatabase on a cluster.

Add a warning if the current database is an internal cluster database
and _stats is available on that note. _stats is only available if
it is a cluster internal node.
The warning is only shown for databases with the name:
  - _replicator
  - _users
  - dbs
  - nodes


Project: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/commit/a014c0b6
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/tree/a014c0b6
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/diff/a014c0b6

Branch: refs/heads/master
Commit: a014c0b6436ebfc1063efe5017ff45d6dfcb954f
Parents: 133eda4
Author: Poltergeist <sp...@gmail.com>
Authored: Sun Feb 8 16:49:19 2015 +0100
Committer: Garren Smith <ga...@gmail.com>
Committed: Thu Feb 19 14:42:32 2015 +0200

----------------------------------------------------------------------
 app/addons/databases/resources.js               | 48 ++++++++++++++++++--
 app/addons/databases/tests/resourcesSpec.js     | 12 +++++
 app/addons/documents/shared-routes.js           |  3 +-
 app/addons/documents/shared-views.js            | 10 +++-
 .../templates/delete_database_modal.html        |  3 ++
 app/addons/documents/views.js                   |  8 ++++
 6 files changed, 76 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a014c0b6/app/addons/databases/resources.js
----------------------------------------------------------------------
diff --git a/app/addons/databases/resources.js b/app/addons/databases/resources.js
index f248e9b..829f8e5 100644
--- a/app/addons/databases/resources.js
+++ b/app/addons/databases/resources.js
@@ -34,7 +34,7 @@ function(app, FauxtonAPI, Documents) {
     documentation: function () {
       return FauxtonAPI.constants.DOC_URLS.ALL_DBS;
     },
-    
+
     buildAllDocs: function(params) {
       this.allDocs = new Documents.AllDocs(null, {
         database: this,
@@ -54,11 +54,11 @@ function(app, FauxtonAPI, Documents) {
         return "/database/" + this.safeID() + "/_all_docs";
       } else if (context === "web-index") {
         return "#/database/"+ this.safeID() + "/_all_docs?limit=" + Databases.DocLimit;
-      } else if (context === "apiurl") { 
+      } else if (context === "apiurl") {
         return window.location.origin + "/database/" + this.safeID() + "/_all_docs";
       } else if (context === "changes") {
         return FauxtonAPI.urls('changes', 'app', this.safeID(), '?descending=true&limit=100&include_docs=true');
-      } else if (context === "changes-apiurl") { 
+      } else if (context === "changes-apiurl") {
         return FauxtonAPI.urls('changes', 'apiurl' , this.safeID(), '?descending=true&limit=100&include_docs=true');
       } else if (context === "app") {
         return "/database/" + this.safeID();
@@ -82,6 +82,44 @@ function(app, FauxtonAPI, Documents) {
     }
   });
 
+  Databases.IsSystemDatabaseModel = FauxtonAPI.Model.extend({
+
+    initialize: function (options) {
+      this.name = options.name;
+    },
+
+    url: function () {
+      return app.host + '/_stats';
+    },
+
+    sync: function (method, model, options) {
+      options.url = this.url();
+      return $.ajax(options);
+    },
+
+    parse: function (data) {
+      var isOnFrontendNode,
+        isSystemDatabase = false,
+        systemDatabases = [
+          '_replicator',
+          '_users',
+          'nodes',
+          'dbs'
+        ];
+      try {
+        JSON.parse(data);
+        isOnFrontendNode = false;
+
+      } catch (e) {
+        isOnFrontendNode = true;
+      }
+      if (systemDatabases.indexOf(this.name) !== -1 && !isOnFrontendNode) {
+        isSystemDatabase = true;
+      }
+      this.set('isSystemDatabase', isSystemDatabase);
+    }
+  });
+
   Databases.Changes = FauxtonAPI.Collection.extend({
 
     initialize: function(options) {
@@ -149,7 +187,7 @@ function(app, FauxtonAPI, Documents) {
         return this.get('disk_size');
       } else {
         return 0;
-      } 
+      }
     }
   });
 
@@ -171,7 +209,7 @@ function(app, FauxtonAPI, Documents) {
     },
 
     url: function(context) {
-      if (context === "apiurl") { 
+      if (context === "apiurl") {
         return window.location.origin + "/_all_dbs";
       } else {
         return app.host + "/_all_dbs";

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a014c0b6/app/addons/databases/tests/resourcesSpec.js
----------------------------------------------------------------------
diff --git a/app/addons/databases/tests/resourcesSpec.js b/app/addons/databases/tests/resourcesSpec.js
index 2980dd2..91d76ab 100644
--- a/app/addons/databases/tests/resourcesSpec.js
+++ b/app/addons/databases/tests/resourcesSpec.js
@@ -50,5 +50,17 @@ define([
         assert.equal(databaseNames[1], 'rocko');
       });
     });
+    describe('Is system Database', function () {
+      it('checks if the current database is a systemDatabase if /_stats returns json', function () {
+        var isSystemDatabase = new Resources.IsSystemDatabaseModel({name: '_users'});
+        isSystemDatabase.parse('{"couch_replicator":{}}');
+        assert.ok(isSystemDatabase.get('isSystemDatabase'));
+      });
+      it('checks if the current database is a systemDatabase if /_stats returns no json', function () {
+        var isSystemDatabase = new Resources.IsSystemDatabaseModel({name: '_users'});
+        isSystemDatabase.parse('<html></html>');
+        assert.notOk(isSystemDatabase.get('isSystemDatabase'));
+      });
+    });
   });
 });

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a014c0b6/app/addons/documents/shared-routes.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/shared-routes.js b/app/addons/documents/shared-routes.js
index 167e4bc..9564530 100644
--- a/app/addons/documents/shared-routes.js
+++ b/app/addons/documents/shared-routes.js
@@ -45,7 +45,8 @@ define([
     addSidebar: function (selectedTab) {
       var params = {
         collection: this.designDocs,
-        database: this.database
+        database: this.database,
+        isSystemDatabaseModel: new Databases.IsSystemDatabaseModel({name: this.database.get('id')})
       };
       if (selectedTab) {
         params.selectedTab = selectedTab;

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a014c0b6/app/addons/documents/shared-views.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/shared-views.js b/app/addons/documents/shared-views.js
index 8042d92..fa9ae37 100644
--- a/app/addons/documents/shared-views.js
+++ b/app/addons/documents/shared-views.js
@@ -30,6 +30,8 @@ function(app, FauxtonAPI, Components, Documents, Databases) {
 
     initialize: function(options) {
       this.database = options.database;
+      this.isSystemDatabaseModel = options.isSystemDatabaseModel;
+
       if (options.ddocInfo) {
         this.ddocID = options.ddocInfo.id;
         this.currView = options.ddocInfo.currView;
@@ -79,7 +81,7 @@ function(app, FauxtonAPI, Components, Documents, Databases) {
           icon: 'fonticon-plus-circled'
         });
 
-        return menuLinks; 
+        return menuLinks;
      }, [{
           title: 'New Doc',
           url: newUrlPrefix + '/new',
@@ -91,11 +93,15 @@ function(app, FauxtonAPI, Components, Documents, Databases) {
         }]);
     },
 
+    establish: function () {
+      return [this.isSystemDatabaseModel.fetch({reset: true})];
+
+    },
 
     beforeRender: function(manage) {
       this.deleteDBModal = this.setView(
         '#delete-db-modal',
-        new Views.DeleteDBModal({database: this.database})
+        new Views.DeleteDBModal({database: this.database, isSystemDatabase: this.isSystemDatabaseModel.get('isSystemDatabase')})
       );
 
       var newLinks = [{

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a014c0b6/app/addons/documents/templates/delete_database_modal.html
----------------------------------------------------------------------
diff --git a/app/addons/documents/templates/delete_database_modal.html b/app/addons/documents/templates/delete_database_modal.html
index e116a4e..6c493d7 100644
--- a/app/addons/documents/templates/delete_database_modal.html
+++ b/app/addons/documents/templates/delete_database_modal.html
@@ -19,6 +19,9 @@ the License.
   </div>
   <div class="modal-body">
     <form id="delete-db-check" class="form" method="post">
+      <% if (isSystemDatabase) { %>
+      <p>You are about to delete a system database, be careful!</p>
+      <% } %>
       <p>
       You've asked to <b>permanently delete</b> <code><%- database.id %></code>.
       Please enter the database name below to confirm the deletion of the

http://git-wip-us.apache.org/repos/asf/couchdb-fauxton/blob/a014c0b6/app/addons/documents/views.js
----------------------------------------------------------------------
diff --git a/app/addons/documents/views.js b/app/addons/documents/views.js
index cdef0d1..15e7763 100644
--- a/app/addons/documents/views.js
+++ b/app/addons/documents/views.js
@@ -145,9 +145,17 @@ function (app, FauxtonAPI, Components, Documents,
     template: "addons/documents/templates/delete_database_modal",
     initialize: function (options) {
       this.database = options.database;
+      this.isSystemDatabase = options.isSystemDatabase;
       FauxtonAPI.Events.on('database:delete', this.showDeleteDatabase, this);
     },
 
+    serialize: function () {
+      return {
+        isSystemDatabase: this.isSystemDatabase,
+        database: this.database
+      };
+    },
+
     showDeleteDatabase: function () {
       this.showModal();
     },