Source code for mongoUtils.tools.tail
#!/usr/bin/env python
"""
a command line tool that simulates tail -f command to tail documents coming in a mongoDB collection
:Example:
>>> python -m mongoUtils.tools.tail -connection "mongodb://localhost:27017/classy" -collection statuses -track_field _id
"""
import argparse
from mongoUtils.pubsub import Sub
from mongoUtils.client import muClient
[docs]def parse_args():
parser = argparse.ArgumentParser(description="tail a mongodb collection")
parser.add_argument('-connection', type=str, required=True,
help='a db connection string\
as defined in http://docs.mongodb.org/manual/reference/connection-string/\
that included a database name'
)
parser.add_argument('-collection', type=str, help='collection name', required=True)
parser.add_argument('-track_field', type=str, default=None,
help='name of field to be used (its values must be monotonically increasing)\
it defaults to _id or ts for capped collections'
)
parser.add_argument('-projection', type=str, default=None,
help='space delimited of fields to return')
parser.add_argument('-values_only', default=False, action="store_true", help='print values only')
return parser.parse_args()
[docs]def main():
args = parse_args()
print ("starting tailing", vars(args))
client = muClient(args.connection)
assert client.db is not None
projection = args.projection.split(' ') if args.projection is not None else None
sub = Sub(client.db[args.collection], track_field=args.track_field)
q = {}
gen = sub.poll(query=q, projection=projection, start_after='last', delay_secs=1)
for doc in gen:
if args.values_only is True:
print (doc.values())
else:
print (doc)
if __name__ == "__main__":
main()