mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-03 18:20:27 +00:00
Link together all the containers in the example app.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
FROM gliderlabs/alpine
|
||||
MAINTAINER Weaveworks Inc <help@weave.works>
|
||||
WORKDIR /home/weave
|
||||
RUN apk add --update curl
|
||||
ADD ./client /home/weave/
|
||||
RUN chmod u+x /home/weave/client
|
||||
ENTRYPOINT ["/home/weave/client"]
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
while true; do echo "foo" | nc qotd 4446; sleep 1; done
|
||||
while true; do
|
||||
curl http://pyapp:5000/
|
||||
sleep 1
|
||||
done
|
||||
|
||||
@@ -2,21 +2,25 @@ client:
|
||||
build: client
|
||||
links:
|
||||
- qotd
|
||||
- pyapp
|
||||
pyapp:
|
||||
build: pyapp
|
||||
ports:
|
||||
- "5000"
|
||||
links:
|
||||
- qotd
|
||||
- redis
|
||||
- goapp
|
||||
qotd:
|
||||
build: qotd
|
||||
expose:
|
||||
- "4446"
|
||||
pyapp:
|
||||
build: pyapp
|
||||
ports:
|
||||
- "5000:5000"
|
||||
links:
|
||||
- redis
|
||||
- qotd
|
||||
redis:
|
||||
image: redis
|
||||
goapp:
|
||||
build: goapp
|
||||
ports:
|
||||
- "8080"
|
||||
links:
|
||||
- elasticsearch1
|
||||
- elasticsearch2
|
||||
|
||||
@@ -15,13 +15,11 @@ import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var (
|
||||
addr = flag.String("addr", ":8080", "HTTP listen address")
|
||||
rate = flag.Duration("rate", 3*time.Second, "request rate")
|
||||
)
|
||||
flag.Parse()
|
||||
|
||||
@@ -45,7 +43,9 @@ func main() {
|
||||
|
||||
var reads uint64
|
||||
|
||||
http.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
|
||||
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
log.Printf("Handling %v", r)
|
||||
read(targets, &reads)
|
||||
fmt.Fprintf(w, "%s %d", hostname, atomic.LoadUint64(&reads))
|
||||
})
|
||||
|
||||
@@ -56,31 +56,24 @@ func main() {
|
||||
errc <- http.ListenAndServe(*addr, nil)
|
||||
}()
|
||||
|
||||
go func() {
|
||||
errc <- read(targets, *rate, &reads)
|
||||
}()
|
||||
|
||||
go func() {
|
||||
errc <- interrupt()
|
||||
}()
|
||||
|
||||
log.Printf("%s", <-errc)
|
||||
log.Printf("%v", <-errc)
|
||||
}
|
||||
|
||||
func read(targets []string, rate time.Duration, reads *uint64) error {
|
||||
for range time.Tick(rate) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(len(targets))
|
||||
for _, target := range targets {
|
||||
go func(target string) {
|
||||
get(target)
|
||||
atomic.AddUint64(reads, 1)
|
||||
wg.Done()
|
||||
}(target)
|
||||
}
|
||||
wg.Wait()
|
||||
func read(targets []string, reads *uint64) {
|
||||
var wg sync.WaitGroup
|
||||
wg.Add(len(targets))
|
||||
for _, target := range targets {
|
||||
go func(target string) {
|
||||
get(target)
|
||||
atomic.AddUint64(reads, 1)
|
||||
wg.Done()
|
||||
}(target)
|
||||
}
|
||||
return nil
|
||||
wg.Wait()
|
||||
}
|
||||
|
||||
func get(target string) {
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
#!/bin/sh
|
||||
/home/weave/app elasticsearch1 elasticsearch2
|
||||
exec /home/weave/app elasticsearch1 elasticsearch2
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
FROM python:2.7
|
||||
MAINTAINER Weaveworks Inc <help@weave.works>
|
||||
ADD . /home/weave
|
||||
WORKDIR /home/weave
|
||||
ADD requirements.txt /home/weave/
|
||||
RUN pip install -r /home/weave/requirements.txt
|
||||
ADD app.py /home/weave/
|
||||
ENTRYPOINT ["python", "/home/weave/app.py"]
|
||||
|
||||
@@ -1,15 +1,41 @@
|
||||
import os
|
||||
|
||||
import socket
|
||||
import requests
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from flask import Flask
|
||||
from redis import Redis
|
||||
|
||||
app = Flask(__name__)
|
||||
redis = Redis(host='redis', port=6379)
|
||||
pool = ThreadPoolExecutor(max_workers=10)
|
||||
|
||||
def do_redis():
|
||||
redis.incr('hits')
|
||||
return redis.get('hits')
|
||||
|
||||
def do_qotd():
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
try:
|
||||
s.connect(("qotd", 4446))
|
||||
s.send("Hello")
|
||||
return s.recv(1024)
|
||||
finally:
|
||||
s.close()
|
||||
|
||||
def do_search():
|
||||
r = requests.get('http://goapp:8080/')
|
||||
return r.text
|
||||
|
||||
|
||||
@app.route('/')
|
||||
def hello():
|
||||
redis.incr('hits')
|
||||
return 'Hello World! I have been seen %s times.' % redis.get('hits')
|
||||
counter_future = pool.submit(do_redis)
|
||||
search_future = pool.submit(do_search)
|
||||
qotd_future = pool.submit(do_qotd)
|
||||
result = 'Hello World! I have been seen %s times.' % counter_future.result()
|
||||
result += search_future.result()
|
||||
result += qotd_future.result()
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", debug=True)
|
||||
|
||||
@@ -2,4 +2,3 @@ flask
|
||||
redis
|
||||
requests
|
||||
futures
|
||||
requests-futures
|
||||
|
||||
@@ -14,11 +14,13 @@ void *thread_func(void *sock) {
|
||||
|
||||
printf("I'm thread %d\n", syscall(SYS_gettid));
|
||||
|
||||
if (read(sockfd, buffer, sizeof(buffer), 0) < 0) {
|
||||
if (read(sockfd, buffer, sizeof(buffer)) < 0) {
|
||||
perror("ERROR reading from socket");
|
||||
return;
|
||||
}
|
||||
|
||||
sleep(1);
|
||||
|
||||
clientfd = socket(AF_INET, SOCK_STREAM, 0);
|
||||
if (clientfd < 0) {
|
||||
perror("ERROR opening socket");
|
||||
|
||||
Reference in New Issue
Block a user