Example #1
0
    def run(self):
        source_server = CONF.getCouchURI()
        if not source_server:
            logger.info("""No DB configuration found.
                    To upgrade your DB please configure a valid CouchDB URI in:
                    ~/.faraday/config/user.xml configuration file.""")
            return

        serv = couchdbkit.Server(source_server)

        logger.info('We are about to upload CouchdbViews in Server [%s]' %
                    source_server)
        # if not query_yes_no("Faraday won't behave correctly with older versions, proceed?", 'no'):
        #     return

        dbs = filter(
            lambda x: not x.startswith("_") and 'backup' not in x and x not in
            CONST_BLACKDBS, serv.all_dbs())
        logger.info('Dbs to upgrade: %s' % (', '.join(dbs)))

        logger.info('Preparing updates on Couchdbs')
        processed = 0
        views_uploader = ViewsManager()
        for db_name in dbs:
            db_source = couchdbkit.Database("/".join((source_server, db_name)))
            views_uploader.addViews(db_source, force=True)
Example #2
0
def connect_to_couchdb():
    cfg = ConfigParser.ConfigParser()
    cfg.read(['settings.ini'])

    db_url = cfg.get('database', 'url')
    user = cfg.get('database', 'username')
    passwd = cfg.get('database', 'password')

    return couchdbkit.Database(db_url,
                               filters=[restkit.BasicAuth(user, passwd)])
Example #3
0
    def update_db(self, db_name):
        if 'backup' in db_name:
            logger.info('Database [%s] is a backup, ignoring' % db_name)
            return

        source_server = CONF.getCouchURI()
        # Levanto los servidores
        db_source = couchdbkit.Database("/".join((source_server, db_name)))
        if db_source.doc_exist(db_name):
            logger.info('DB: [%s] Already had suffer migration' % db_name)
            return

        # Primero replico para no cagarla
        logger.info('Creating db backup: %s' % ('%s-backup' % db_name))
        db_source.server.replicate(db_name,
                                   '%s-backup' % db_name,
                                   create_target=True)
        db_bkp = couchdbkit.Database("/".join(
            (source_server, '%s-backup' % db_name)))
        import time
        while db_source.info()['doc_count'] < db_bkp.info()['doc_count']:
            time.sleep(1)

        # Crear documento 'workspace'
        logger.info('Creating workspace document')
        workspace = model.workspace.Workspace(db_name, 'Migrated Workspace ')

        dict_workspace = dm.WorkspaceMapper(None).serialize(workspace)
        db_source.save_doc(dict_workspace, force_update=True)
        types = {}

        logger.info('Updating modelobject documents')
        for document in db_source.all_docs(include_docs=True):
            # Alter parent id:
            doc = document['doc']
            if not ('type' in doc):
                continue
            if doc['type'] == 'CommandRunInformation':
                # Should set the workspace here!
                continue
            elif doc['type'] == 'Workspace':
                # Already modified
                continue
            else:
                # Modify the parent ID
                parent = doc['parent']
                if parent == 'None' or parent == '':
                    parent = None
                else:
                    l_parent = doc['_id'].split('.')[:-1]
                    parent = '.'.join(l_parent)
                doc['parent'] = parent
                if doc['owned'] == '' or doc['owned'] is None:
                    doc['owned'] == False
                else:
                    doc['owned'] = eval(doc['owned'])

                document['doc'] = doc
                db_source.save_doc(doc, force_update=True)

            types[doc['type']] = types.get(doc['type'], 0) + 1

        logger.info("Transformed %s objects" % str(types))