gifs/api

Paddy 2014-10-17 Child:03e846421572

7:21787ed8a185 Go to Latest

gifs/api/gifsd/etcd.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 "log"
paddy@7 5
paddy@7 6 "code.secondbit.org/gifs/api"
paddy@7 7 "github.com/coreos/go-etcd/etcd"
paddy@7 8 )
paddy@7 9
paddy@7 10 func getEtcdContext(resp *etcd.Node) (api.Context, error) {
paddy@7 11 var context api.Context
paddy@7 12 var dsn, bucket, tmpbucket, domain string
paddy@7 13 for _, node := range resp.Nodes {
paddy@7 14 switch node.Key {
paddy@7 15 case "/dsn":
paddy@7 16 dsn = node.Value
paddy@7 17 case "/bucket":
paddy@7 18 bucket = node.Value
paddy@7 19 case "/tmpbucket":
paddy@7 20 tmpbucket = node.Value
paddy@7 21 case "/domain":
paddy@7 22 domain = node.Value
paddy@7 23 }
paddy@7 24 }
paddy@7 25 if dsn != "" {
paddy@7 26 log.Println("Using PostgreSQL as our datastore.")
paddy@7 27 /*datastore, err := api.NewMySQLDatastore(dsn)
paddy@7 28 if err != nil {
paddy@7 29 return context, err
paddy@7 30 }
paddy@7 31 context.Datastore = datastore*/
paddy@7 32 panic("PostgreSQL not implemented yet.")
paddy@7 33 } else {
paddy@7 34 log.Println("Using in-memory datastore.")
paddy@7 35 context.Datastore = api.NewMemDatastore()
paddy@7 36 }
paddy@7 37 context.UsageTracker = api.NewMemTracker() // TODO: get this using influx
paddy@7 38 context.Bucket = bucket
paddy@7 39 context.TmpBucket = tmpbucket
paddy@7 40 context.RootDomain = domain
paddy@7 41 storage, err := api.NewGCSServiceStorage()
paddy@7 42 if err != nil {
paddy@7 43 log.Println("Using in-memory blob store.")
paddy@7 44 context.Storage = api.NewMemStorage()
paddy@7 45 } else {
paddy@7 46 log.Println("Using Google Cloud Storage for blob store.")
paddy@7 47 context.Storage = storage
paddy@7 48 }
paddy@7 49 return context, nil
paddy@7 50 }