9 "github.com/coreos/go-systemd/daemon"
13 httpServer *http.Server
16 eventSource *pgEventSource
20 func (srv *server) Close() {
22 srv.eventSource.Close()
26 func (srv *server) WaitReady() {
27 srv.setupOnce.Do(srv.setup)
28 srv.eventSource.WaitReady()
31 func (srv *server) Run() error {
32 srv.setupOnce.Do(srv.setup)
33 return srv.httpServer.Serve(srv.listener)
36 func (srv *server) setup() {
39 ln, err := net.Listen("tcp", srv.wsConfig.Listen)
41 log.WithField("Listen", srv.wsConfig.Listen).Fatal(err)
43 log.WithField("Listen", ln.Addr().String()).Info("listening")
46 srv.eventSource = &pgEventSource{
47 DataSource: srv.wsConfig.Postgres.ConnectionString(),
48 MaxOpenConns: srv.wsConfig.PostgresPool,
49 QueueSize: srv.wsConfig.ServerEventQueue,
51 srv.httpServer = &http.Server{
52 Addr: srv.wsConfig.Listen,
53 ReadTimeout: time.Minute,
54 WriteTimeout: time.Minute,
55 MaxHeaderBytes: 1 << 20,
58 eventSource: srv.eventSource,
59 newPermChecker: func() permChecker { return newPermChecker(srv.wsConfig.Client) },
65 log.Info("event source stopped")
69 if _, err := daemon.SdNotify(false, "READY=1"); err != nil {
70 log.WithError(err).Warn("error notifying init daemon")