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\": [") }
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 }
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() }
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() }
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() } }
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 }
// 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}) } }
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 }