聊聊storagetapper的server

本文主要研究一下storagetapper的server

server

storagetapper/server/server.go

var server *http.Server
var mutex = sync.Mutex{}

func init() {
	http.HandleFunc("/health", healthCheck)
	http.HandleFunc("/schema", schemaCmd)
	http.HandleFunc("/cluster", clusterInfoCmd)
	http.HandleFunc("/table", tableCmd)
	http.HandleFunc("/config", configCmd)
	http.HandleFunc("/", indexCmd)
}

//StartHTTPServer starts listening and serving traffic on configured port and sets up http routes.
func StartHTTPServer(port int) {
	state.EmitRegisteredTablesCount()
	mutex.Lock()

	server = &http.Server{Addr: fmt.Sprintf(":%d", port), Handler: nil}
	log.Debugf("HTTP server is listening on %v port", port)

	mutex.Unlock()

	err := server.ListenAndServe()
	if err != nil && err != http.ErrServerClosed {
		log.E(err)
	}
}

//Shutdown gracefully stops the server
func Shutdown() {
	mutex.Lock()
	defer mutex.Unlock()
	if server == nil {
		return
	}
	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()
	log.E(server.Shutdown(ctx))
	server = nil
}

storagetapper的server提供了StartHTTPServer、Shutdown方法;其init方法註冊了/health/schema/cluster/table/config/這幾個url

healthCheck

storagetapper/server/server.go

//healthCheck handles call to the health check endpoint
func healthCheck(w http.ResponseWriter, r *http.Request) {
	w.Header().Add("Content-Type", "text/plain")
	w.WriteHeader(http.StatusOK)
	if _, err := w.Write([]byte("OK")); err != nil {
		log.Errorf("Health check failed: %s\n", err)
	}
}

healthCheck返回200,文本內容爲OK

小結

storagetapper的server提供了StartHTTPServer、Shutdown方法;其init方法註冊了/health/schema/cluster/table/config/這幾個url。

doc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章