def main(db_name, db_user, db_pass, db_host, sequence_file, zone_dir, **tls_args):
    # Starting Sequence for change stream
    sequence = sequence_read(sequence_file)
    click.echo('Skipping %s changes.' % sequence)
    # CouchDB Connection
    tls_args['cert_reqs'] = ssl.CERT_REQUIRED
    tls_args['ssl_version'] = ssl.PROTOCOL_TLSv1_2
    auth = CouchdbResource(filters=[BasicAuth(db_user, db_pass)], **tls_args)
    server = Server(uri=db_host, resource_instance=auth)
    db = server[db_name]

    if sequence == 0:
        click.echo('Fast track syncing all zones...')
        c = Consumer(db)
        result = c.fetch(descending=True, limit=1)
        # Fast track to this sequence
        sequence = result['last_seq']
        # Go get all the current zones.
        zones = c.fetch()
        for zone in zones['results']:
            domain = zone['id']
            try:
                doc = db.get(docid=domain)
            except ResourceNotFound, e:
                click.echo('%s not found (this is normal if the zone was deleted)' % domain)
            else:
                zone_update(domain, doc['data'], zone_dir)
        sequence_write(sequence_file, sequence)  # Keep track of our sync point
        click.echo('Fast track syncing done')
Exemple #2
0
def get_recent_changes(db, limit=500):
    c = Consumer(db)
    changes = c.fetch(limit=limit, descending=True, include_docs=True)['results']
    for row in changes:
        yield {
            'id':row['id'],
            'rev': row['changes'][0]['rev'],
            'domain': row['doc'].get('domain', '[no domain]'),
            'doc_type': row['doc'].get('doc_type', '[no doc_type]'),
        }
Exemple #3
0
def get_recent_changes(db, limit=500):
    c = Consumer(db)
    changes = c.fetch(limit=limit, descending=True,
                      include_docs=True)['results']
    for row in changes:
        yield {
            'id': row['id'],
            'rev': row['changes'][0]['rev'],
            'domain': row['doc'].get('domain', '[no domain]'),
            'doc_type': row['doc'].get('doc_type', '[no doc_type]'),
        }
Exemple #4
0
def get_recent_changes(db, limit):
    c = Consumer(db)
    changes = c.fetch(limit=limit, descending=True, include_docs=True)["results"]
    for row in changes:
        yield {
            "id": row["id"],
            "rev": row["changes"][0]["rev"],
            "domain": row["doc"].get("domain", "[no domain]"),
            "doc_type": row["doc"].get("doc_type", "[no doc_type]"),
            "date": _guess_date(row["doc"]),
        }
Exemple #5
0
def process_couchdb_changes():
    server = Server(settings.COUCHDB_SERVER)
    db = server.get_or_create_db('openelm')
    consumer = Consumer(db)
    sequence = SyncSequenceCache.objects.get(pk=1)
    changes = consumer.fetch(filter='record/new_records', since=sequence.last_sequence_id)
    if changes:
        for change in changes['results']:
            record_id = change['id']
            copy_photo_for_record.delay(record_id)
            send_new_record_email.delay(record_id)
        sequence.last_sequence_id = changes['last_seq']
        sequence.save()
Exemple #6
0
def process_couchdb_changes():
    server = Server(settings.COUCHDB_SERVER)
    db = server.get_or_create_db("openelm")
    consumer = Consumer(db)
    sequence = SyncSequenceCache.objects.get(pk=1)
    changes = consumer.fetch(filter="record/new_records", since=sequence.last_sequence_id)
    if changes:
        for change in changes["results"]:
            record_id = change["id"]
            copy_photo_for_record.delay(record_id)
            send_new_record_email.delay(record_id)
        sequence.last_sequence_id = changes["last_seq"]
        sequence.save()
Exemple #7
0
 def queue_once():
     c = Consumer(self.db)
     items = c.fetch(since=0, **item_kwargs)['results']
     if items:
         item_function(items)