mirror of
https://github.com/pomerium/pomerium.git
synced 2025-06-06 12:52:53 +02:00
add a simple check for databroker record as a readiness check
This commit is contained in:
parent
efe3cef2e4
commit
77d21b681b
1 changed files with 33 additions and 0 deletions
|
@ -17,6 +17,7 @@ import (
|
||||||
"github.com/pomerium/pomerium/internal/middleware"
|
"github.com/pomerium/pomerium/internal/middleware"
|
||||||
"github.com/pomerium/pomerium/internal/telemetry/trace"
|
"github.com/pomerium/pomerium/internal/telemetry/trace"
|
||||||
"github.com/pomerium/pomerium/internal/urlutil"
|
"github.com/pomerium/pomerium/internal/urlutil"
|
||||||
|
"github.com/pomerium/pomerium/pkg/grpc/databroker"
|
||||||
)
|
)
|
||||||
|
|
||||||
// registerDashboardHandlers returns the proxy service's ServeMux
|
// registerDashboardHandlers returns the proxy service's ServeMux
|
||||||
|
@ -40,6 +41,15 @@ func (p *Proxy) registerDashboardHandlers(r *mux.Router, opts *config.Options) *
|
||||||
c := r.PathPrefix(dashboardPath + "/callback").Subrouter()
|
c := r.PathPrefix(dashboardPath + "/callback").Subrouter()
|
||||||
c.Path("/").Handler(httputil.HandlerFunc(p.Callback)).Methods(http.MethodGet)
|
c.Path("/").Handler(httputil.HandlerFunc(p.Callback)).Methods(http.MethodGet)
|
||||||
|
|
||||||
|
// Handlers for checking whether the proxy is ready to serve traffic
|
||||||
|
r.Path(dashboardPath + "/readyz").
|
||||||
|
Handler(httputil.HandlerFunc(func(w http.ResponseWriter, r *http.Request) error {
|
||||||
|
if r.Method != http.MethodGet {
|
||||||
|
http.Error(w, http.StatusText(http.StatusMethodNotAllowed), http.StatusMethodNotAllowed)
|
||||||
|
}
|
||||||
|
return p.ReadyZ(w, r)
|
||||||
|
}))
|
||||||
|
|
||||||
// Programmatic API handlers and middleware
|
// Programmatic API handlers and middleware
|
||||||
// gorilla mux has a bug that prevents HTTP 405 errors from being returned properly so we do all this manually
|
// gorilla mux has a bug that prevents HTTP 405 errors from being returned properly so we do all this manually
|
||||||
// https://github.com/gorilla/mux/issues/739
|
// https://github.com/gorilla/mux/issues/739
|
||||||
|
@ -122,6 +132,29 @@ func (p *Proxy) Callback(w http.ResponseWriter, r *http.Request) error {
|
||||||
return p.state.Load().authenticateFlow.Callback(w, r)
|
return p.state.Load().authenticateFlow.Callback(w, r)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Readyz provides some information about whether the proxy is configured and ready
|
||||||
|
// to serve requests
|
||||||
|
func (p *Proxy) ReadyZ(w http.ResponseWriter, r *http.Request) error {
|
||||||
|
client := p.state.Load().dataBrokerClient
|
||||||
|
|
||||||
|
resp, err := client.Get(r.Context(), &databroker.GetRequest{
|
||||||
|
Type: "type.googleapis.com/pomerium.config.Config",
|
||||||
|
Id: "dashboard-settings",
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return httputil.NewError(http.StatusInternalServerError, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.GetRecord().GetData() != nil {
|
||||||
|
w.WriteHeader(http.StatusOK)
|
||||||
|
_, _ = io.WriteString(w, "data record from console")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
http.Error(w, "No data record from console", http.StatusTeapot)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// ProgrammaticLogin returns a signed url that can be used to login
|
// ProgrammaticLogin returns a signed url that can be used to login
|
||||||
// using the authenticate service.
|
// using the authenticate service.
|
||||||
func (p *Proxy) ProgrammaticLogin(w http.ResponseWriter, r *http.Request) error {
|
func (p *Proxy) ProgrammaticLogin(w http.ResponseWriter, r *http.Request) error {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue