gifs/api

Paddy 2014-10-17

7:21787ed8a185 Go to Latest

gifs/api/gifsd/server.go

Create a Dockerfile and binary. Write a Dockerfile that compiles everything and runs it. Start the binary; load a Context from etcd, and start everything running. The binary is pretty useless until we get HTTP handlers, though, obviously.

History
paddy@7 1 package main
paddy@7 2
paddy@7 3 import (
paddy@7 4 "flag"
paddy@7 5 "fmt"
paddy@7 6 "log"
paddy@7 7 "os"
paddy@7 8 "strings"
paddy@7 9
paddy@7 10 "github.com/coreos/go-etcd/etcd"
paddy@7 11 )
paddy@7 12
paddy@7 13 var (
paddy@7 14 etcdAddrs = StringArray{}
paddy@7 15 )
paddy@7 16
paddy@7 17 type StringArray []string
paddy@7 18
paddy@7 19 func (a *StringArray) Set(s string) error {
paddy@7 20 *a = append(*a, s)
paddy@7 21 return nil
paddy@7 22 }
paddy@7 23
paddy@7 24 func (a *StringArray) String() string {
paddy@7 25 return strings.Join(*a, ",")
paddy@7 26 }
paddy@7 27
paddy@7 28 func main() {
paddy@7 29 flag.Var(&etcdAddrs, "etcd-address", "address to the etcd server (may be specified more than once)")
paddy@7 30 flag.Parse()
paddy@7 31 if len(etcdAddrs) < 1 {
paddy@7 32 if os.Getenv("ETCD_NAME") != "" {
paddy@7 33 etcdAddrs = []string{"http://etcd:" + os.Getenv("ETCD_PORT_4001_TCP_PORT") + "/"}
paddy@7 34 } else {
paddy@7 35 flag.Usage()
paddy@7 36 return
paddy@7 37 }
paddy@7 38 }
paddy@7 39 log.Println("Using etcd servers", etcdAddrs)
paddy@7 40 client := etcd.NewClient(etcdAddrs)
paddy@7 41 resp, err := client.Get("/code.secondbit.org/gifs/api/", false, true)
paddy@7 42 if err != nil {
paddy@7 43 log.Fatalln(err)
paddy@7 44 return
paddy@7 45 }
paddy@7 46 context, err := getEtcdContext(resp.Node)
paddy@7 47 if err != nil {
paddy@7 48 log.Fatalln(err)
paddy@7 49 return
paddy@7 50 }
paddy@7 51 err = context.Validate()
paddy@7 52 if err != nil {
paddy@7 53 log.Fatalln(err)
paddy@7 54 return
paddy@7 55 }
paddy@7 56 listenAddr := ":8080"
paddy@7 57 for _, node := range resp.Node.Nodes {
paddy@7 58 if node.Key == "/listen_addr" {
paddy@7 59 listenAddr = node.Value
paddy@7 60 fmt.Println("Set listenAddr to " + node.Value)
paddy@7 61 break
paddy@7 62 }
paddy@7 63 }
paddy@7 64 log.Println("Going to listen on", listenAddr)
paddy@7 65
paddy@7 66 /*
paddy@7 67 var router *mux.Router
paddy@7 68 if context.RootDomain == "" {
paddy@7 69 fmt.Println("Using path muxer")
paddy@7 70 router = api.GetPathMuxer(context)
paddy@7 71 } else {
paddy@7 72 fmt.Println("Using domain muxer")
paddy@7 73 router = api.GetDomainMuxer(context)
paddy@7 74 }
paddy@7 75 http.Handle("/", router)
paddy@7 76 fmt.Println("Listening on " + listenAddr)
paddy@7 77 err = http.ListenAndServe(listenAddr, nil)
paddy@7 78 if err != nil {
paddy@7 79 panic(err)
paddy@7 80 }
paddy@7 81 */
paddy@7 82 }