changeset 708:b9bbc0d6e9f3 beta

added cache reset, stats reset, and delete into repository settings in admin. Some small template fixes
author Marcin Kuzminski <marcin@python-works.com>
date Thu, 18 Nov 2010 01:55:51 +0100
parents 1105531ae572
children a23b686fb14d
files rhodecode/config/routing.py rhodecode/controllers/admin/repos.py rhodecode/model/db.py rhodecode/model/repo.py rhodecode/public/css/style.css rhodecode/templates/admin/permissions/permissions.html rhodecode/templates/admin/repos/repo_edit.html
diffstat 7 files changed, 105 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/config/routing.py	Thu Nov 18 01:03:00 2010 +0100
+++ b/rhodecode/config/routing.py	Thu Nov 18 01:55:51 2010 +0100
@@ -73,7 +73,13 @@
         m.connect('delete_repo_user', "/repos_delete_user/{repo_name:.*}",
              action="delete_perm_user", conditions=dict(method=["DELETE"],
                                                         function=check_repo))
-
+        #settings actions
+        m.connect('repo_stats', "/repos_stats/{repo_name:.*}",
+             action="repo_stats", conditions=dict(method=["DELETE"],
+                                                        function=check_repo))
+        m.connect('repo_cache', "/repos_cache/{repo_name:.*}",
+             action="repo_cache", conditions=dict(method=["DELETE"],
+                                                        function=check_repo))
     #ADMIN USER REST ROUTES
     map.resource('user', 'users', controller='admin/users', path_prefix='/_admin')
 
--- a/rhodecode/controllers/admin/repos.py	Thu Nov 18 01:03:00 2010 +0100
+++ b/rhodecode/controllers/admin/repos.py	Thu Nov 18 01:55:51 2010 +0100
@@ -207,6 +207,35 @@
             raise HTTPInternalServerError()
 
     @HasPermissionAllDecorator('hg.admin')
+    def repo_stats(self, repo_name):
+        """
+        DELETE an existing repository statistics
+        :param repo_name:
+        """
+
+        try:
+            repo_model = RepoModel()
+            repo_model.delete_stats(repo_name)
+        except Exception, e:
+            h.flash(_('An error occured during deletion of repository stats'),
+                    category='error')
+        return redirect(url('edit_repo', repo_name=repo_name))
+
+    @HasPermissionAllDecorator('hg.admin')
+    def repo_cache(self, repo_name):
+        """
+        INVALIDATE exisitings repository cache
+        :param repo_name:
+        """
+
+        try:
+            ScmModel().mark_for_invalidation(repo_name)
+        except Exception, e:
+            h.flash(_('An error occured during cache invalidation'),
+                    category='error')
+        return redirect(url('edit_repo', repo_name=repo_name))
+
+    @HasPermissionAllDecorator('hg.admin')
     def show(self, repo_name, format='html'):
         """GET /repos/repo_name: Show a specific item"""
         # url('repo', repo_name=ID)
@@ -217,6 +246,18 @@
         # url('edit_repo', repo_name=ID)
         repo_model = RepoModel()
         c.repo_info = repo = repo_model.get(repo_name)
