Guest User

Untitled

a guest
Dec 12th, 2018
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. #!/usr/bin/env
  2. #
  3. # Requirements:
  4. # argparse==1.2.1
  5. # pymongo==2.1
  6. # redis==2.4.10
  7.  
  8. import redis
  9. import pymongo
  10. import argparse
  11. import sys
  12. import logging
  13. from datetime import datetime
  14. import time
  15.  
  16. logging.basicConfig(level=logging.DEBUG)
  17.  
  18. def transcribe(redis_host='localhost', redis_port=6379, redis_password=None, redis_db=0,\
  19. redis_channels='*', mongo_host='127.0.0.1', mongo_port=27017, mongo_user=None, \
  20. mongo_password=None, mongo_db='transcribe'):
  21. """
  22. Logs messages from Redis channels into Mongo
  23.  
  24. :keyword redis_host: Redis host/ip
  25. :keyword redis_port: Redis port
  26. :keyword redis_password: Redis password
  27. :keyword redis_db: Redis database
  28. :keyword redis_channels: Channel pattern to listen
  29. :keyword mongo_host: MongoDB host/ip
  30. :keyword mongo_port: MongoDB port
  31. :keyword mongo_user: MongoDB user
  32. :keyword mongo_password: MongoDB password
  33. :keyword mongo_db: MongoDB database
  34.  
  35. """
  36. log = logging.getLogger('core')
  37. log.debug('Connecting to Redis: {0}:{1} with db {2}'.format(redis_host, redis_port, redis_db))
  38. rds = redis.Redis(host=redis_host, port=redis_port, db=redis_db, password=redis_password)
  39. log.debug('Connecting to MongoDB: {0}:{1} with db {2} (user: {3})'.format(mongo_host, mongo_port, mongo_db, mongo_user))
  40. mgo_db = pymongo.Connection(host=mongo_host, port=mongo_port)[mongo_db]
  41. if mongo_user and mongo_password:
  42. mgo_db.authenticate(mongo_user, mongo_pass)
  43. # subscribe
  44. ps = rds.pubsub()
  45. ps.psubscribe(redis_channels)
  46. # listen
  47. log.info('Listening for messages on channels: {0}'.format(redis_channels))
  48. for m in ps.listen():
  49. data = {
  50. 'date': time.time(),
  51. 'channel': m['channel'],
  52. 'data': m['data'],
  53. }
  54. log.debug(' {0}:{1}: {2}'.format(datetime.fromtimestamp(data['date']), data['channel'], data['data']))
  55. mgo_db.messages.insert(data)
  56.  
  57. if __name__=='__main__':
  58. parser = argparse.ArgumentParser()
  59. parser.add_argument('--redis-host', action="store", dest="redis_host", default="127.0.0.1", help="Redis host/ip")
  60. parser.add_argument('--redis-port', action="store", type=int, dest="redis_port", default=6379, help="Redis port")
  61. parser.add_argument('--redis-password', action="store", dest="redis_password", default=None, help="Redis password")
  62. parser.add_argument('--redis-db', action="store", type=int, dest="redis_db", default=0, help="Redis DB")
  63. parser.add_argument('--redis-channels', action="store", dest="redis_channels", default='*', help="Redis Pub/Sub channel pattern")
  64. parser.add_argument('--mongo-host', action="store", dest="mongo_host", default='127.0.0.1', help="MongoDB host/ip")
  65. parser.add_argument('--mongo-port', action="store", type=int, dest="mongo_port", default=27017, help="MongoDB port")
  66. parser.add_argument('--mongo-user', action="store", dest="mongo_user", default=None, help="MongoDB user")
  67. parser.add_argument('--mongo-password', action="store", dest="mongo_password", default=None, help="MongoDB password")
  68. parser.add_argument('--mongo-db', action="store", dest="mongo_db", default='transcribe', help="MongoDB DB")
  69.  
  70. opts = parser.parse_args()
  71. try:
  72. transcribe(**opts.__dict__)
  73. except KeyboardInterrupt:
  74. sys.exit(0)
Add Comment
Please, Sign In to add comment