package main import ( "flag" "fmt" "net/http" "os" "os/signal" "syscall" "git.fromouter.space/Artificiale/moa/sd" "github.com/go-kit/kit/log" svc "git.abbiamoundominio.org/hamcha/bacheca" ) func main() { httpPort := flag.Int("http.port", 8080, "HTTP listen port") consulAddr := flag.String("consul.addr", "consul:8500", "Consul address") flag.Parse() var logger log.Logger { logger = log.NewLogfmtLogger(os.Stderr) logger = log.With(logger, "ts", log.DefaultTimestampUTC) logger = log.With(logger, "caller", log.DefaultCaller) } s := svc.MakeService() handler := svc.MakeHTTPHandler(s, logger) // Register with consul registrar := sd.Register(*consulAddr, sd.Options{ Name: "bacheca", Advertise: fmt.Sprintf("bacheca:%d", *httpPort), Tags: []string{ "http", // Expose via HTTP "match-path:events", // Publish at /events/* "private", // All APIs are private.. "public:/feed", // ..except /feed }, }, logger) defer registrar.Deregister() errs := make(chan error) go func() { c := make(chan os.Signal) signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) errs <- fmt.Errorf("%s", <-c) }() go func() { bind := fmt.Sprintf(":%d", *httpPort) logger.Log("transport", "HTTP", "addr", bind) errs <- http.ListenAndServe(bind, handler) }() logger.Log("exit", <-errs) }