mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 03:02:26 -06:00 
			
		
		
		
	
		
			
	
	
		
			70 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			70 lines
		
	
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								// Copyright 2011 Google Inc. All rights reserved.
							 | 
						||
| 
								 | 
							
								// Use of this source code is governed by the Apache 2.0
							 | 
						||
| 
								 | 
							
								// license that can be found in the LICENSE file.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// +build !appengine
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								package internal
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import (
							 | 
						||
| 
								 | 
							
									"io"
							 | 
						||
| 
								 | 
							
									"log"
							 | 
						||
| 
								 | 
							
									"net/http"
							 | 
						||
| 
								 | 
							
									"net/url"
							 | 
						||
| 
								 | 
							
									"os"
							 | 
						||
| 
								 | 
							
									"path/filepath"
							 | 
						||
| 
								 | 
							
									"runtime"
							 | 
						||
| 
								 | 
							
								)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func Main() {
							 | 
						||
| 
								 | 
							
									MainPath = filepath.Dir(findMainPath())
							 | 
						||
| 
								 | 
							
									installHealthChecker(http.DefaultServeMux)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									port := "8080"
							 | 
						||
| 
								 | 
							
									if s := os.Getenv("PORT"); s != "" {
							 | 
						||
| 
								 | 
							
										port = s
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									host := ""
							 | 
						||
| 
								 | 
							
									if IsDevAppServer() {
							 | 
						||
| 
								 | 
							
										host = "127.0.0.1"
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if err := http.ListenAndServe(host+":"+port, http.HandlerFunc(handleHTTP)); err != nil {
							 | 
						||
| 
								 | 
							
										log.Fatalf("http.ListenAndServe: %v", err)
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Find the path to package main by looking at the root Caller.
							 | 
						||
| 
								 | 
							
								func findMainPath() string {
							 | 
						||
| 
								 | 
							
									pc := make([]uintptr, 100)
							 | 
						||
| 
								 | 
							
									n := runtime.Callers(2, pc)
							 | 
						||
| 
								 | 
							
									frames := runtime.CallersFrames(pc[:n])
							 | 
						||
| 
								 | 
							
									for {
							 | 
						||
| 
								 | 
							
										frame, more := frames.Next()
							 | 
						||
| 
								 | 
							
										// Tests won't have package main, instead they have testing.tRunner
							 | 
						||
| 
								 | 
							
										if frame.Function == "main.main" || frame.Function == "testing.tRunner" {
							 | 
						||
| 
								 | 
							
											return frame.File
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
										if !more {
							 | 
						||
| 
								 | 
							
											break
							 | 
						||
| 
								 | 
							
										}
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									return ""
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								func installHealthChecker(mux *http.ServeMux) {
							 | 
						||
| 
								 | 
							
									// If no health check handler has been installed by this point, add a trivial one.
							 | 
						||
| 
								 | 
							
									const healthPath = "/_ah/health"
							 | 
						||
| 
								 | 
							
									hreq := &http.Request{
							 | 
						||
| 
								 | 
							
										Method: "GET",
							 | 
						||
| 
								 | 
							
										URL: &url.URL{
							 | 
						||
| 
								 | 
							
											Path: healthPath,
							 | 
						||
| 
								 | 
							
										},
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
									if _, pat := mux.Handler(hreq); pat != healthPath {
							 | 
						||
| 
								 | 
							
										mux.HandleFunc(healthPath, func(w http.ResponseWriter, r *http.Request) {
							 | 
						||
| 
								 | 
							
											io.WriteString(w, "ok")
							 | 
						||
| 
								 | 
							
										})
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								}
							 |