Esempio n. 1
0
func (this *httpRequest) writePrefix(srvr *server.Server, signature value.Value) bool {
	return this.writeString("{\n") &&
		this.writeRequestID() &&
		this.writeClientContextID() &&
		this.writeSignature(srvr.Signature(), signature) &&
		this.writeString(",\n    \"results\": [")
}
Esempio n. 2
0
func Run(mockServer *server.Server, q string) ([]interface{}, []errors.Error, errors.Error) {
	var metrics value.Tristate
	scanConfiguration := &scanConfigImpl{}

	base := server.NewBaseRequest(q, nil, nil, nil, "json", 0, value.FALSE, metrics, value.TRUE, scanConfiguration, "", nil)

	mr := &MockResponse{
		results: []interface{}{}, warnings: []errors.Error{}, done: make(chan bool),
	}

	query := &MockQuery{
		BaseRequest: *base,
		response:    mr,
	}

	select {
	case mockServer.Channel() <- query:
		// Wait until the request exits.
		<-query.CloseNotify()
	default:
		// Timeout.
		return nil, nil, errors.NewError(nil, "Query timed out")
	}

	// wait till all the results are ready
	<-mr.done
	return mr.results, mr.warnings, mr.err
}
Esempio n. 3
0
func (this *httpRequest) Execute(srvr *server.Server, signature value.Value, stopNotify chan bool) {
	defer this.stopAndClose(server.COMPLETED)

	this.NotifyStop(stopNotify)

	this.setHttpCode(http.StatusOK)
	_ = this.writePrefix(srvr, signature) &&
		this.writeResults()
	this.writeSuffix(srvr.Metrics(), "")
	this.writer.noMoreData()
}
Esempio n. 4
0
func (this *httpRequest) Failed(srvr *server.Server) {
	defer this.stopAndClose(server.FATAL)

	this.writeString("{\n")
	this.writeRequestID()
	this.writeClientContextID()
	this.writeErrors()
	this.writeWarnings()
	this.writeState("")
	this.writeMetrics(srvr.Metrics())
	this.writeString("\n}\n")
	this.writer.noMoreData()
}
Esempio n. 5
0
func (this *httpRequest) Execute(srvr *server.Server, signature value.Value, stopNotify chan bool) {
	this.NotifyStop(stopNotify)

	this.setHttpCode(http.StatusOK)
	_ = this.writePrefix(srvr, signature) &&
		this.writeResults()

	state := this.State()
	this.writeSuffix(srvr.Metrics(), state)
	this.writer.noMoreData()
	if state != server.TIMEOUT {
		this.stopAndClose(server.COMPLETED)
	} else {
		this.Close()
	}
}
Esempio n. 6
0
func NewServiceEndpoint(srv *server.Server, staticPath string, metrics bool,
	httpAddr, httpsAddr, certFile, keyFile string) *HttpEndpoint {
	rv := &HttpEndpoint{
		server:    srv,
		metrics:   metrics,
		httpAddr:  httpAddr,
		httpsAddr: httpsAddr,
		certFile:  certFile,
		keyFile:   keyFile,
		bufpool:   NewSyncPool(srv.KeepAlive()),
		actives:   NewActiveRequests(),
	}

	server.SetActives(rv.actives)

	rv.registerHandlers(staticPath)
	return rv
}
Esempio n. 7
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})
	}
}
Esempio n. 8
0
func NewServiceEndpoint(server *server.Server, staticPath string, metrics bool,
	httpAddr, httpsAddr, certFile, keyFile string) *HttpEndpoint {
	rv := &HttpEndpoint{
		server:    server,
		metrics:   metrics,
		httpAddr:  httpAddr,
		httpsAddr: httpsAddr,
		certFile:  certFile,
		keyFile:   keyFile,
		bufpool:   NewSyncPool(server.KeepAlive()),
	}

	rv.registerHandlers(staticPath)
	return rv
}
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
}