+        if repo.stats:
+            last_rev = repo.stats.stat_on_revision
+        else:
+            last_rev = 0
+        c.stats_revision = last_rev
+        c.repo_last_rev = ScmModel().get(repo_name).revisions[-1]
+        if last_rev == 0:
+            c.stats_percentage = 0
+        else:
+            c.stats_percentage = '%.2f' % ((float((last_rev)) / c.repo_last_rev) * 100)
+
+
         if not repo:
             h.flash(_('%s repository is not mapped to db perhaps'
                       ' it was created or renamed from the filesystem'
--- a/rhodecode/model/db.py	Thu Nov 18 01:03:00 2010 +0100
+++ b/rhodecode/model/db.py	Thu Nov 18 01:55:51 2010 +0100
@@ -97,7 +97,7 @@
     user = relation('User')
     fork = relation('Repository', remote_side=repo_id)
     repo_to_perm = relation('RepoToPerm', cascade='all')
-    stats = relation('Statistics', cascade='all')
+    stats = relation('Statistics', cascade='all', uselist=False)
 
     def __repr__(self):
         return "<Repository('%s:%s')>" % (self.repo_id, self.repo_name)
--- a/rhodecode/model/repo.py	Thu Nov 18 01:03:00 2010 +0100
+++ b/rhodecode/model/repo.py	Thu Nov 18 01:55:51 2010 +0100
@@ -24,7 +24,8 @@
 from vcs.backends import get_repo, get_backend
 from datetime import datetime
 from pylons import app_globals as g
-from rhodecode.model.db import Repository, RepoToPerm, User, Permission
+from rhodecode.model.db import Repository, RepoToPerm, User, Permission, \
+    Statistics
 from rhodecode.model.meta import Session
 from rhodecode.model.user import UserModel
 from rhodecode.model.caching_query import FromCache
@@ -179,6 +180,17 @@
             self.sa.rollback()
             raise
 
+    def delete_stats(self, repo_name):
+        try:
+            self.sa.query(Statistics)\
+                .filter(Statistics.repository == self.get(repo_name)).delete()
+            self.sa.commit()
+        except:
+            log.error(traceback.format_exc())
+            self.sa.rollback()
+            raise
+
+
     def __create_repo(self, repo_name, alias):
         from rhodecode.lib.utils import check_repo
         repo_path = os.path.join(g.base_path, repo_name)
--- a/rhodecode/public/css/style.css	Thu Nov 18 01:03:00 2010 +0100
+++ b/rhodecode/public/css/style.css	Thu Nov 18 01:55:51 2010 +0100
@@ -1802,6 +1802,14 @@
 text-align:left;
 }
 
+.refresh_icon {
+background:url("../images/icons/arrow_refresh.png") no-repeat scroll 3px;
+height:16px;
+padding-left:20px;
+padding-top:1px;
+text-align:left;
+}
+
 .rss_icon {
 background:url("../images/icons/rss_16.png") no-repeat scroll 3px;
 height:16px;
--- a/rhodecode/templates/admin/permissions/permissions.html	Thu Nov 18 01:03:00 2010 +0100
+++ b/rhodecode/templates/admin/permissions/permissions.html	Thu Nov 18 01:55:51 2010 +0100
@@ -92,7 +92,7 @@
                 <div class="input">${h.text('ldap_port',class_='small')}</div>
             </div>
             <div class="field">
-                <div class="label label-checkbox"><label for="ldap_ldaps">${_('LDAPS')}</label></div>
+                <div class="label label-checkbox"><label for="ldap_ldaps">${_('Enable LDAPS')}</label></div>
                 <div class="checkboxes"><div class="checkbox">${h.checkbox('ldap_ldaps',True,class_='small')}</div></div>
             </div>
             <div class="field">
--- a/rhodecode/templates/admin/repos/repo_edit.html	Thu Nov 18 01:03:00 2010 +0100
+++ b/rhodecode/templates/admin/repos/repo_edit.html	Thu Nov 18 01:55:51 2010 +0100
@@ -286,15 +286,42 @@
         <h5>${_('Administration')}</h5>    
     </div>
     
-    <div class="form">
-    
-        <h3>${_('Reset statistics')}</h3>
-        <h3>${_('Reset cache')}</h3>
-        <h3>${_('Delete')}</h3>
+        <h3>${_('Statistics')}</h3>
+        
+        ${h.form(url('repo_stats', repo_name=c.repo_info.repo_name),method='delete')}
+        <div class="form">
+           <div class="fields">
+               ${h.submit('reset_stats_%s' % c.repo_info.repo_name,_('Reset current statistics'),class_="refresh_icon action_button",onclick="return confirm('Confirm to remove current statistics');")}
+               
+               <div class="field">
+               <ul>
+                    <li>${_('Fetched to rev')}: ${c.stats_revision}/${c.repo_last_rev}</li>
+                    <li>${_('Percentage of stats gathered')}: ${c.stats_percentage} %</li>
+               </ul>
+               </div>
+               
+           </div>
+        </div>                    
+        ${h.end_form()}
+        
+        <h3>${_('Cache')}</h3>
+        ${h.form(url('repo_cache', repo_name=c.repo_info.repo_name),method='delete')}
+        <div class="form">
+           <div class="fields">
+               ${h.submit('reset_cache_%s' % c.repo_info.repo_name,_('Invalidate repository cache'),class_="refresh_icon action_button",onclick="return confirm('Confirm to invalidate repository cache');")}
+           </div>
+        </div>                    
+        ${h.end_form()}
         
         
-    
-    </div>
+        <h3>${_('Delete')}</h3>
+        ${h.form(url('repo', repo_name=c.repo_info.repo_name),method='delete')}
+        <div class="form">
+           <div class="fields">
+               ${h.submit('remove_%s' % c.repo_info.repo_name,_('Remove this repository'),class_="delete_icon action_button",onclick="return confirm('Confirm to delete this repository');")}
+           </div>
+        </div>                    
+        ${h.end_form()}
     
 </div>