func fillSettings(settings map[string]interface{}, srvr *server.Server) map[string]interface{} {
	settings[_CPUPROFILE] = srvr.CpuProfile()
	settings[_MEMPROFILE] = srvr.MemProfile()
	settings[_SERVICERS] = srvr.Servicers()
	settings[_SCANCAP] = srvr.ScanCap()
	settings[_REQUESTSIZECAP] = srvr.RequestSizeCap()
	settings[_DEBUG] = srvr.Debug()
	settings[_PIPELINEBATCH] = srvr.PipelineBatch()
	settings[_PIPELINECAP] = srvr.PipelineCap()
	settings[_MAXPARALLELISM] = srvr.MaxParallelism()
	settings[_TIMEOUT] = srvr.Timeout()
	settings[_KEEPALIVELENGTH] = srvr.KeepAlive()
	settings[_LOGLEVEL] = srvr.LogLevel()
	return settings
}
Example #2
0
// signalCatcher blocks until a signal is recieved and then takes appropriate action
func signalCatcher(server *server.Server, endpoint *http.HttpEndpoint) {
	sig_chan := make(chan os.Signal, 4)
	signal.Notify(sig_chan, os.Interrupt, syscall.SIGTERM)

	var s os.Signal
	select {
	case s = <-sig_chan:
	}
	if server.CpuProfile() != "" {
		logging.Infop("Stopping CPU profile")
		pprof.StopCPUProfile()
	}
	if server.MemProfile() != "" {
		f, err := os.Create(server.MemProfile())
		if err != nil {
			logging.Errorp("Cannot create memory profile file", logging.Pair{"error", err})
		} else {

			logging.Infop("Writing  Memory profile")
			pprof.WriteHeapProfile(f)
			f.Close()
		}
	}
	if s == os.Interrupt {
		// Interrupt (ctrl-C) => Immediate (ungraceful) exit
		logging.Infop("Shutting down immediately")
		os.Exit(0)
	}
	logging.Infop("Attempting graceful exit")
	// Stop accepting new requests
	err := endpoint.Close()
	if err != nil {
		logging.Errorp("error closing http listener", logging.Pair{"err", err})
	}
	err = endpoint.CloseTLS()
	if err != nil {
		logging.Errorp("error closing https listener", logging.Pair{"err", err})
	}
}