app.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from flask import Flask, render_template, request, make_response, g
  2. from redis import Redis
  3. import os
  4. import socket
  5. import random
  6. import json
  7. import logging
  8. option_a = os.getenv('OPTION_A', "Cats")
  9. option_b = os.getenv('OPTION_B', "Dogs")
  10. hostname = socket.gethostname()
  11. app = Flask(__name__)
  12. gunicorn_error_logger = logging.getLogger('gunicorn.error')
  13. app.logger.handlers.extend(gunicorn_error_logger.handlers)
  14. app.logger.setLevel(logging.INFO)
  15. def get_redis():
  16. if not hasattr(g, 'redis'):
  17. g.redis = Redis(host="redis", db=0, socket_timeout=5)
  18. return g.redis
  19. @app.route("/", methods=['POST','GET'])
  20. def hello():
  21. voter_id = request.cookies.get('voter_id')
  22. if not voter_id:
  23. voter_id = hex(random.getrandbits(64))[2:-1]
  24. vote = None
  25. if request.method == 'POST':
  26. redis = get_redis()
  27. vote = request.form['vote']
  28. app.logger.info('Received vote for %s', vote)
  29. data = json.dumps({'voter_id': voter_id, 'vote': vote})
  30. redis.rpush('votes', data)
  31. resp = make_response(render_template(
  32. 'index.html',
  33. option_a=option_a,
  34. option_b=option_b,
  35. hostname=hostname,
  36. vote=vote,
  37. ))
  38. resp.set_cookie('voter_id', voter_id)
  39. return resp
  40. if __name__ == "__main__":
  41. app.run(host='0.0.0.0', port=80, debug=True, threaded=True)