mirror of
https://github.com/weaveworks/scope.git
synced 2026-02-14 18:09:59 +00:00
86 lines
2.4 KiB
Python
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)
|