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  }