github.com/sbuss/deis@v1.6.1/logger/drain/drain.go (about) 1 package drain 2 3 import ( 4 "fmt" 5 "log" 6 "net" 7 "net/url" 8 "os" 9 10 "github.com/coreos/go-etcd/etcd" 11 ) 12 13 func GetDrain() string { 14 host := getopt("HOST", "127.0.0.1") 15 16 etcdPort := getopt("ETCD_PORT", "4001") 17 etcdPath := getopt("ETCD_PATH", "/deis/logs") 18 19 client := etcd.NewClient([]string{"http://" + host + ":" + etcdPort}) 20 21 s, err := client.Get(etcdPath+"/drain", true, false) 22 if err != nil { 23 return "" 24 } 25 26 return s.Node.Value 27 } 28 29 func SendToDrain(m string, drain string) error { 30 u, err := url.Parse(drain) 31 if err != nil { 32 log.Fatal(err) 33 } 34 uri := u.Host + u.Path 35 switch u.Scheme { 36 case "syslog": 37 sendToSyslogDrain(m, uri) 38 default: 39 log.Println(u.Scheme + " drain type is not implemented.") 40 } 41 return nil 42 } 43 44 func sendToSyslogDrain(m string, drain string) error { 45 conn, err := net.Dial("udp", drain) 46 if err != nil { 47 log.Fatal(err) 48 } 49 defer conn.Close() 50 fmt.Fprintf(conn, m) 51 return nil 52 } 53 54 func getopt(name, dfault string) string { 55 value := os.Getenv(name) 56 if value == "" { 57 value = dfault 58 } 59 return value 60 }