Example #1
0
def populate_annex_files(self, dburl, annex_directory):
    #if not self.request.called_directly:
    #    self.update_state(state='STARTED')
    #self.request.id = POPULATE_ANNEXDB
    #import time
    #time.sleep(5)
    sessionmaker = make_postgresql_session(dburl)
    session = sessionmaker()
    #session.commit()
    mgr = AnnexFileManager(session, annex_directory)
    mgr.populate_files()
    session.commit()
Example #2
0
 def __init__(self, request):
     super(AnnexAdminView, self).__init__(request)
     settings = request.registry.settings
     annex_directory = settings['default.gitannex.annex_path']
     self.repomgr = AnnexRepoManager(request.db, annex_directory)
     self.filemgr = AnnexFileManager(request.db, annex_directory)
     self.annex_directory = annex_directory
     self.dburl = settings['sqlalchemy.url']
     self.session = request.db
Example #3
0
 def __init__(self, session, dburl, annex_directory,
              siteimages_directory):
     super(MainDBAdminManager, self).__init__(session)
     self.annex_directory = annex_directory
     self.siteimages_directory = siteimages_directory
     self.dburl = dburl
     self.annex_repomgr = AnnexRepoManager(session, annex_directory)
     self.annex_filemgr = AnnexFileManager(session, annex_directory)
     self.siteimage_manager = SiteImageManager(session,
                                               self.siteimages_directory)
Example #4
0
class MainDBAdminManager(BaseManager):
    def __init__(self, session, dburl, annex_directory,
                 siteimages_directory):
        super(MainDBAdminManager, self).__init__(session)
        self.annex_directory = annex_directory
        self.siteimages_directory = siteimages_directory
        self.dburl = dburl
        self.annex_repomgr = AnnexRepoManager(session, annex_directory)
        self.annex_filemgr = AnnexFileManager(session, annex_directory)
        self.siteimage_manager = SiteImageManager(session,
                                                  self.siteimages_directory)
        

    def _setup_repos(self):
        dbmodel = self.annex_repomgr.dbmodel
        if not self.session.query(dbmodel).count():
            self.annex_repomgr.setup_repositories()
            
    def get_annex_info(self, inspector=None, new_job=False):
        if inspector is None:
            inspector = celery_app.control.inspect()
        result = inspector.app.AsyncResult(POPULATE_ANNEXDB_TASK)
        status = result.status
        populated = False
        if status in ['SUCCESS', 'STARTED']:
            populated = True
        repos = self.annex_repomgr.query().count()
        keys = self.annex_filemgr.keymgr.query().count()
        files = self.annex_filemgr.query().count()
        data = dict(status=status, repos=repos, keys=keys, files=files,
                    populated=populated, new_job=new_job)
        return data
        
    def get_siteimage_info(self):
        images = self.siteimage_manager.query().count()
        return dict(images=images)
        return data
        
    def delete_annex_db(self):
        self.annex_filemgr.delete_everything_tm()
        ip = celery_app.control.inspect()
        result = ip.app.AsyncResult(POPULATE_ANNEXDB_TASK)
        if result.status == 'SUCCESS':
            result.forget()
        return self.get_annex_info(inspector=ip)

    def delete_siteimages(self):
        self.siteimage_manager.delete_everything()
    
    def populate_annexdb(self):
        new_job = False
        ip = celery_app.control.inspect()
        result = ip.app.AsyncResult(POPULATE_ANNEXDB_TASK)
        if result.status == 'PENDING':
            self._setup_repos()
            args = (self.dburl, self.annex_directory)
            result = populate_annex_files.apply_async(
                args, task_id=POPULATE_ANNEXDB_TASK,
                countdown=0)
            new_job = True
        return self.get_annex_info(inspector=ip, new_job=new_job)
        

    def get_all_info(self, inspector=None):
        data = dict(gitannex=self.get_annex_info(inspector=inspector),
                    siteimages=self.get_siteimage_info())
        return data
Example #5
0
class AnnexAdminView(BaseResource):
    def __init__(self, request):
        super(AnnexAdminView, self).__init__(request)
        settings = request.registry.settings
        annex_directory = settings['default.gitannex.annex_path']
        self.repomgr = AnnexRepoManager(request.db, annex_directory)
        self.filemgr = AnnexFileManager(request.db, annex_directory)
        self.annex_directory = annex_directory
        self.dburl = settings['sqlalchemy.url']
        self.session = request.db



    def _setup_repos(self):
        dbmodel = self.repomgr.dbmodel
        if not self.session.query(dbmodel).count():
            self.repomgr.setup_repositories()

    def setup_repos(self):
        self._setup_repos()
        return self.get_info()
        
    def populate_annexdb(self):
        new_job = False
        ip = celery_app.control.inspect()
        result = ip.app.AsyncResult(POPULATE_ANNEXDB)
        if result.status == 'PENDING':
            self._setup_repos()
            args = (self.dburl, self.annex_directory)
            result = populate_annex_files.apply_async(
                args, task_id=POPULATE_ANNEXDB,
                countdown=0)
            new_job = True
        return self.get_info(inspector=ip, new_job=new_job)
    
    

    def post(self):
        data = self.request.json
        action = data['action']
        if action == 'populate_database':
            return self.populate_annexdb()
        elif action == 'setup_repos':
            return self.setup_repos()
        return self.get_info()
    
    
    def delete(self):
        self.filemgr.delete_everything_tm()
        ip = celery_app.control.inspect()
        result = ip.app.AsyncResult(POPULATE_ANNEXDB)
        if result.status == 'SUCCESS':
            result.forget()
        return self.get_info(inspector=ip)

    def get_info(self, inspector=None, new_job=False):
        if inspector is None:
            inspector = celery_app.control.inspect()
        result = inspector.app.AsyncResult(POPULATE_ANNEXDB)
        status = result.status
        populated = False
        if status in ['SUCCESS', 'STARTED']:
            populated = True
        repos = self.repomgr.query().count()
        keys = self.filemgr.keymgr.query().count()
        files = self.filemgr.query().count()
        data = dict(status=status, repos=repos, keys=keys, files=files,
                    populated=populated, new_job=new_job)
        return data
        

    def get(self, inspector=None):
        return self.get_info(inspector=inspector)