mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-31 08:01:34 +01:00 
			
		
		
		
	ping db in health check
This commit is contained in:
		
							parent
							
								
									e0b15c18ce
								
							
						
					
					
						commit
						c6aaa37f2d
					
				
							
								
								
									
										38
									
								
								api.go
									
									
									
									
									
								
							
							
						
						
									
										38
									
								
								api.go
									
									
									
									
									
								
							| @ -30,6 +30,44 @@ const ( | ||||
| 	) | ||||
| ) | ||||
| 
 | ||||
| func (h *Headscale) HealthHandler( | ||||
| 	writer http.ResponseWriter, | ||||
| 	req *http.Request, | ||||
| ) { | ||||
| 	respond := func(err error) { | ||||
| 		writer.Header().Set("Content-Type", "application/health+json; charset=utf-8") | ||||
| 
 | ||||
| 		res := struct { | ||||
| 			Status string `json:"status"` | ||||
| 		}{ | ||||
| 			Status: "pass", | ||||
| 		} | ||||
| 
 | ||||
| 		if err != nil { | ||||
| 			writer.WriteHeader(http.StatusInternalServerError) | ||||
| 			log.Error().Caller().Err(err).Msg("health check failed") | ||||
| 			res.Status = "fail" | ||||
| 		} | ||||
| 
 | ||||
| 		buf, err := json.Marshal(res) | ||||
| 		if err != nil { | ||||
| 			log.Error().Caller().Err(err).Msg("marshal failed") | ||||
| 		} | ||||
| 		_, err = writer.Write(buf) | ||||
| 		if err != nil { | ||||
| 			log.Error().Caller().Err(err).Msg("write failed") | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	if err := h.pingDB(); err != nil { | ||||
| 		respond(err) | ||||
| 
 | ||||
| 		return | ||||
| 	} | ||||
| 
 | ||||
| 	respond(nil) | ||||
| } | ||||
| 
 | ||||
| // KeyHandler provides the Headscale pub key | ||||
| // Listens in /key. | ||||
| func (h *Headscale) KeyHandler( | ||||
|  | ||||
							
								
								
									
										14
									
								
								app.go
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								app.go
									
									
									
									
									
								
							| @ -423,19 +423,7 @@ func (h *Headscale) createPrometheusRouter() *gin.Engine { | ||||
| func (h *Headscale) createRouter(grpcMux *runtime.ServeMux) *mux.Router { | ||||
| 	router := mux.NewRouter() | ||||
| 
 | ||||
| 	router.HandleFunc( | ||||
| 		"/health", | ||||
| 		func(writer http.ResponseWriter, req *http.Request) { | ||||
| 			writer.WriteHeader(http.StatusOK) | ||||
| 			_, err := writer.Write([]byte("{\"healthy\": \"ok\"}")) | ||||
| 			if err != nil { | ||||
| 				log.Error(). | ||||
| 					Caller(). | ||||
| 					Err(err). | ||||
| 					Msg("Failed to write response") | ||||
| 			} | ||||
| 		}).Methods(http.MethodGet) | ||||
| 
 | ||||
| 	router.HandleFunc("/health", h.HealthHandler).Methods(http.MethodGet) | ||||
| 	router.HandleFunc("/key", h.KeyHandler).Methods(http.MethodGet) | ||||
| 	router.HandleFunc("/register", h.RegisterWebAPI).Methods(http.MethodGet) | ||||
| 	router.HandleFunc("/machine/{mkey}/map", h.PollNetMapHandler).Methods(http.MethodPost) | ||||
|  | ||||
							
								
								
									
										12
									
								
								db.go
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								db.go
									
									
									
									
									
								
							| @ -1,6 +1,7 @@ | ||||
| package headscale | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"database/sql/driver" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| @ -220,6 +221,17 @@ func (h *Headscale) setValue(key string, value string) error { | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (h *Headscale) pingDB() error { | ||||
| 	ctx, cancel := context.WithTimeout(context.Background(), time.Second) | ||||
| 	defer cancel() | ||||
| 	db, err := h.db.DB() | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 
 | ||||
| 	return db.PingContext(ctx) | ||||
| } | ||||
| 
 | ||||
| // This is a "wrapper" type around tailscales | ||||
| // Hostinfo to allow us to add database "serialization" | ||||
| // methods. This allows us to use a typed values throughout | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user