Added a new command 'weave status', implemented via an http listener #11
This commit is contained in:
1 parent
81e8a9b987
commit
a113da0e34
4 files changed
+60
-5
No files matched your search
@@ -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
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
package weave
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
/* A simple http responder that will show the status of the router when asked,
|
||||
e.g. via http://172.17.0.2/status
|
||||
*/
|
||||
type HttpStatusResponder struct {
|
||||
router *Router
|
||||
}
|
||||
|
||||
func NewHttpStatusResponder(router *Router) *HttpStatusResponder {
|
||||
resp := &HttpStatusResponder{router}
|
||||
return resp
|
||||
}
|
||||
|
||||
func (resp *HttpStatusResponder) SetRouter(newRouter *Router) {
|
||||
resp.router = newRouter
|
||||
}
|
||||
|
||||
func (resp *HttpStatusResponder) ListenAndServe() {
|
||||
http.HandleFunc("/status", func(w http.ResponseWriter, r *http.Request) {
|
||||
if resp.router != nil {
|
||||
fmt.Fprint(w, resp.router.Status())
|
||||
} else {
|
||||
fmt.Fprintf(w, "Not initialized")
|
||||
}
|
||||
})
|
||||
address := fmt.Sprintf(":%d", StatusPort)
|
||||
http.ListenAndServe(address, nil)
|
||||
}
|
||||
+4
-2
@@ -1,7 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/zettio/weave"
|
||||
"github.com/bboreham/weave"
|
||||
"code.google.com/p/gopacket/layers"
|
||||
"crypto/sha256"
|
||||
"flag"
|
||||
@@ -70,7 +70,7 @@ func main() {
|
||||
flag.IntVar(&bufSz, "bufsz", 8, "capture buffer size in MB (defaults to 8MB)")
|
||||
flag.Parse()
|
||||
peers = flag.Args()
|
||||
|
||||
|
||||
if ifaceName == "" {
|
||||
fmt.Println("Missing required parameter 'iface'")
|
||||
os.Exit(1)
|
||||
@@ -123,6 +123,8 @@ func main() {
|
||||
}
|
||||
}()
|
||||
}
|
||||
httpResponder := weave.NewHttpStatusResponder(router)
|
||||
go httpResponder.ListenAndServe()
|
||||
handleSignals(router)
|
||||
}
|
||||
|
||||
|
||||
+21
-3
@@ -13,10 +13,14 @@ usage() {
|
||||
echo "Usage:"
|
||||
echo "weave <ipaddr>/<subnet> launch [-passwd <passwd>] <peer_host> ..."
|
||||
echo "weave <ipaddr>/<subnet> run <docker run args> ..."
|
||||
echo "weave status"
|
||||
exit 1
|
||||
}
|
||||
|
||||
shift 2 || usage
|
||||
if [ "$#" -lt 1 ]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ `id -u` = 0 ] || {
|
||||
echo "weave must be run as 'root'"
|
||||
@@ -46,10 +50,25 @@ MACADDR=`cat /sys/class/net/$BRIDGE/address`
|
||||
|
||||
case "$COMMAND" in
|
||||
launch)
|
||||
shift 2
|
||||
CONTAINER=$(docker run --privileged -d --name=weave -p 6783:6783/tcp -p 6783:6783/udp $WEAVE_DOCKER_ARGS zettio/weave -name $MACADDR "$@")
|
||||
IFACE=eth0
|
||||
;;
|
||||
status)
|
||||
DOCKERIP=$(docker inspect --format='{{ .NetworkSettings.IPAddress }}' weave)
|
||||
if command -v wget >/dev/null 2>&1 ; then
|
||||
wget -O - -q $DOCKERIP:6784/status
|
||||
elif command -v curl >/dev/null 2>&1 ; then
|
||||
curl $DOCKERIP:6784/status
|
||||
else
|
||||
echo "weave status needs either curl or wget to function" >&2
|
||||
exit 1
|
||||
fi
|
||||
# return the status from the wget or curl command, so if they fail then we fail.
|
||||
exit $?
|
||||
;;
|
||||
run)
|
||||
shift 2
|
||||
CONTAINER=$(docker run -d "$@")
|
||||
IFACE=$CONTAINER_IFNAME
|
||||
;;
|
||||
@@ -87,8 +106,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 ]
|
||||
then
|
||||
if command -v ethtool >/dev/null 2>&1 ; then
|
||||
ip netns exec $NSPID ethtool -K $IFACE tx off > /dev/null
|
||||
else
|
||||
echo "Cannot find ethtool; continuing without it" >&2
|
||||
|
||||
Reference in new issue
Block a user