Files
weave-scope/extras/example/app/app.py
Jonathan Lange 1c440486f0 Delete experimental, replace with 'extras'
extras contains fixprobe and example, and ought to build properly
2016-07-07 14:30:08 +01:00

86 lines
2.4 KiB
Python

import os
import socket
import sys
import requests
import random
import threading
import logging
import argparse
from concurrent.futures import ThreadPoolExecutor
from flask import Flask
from redis import Redis
from werkzeug.serving import WSGIRequestHandler
app = Flask(__name__)
redis = Redis(host='redis', port=6379)
pool = ThreadPoolExecutor(max_workers=10)
sessions = threading.local()
args = None
def do_redis():
redis.incr('hits')
return redis.get('hits')
def do_qotd():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.settimeout(args.timeout)
s.connect((args.qotd, 4446))
s.send("Hello")
return s.recv(1024)
finally:
s.close()
def do_search():
if getattr(sessions, 'session', None) == None:
sessions.session = requests.Session()
r = sessions.session.get(args.search, timeout=args.timeout)
return r.text
def do_echo(text):
if getattr(sessions, 'session', None) == None:
sessions.session = requests.Session()
r = sessions.session.get(args.echo, data=text, timeout=args.timeout)
return r.text
def ignore_error(f):
try:
return str(f())
except:
logging.error("Error executing function", exc_info=sys.exc_info())
return "Error"
# this root is for the tracing demo
@app.route('/hello')
def hello():
qotd_msg = do_qotd()
qotd_msg = do_echo(qotd_msg)
return qotd_msg
# this is for normal demos
@app.route('/')
def root():
counter_future = pool.submit(do_redis)
search_future = pool.submit(do_search)
qotd_future = pool.submit(do_qotd)
echo_future = pool.submit(lambda: do_echo("foo"))
result = 'Hello World! I have been seen %s times.' % ignore_error(counter_future.result)
result += ignore_error(search_future.result)
result += ignore_error(qotd_future.result)
result += ignore_error(echo_future.result)
return result
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-redis', default="redis.weave.local")
parser.add_argument('-search', default="http://search.weave.local:80/")
parser.add_argument('-qotd', default="qotd.weave.local")
parser.add_argument('-echo', default="http://echo.weave.local:80/")
parser.add_argument('-timeout', default=0.5, type=float)
args = parser.parse_args()
logging.basicConfig(format='%(asctime)s %(levelname)s %(filename)s:%(lineno)d - %(message)s', level=logging.INFO)
WSGIRequestHandler.protocol_version = "HTTP/1.1"
app.run(host="0.0.0.0", port=80, debug=True)