Merge pull request #17 from bboreham/11_http_interface

add 'weave status'

closes issue #11
This commit is contained in:
rade committed 2014-09-04 15:33:10 +01:00
commit acfefed142
4 files changed
+43 -7

No files matched your search

+2 -5
View File
@@ -349,12 +349,9 @@ The log verbosity can be increased by supplying the `-debug` flag when
launching weave. Be warned, this will log information on a per-packet
basis, so can produce a lot of output.
One can ask a weave router to log a status report by sending it a USR1
signal, e.g.
One can ask a weave router to report its status with
kill -USR1 `docker inspect --format='{{ .State.Pid }}' weave`
and then inspect the logs.
weave status
## Installation with Boot2Docker
+1
View File
@@ -10,6 +10,7 @@ const (
EthernetOverhead = 14
UDPOverhead = 28 // 20 bytes for IPv4, 8 bytes for UDP
Port = 6783
StatusPort = Port + 1
DefaultPMTU = 65535
MaxUDPPacketSize = 65536
ChannelSize = 16
+15
View File
@@ -6,9 +6,11 @@ import (
"crypto/sha256"
"flag"
"fmt"
"io"
"github.com/davecheney/profile"
"log"
"net"
"net/http"
"os"
"os/signal"
"runtime"
@@ -129,9 +131,22 @@ func main() {
}
}()
}
go handleHttp(router)
handleSignals(router)
}
func handleHttp(router *weave.Router) {
http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, router.Status())
})
address := fmt.Sprintf(":%d", weave.StatusPort)
err := http.ListenAndServe(address, nil)
if err != nil {
log.Fatal("Unable to create http listener: ", err)
}
}
func handleSignals(router *weave.Router) {
sigs := make(chan os.Signal, 1)
signal.Notify(sigs, syscall.SIGQUIT, syscall.SIGUSR1)
+25 -2
View File
@@ -7,10 +7,17 @@ usage() {
echo "weave run <ipaddr>/<subnet> <docker run args> ..."
echo "weave expose <ipaddr>/<subnet>"
echo "weave hide <ipaddr>/<subnet>"
echo "weave status"
echo "weave stop"
exit 1
}
# utility function to check whether a command can be executed by the shell
# see http://stackoverflow.com/questions/592620/how-to-check-if-a-program-exists-from-a-bash-script
command_exists () {
command -v $1 >/dev/null 2>&1
}
[ `id -u` = 0 ] || {
echo "weave must be run as 'root'"
exit 1
@@ -71,6 +78,22 @@ case "$COMMAND" in
echo $CONTAINER
IFACE=eth0
;;
status)
DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' weave)
if [ -z "$DOCKERIP" ] ; then
echo "The weave container is not running." >&2
exit 1
fi
if command_exists wget ; then
wget -O - -q $DOCKERIP:6784/status
elif command_exists curl ; then
curl $DOCKERIP:6784/status
else
echo "Cannot find wget or curl. Install one of them for 'weave status' to function." >&2
exit 1
fi
exit 0
;;
run)
[ $# -gt 0 ] || usage
IPADDR=$1
@@ -103,7 +126,7 @@ case "$COMMAND" in
stop)
docker kill weave > /dev/null
docker rm weave > /dev/null
if command -v conntrack >/dev/null 2>&1
if command_exists conntrack
then
conntrack -D -p udp --dport 6783 >/dev/null 2>&1
else
@@ -145,7 +168,7 @@ ip netns exec $NSPID ip link set $GUEST_IFNAME name $CONTAINER_IFNAME
ip netns exec $NSPID ip addr add $IPADDR dev $CONTAINER_IFNAME
ip netns exec $NSPID ip link set $CONTAINER_IFNAME up
if command -v ethtool >/dev/null 2>&1
if command_exists ethtool
then
ip netns exec $NSPID ethtool -K $IFACE tx off > /dev/null
else