// Published creates a wrapper for net.Listener that // publishes connection stats. func Published(l net.Listener, countTag, acceptTag string) net.Listener { return &CountingListener{ Listener: l, ConnCount: stats.NewInt(countTag), ConnAccept: stats.NewInt(acceptTag), } }
func Init() { mu.Lock() defer mu.Unlock() if inited { log.Critical("servenv.Init called second time") } inited = true // Once you run as root, you pretty much destroy the chances of a // non-privileged user starting the program correctly. if uid := os.Getuid(); uid == 0 { log.Critical("servenv.Init: running this as root makes no sense") } runtime.MemProfileRate = *memProfileRate gomaxprocs := os.Getenv("GOMAXPROCS") if gomaxprocs == "" { gomaxprocs = "1" } // We used to set this limit directly, but you pretty much have to // use a root account to allow increasing a limit reliably. Dropping // privileges is also tricky. The best strategy is to make a shell // script set up the limits as root and switch users before starting // the server. fdLimit := &syscall.Rlimit{} if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, fdLimit); err != nil { log.Error("max-open-fds failed: %v", err) } fdl := stats.NewInt("MaxFds") fdl.Set(int64(fdLimit.Cur)) if err := exportBinaryVersion(); err != nil { log.Critical("servenv.Init: exportBinaryVersion: %v", err) } onInitHooks.Fire() }
"net/http" "time" "github.com/senarukana/rationaldb/log" rpc "github.com/senarukana/rationaldb/rpcplus" "github.com/senarukana/rationaldb/rpcwrap/auth" "github.com/senarukana/rationaldb/rpcwrap/proto" "github.com/senarukana/rationaldb/util/stats" ) const ( connected = "200 Connected to Go RPC" ) var ( connCount = stats.NewInt("connection-count") connAccepted = stats.NewInt("connection-accepted") ) type ClientCodecFactory func(conn io.ReadWriteCloser) rpc.ClientCodec type BufferedConnection struct { isClosed bool *bufio.Reader io.WriteCloser } func NewBufferedConnection(conn io.ReadWriteCloser) *BufferedConnection { connCount.Add(1) connAccepted.Add(1) return &BufferedConnection{false, bufio.NewReader(conn), conn}