1 // Copyright 2011 Google Inc. All rights reserved. 2 // Use of this source code is governed by the Apache 2.0 3 // license that can be found in the LICENSE file. 4 5 // +build !appengine 6 7 package internal 8 9 import ( 10 "io" 11 "log" 12 "net/http" 13 "net/url" 14 "os" 15 ) 16 17 func Main() { 18 installHealthChecker(http.DefaultServeMux) 19 20 port := "8080" 21 if s := os.Getenv("PORT"); s != "" { 22 port = s 23 } 24 25 host := "" 26 if IsDevAppServer() { 27 host = "127.0.0.1" 28 } 29 if err := http.ListenAndServe(host+":"+port, http.HandlerFunc(handleHTTP)); err != nil { 30 log.Fatalf("http.ListenAndServe: %v", err) 31 } 32 } 33 34 func installHealthChecker(mux *http.ServeMux) { 35 // If no health check handler has been installed by this point, add a trivial one. 36 const healthPath = "/_ah/health" 37 hreq := &http.Request{ 38 Method: "GET", 39 URL: &url.URL{ 40 Path: healthPath, 41 }, 42 } 43 if _, pat := mux.Handler(hreq); pat != healthPath { 44 mux.HandleFunc(healthPath, func(w http.ResponseWriter, r *http.Request) { 45 io.WriteString(w, "ok") 46 }) 47 } 48 } 49