diff --git a/experimental/example/Makefile b/experimental/example/Makefile index af1d28648..7b3a69f39 100644 --- a/experimental/example/Makefile +++ b/experimental/example/Makefile @@ -14,3 +14,9 @@ goapp/app: goapp/app.go clean: rm -f qotd/*.o qotd/qotd goapp/app + +run: all + docker-compose kill || true + docker-compose rm -f || true + docker-compose build + docker-compose up -d diff --git a/experimental/example/README.md b/experimental/example/README.md index b958fe05c..46e812bb0 100644 --- a/experimental/example/README.md +++ b/experimental/example/README.md @@ -3,8 +3,7 @@ To run, ``` -make -docker-compose up -d +make run ``` # "architecture" diff --git a/experimental/example/client/Dockerfile b/experimental/example/client/Dockerfile index 06300e91f..3a2e14311 100644 --- a/experimental/example/client/Dockerfile +++ b/experimental/example/client/Dockerfile @@ -1,7 +1,7 @@ -FROM gliderlabs/alpine +FROM python:2.7 MAINTAINER Weaveworks Inc WORKDIR /home/weave -RUN apk add --update curl -ADD ./client /home/weave/ -RUN chmod u+x /home/weave/client -ENTRYPOINT ["/home/weave/client"] +ADD requirements.txt /home/weave/ +RUN pip install -r /home/weave/requirements.txt +ADD client.py /home/weave/ +ENTRYPOINT ["python", "/home/weave/client.py"] diff --git a/experimental/example/client/client b/experimental/example/client/client deleted file mode 100755 index 84b92a82f..000000000 --- a/experimental/example/client/client +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -while true; do - curl http://pyapp:5000/ - sleep 1 -done diff --git a/experimental/example/client/client.py b/experimental/example/client/client.py new file mode 100644 index 000000000..f375f404c --- /dev/null +++ b/experimental/example/client/client.py @@ -0,0 +1,29 @@ +import requests +import random +import threading +import logging +import sys + +pyapps = ['http://pyapp:5000/'] +concurrency = 5 + +def do_requests(): + while True: + try: + requests.get(random.choice(pyapps)) + except: + logging.error("Error doing request", exc_info=sys.exc_info()) + logging.info("Did request") + +def main(): + logging.info("Starting %d thread", concurrency) + threads = [threading.Thread(target=do_requests) for i in range(concurrency)] + for thread in threads: + thread.start() + for thread in threads: + thread.join() + logging.info("Exiting") + +if __name__ == "__main__": + logging.basicConfig() + main() diff --git a/experimental/example/client/requirements.txt b/experimental/example/client/requirements.txt new file mode 100644 index 000000000..3288e9274 --- /dev/null +++ b/experimental/example/client/requirements.txt @@ -0,0 +1,2 @@ +requests + diff --git a/experimental/example/pyapp/app.py b/experimental/example/pyapp/app.py index 4e01e8647..22409b463 100644 --- a/experimental/example/pyapp/app.py +++ b/experimental/example/pyapp/app.py @@ -1,6 +1,8 @@ import os import socket import requests +import random + from concurrent.futures import ThreadPoolExecutor from flask import Flask from redis import Redis @@ -9,6 +11,8 @@ app = Flask(__name__) redis = Redis(host='redis', port=6379) pool = ThreadPoolExecutor(max_workers=10) +goapps = ['http://goapp1:8080/', 'http://goapp2:8080/'] + def do_redis(): redis.incr('hits') return redis.get('hits') @@ -23,7 +27,7 @@ def do_qotd(): s.close() def do_search(): - r = requests.get('http://goapp:8080/') + r = requests.get(random.choice(goapps)) return r.text