feat: add health endpoint
This commit is contained in:
parent
6164ad35b8
commit
ef23442cab
|
@ -302,7 +302,7 @@ func (api *API) authHandler(h http.Handler, lggr *logging.ZapEventLogger) http.H
|
||||||
wrap := func(w http.ResponseWriter, r *http.Request) {
|
wrap := func(w http.ResponseWriter, r *http.Request) {
|
||||||
// We let CORS preflight requests pass through the next
|
// We let CORS preflight requests pass through the next
|
||||||
// handler.
|
// handler.
|
||||||
if r.Method == http.MethodOptions {
|
if r.Method == http.MethodOptions || r.URL.Path == "/health" {
|
||||||
h.ServeHTTP(w, r)
|
h.ServeHTTP(w, r)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -853,3 +853,8 @@ func (api *API) Headers() map[string][]string {
|
||||||
func (api *API) SetKeepAlivesEnabled(b bool) {
|
func (api *API) SetKeepAlivesEnabled(b bool) {
|
||||||
api.server.SetKeepAlivesEnabled(b)
|
api.server.SetKeepAlivesEnabled(b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (api *API) HealthHandler(w http.ResponseWriter, r *http.Request){
|
||||||
|
api.SendResponse(w,http.StatusNoContent,nil,nil)
|
||||||
|
}
|
|
@ -22,9 +22,9 @@ import (
|
||||||
"go.uber.org/multierr"
|
"go.uber.org/multierr"
|
||||||
|
|
||||||
logging "github.com/ipfs/go-log/v2"
|
logging "github.com/ipfs/go-log/v2"
|
||||||
|
rpc "github.com/libp2p/go-libp2p-gorpc"
|
||||||
"github.com/libp2p/go-libp2p/core/host"
|
"github.com/libp2p/go-libp2p/core/host"
|
||||||
peer "github.com/libp2p/go-libp2p/core/peer"
|
peer "github.com/libp2p/go-libp2p/core/peer"
|
||||||
rpc "github.com/libp2p/go-libp2p-gorpc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -178,6 +178,12 @@ func (api *API) routes(c *rpc.Client) []common.Route {
|
||||||
Pattern: "/token",
|
Pattern: "/token",
|
||||||
HandlerFunc: api.GenerateTokenHandler,
|
HandlerFunc: api.GenerateTokenHandler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "Health",
|
||||||
|
Method: "GET",
|
||||||
|
Pattern: "/health",
|
||||||
|
HandlerFunc: api.HealthHandler,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -251,3 +251,19 @@ func TestAPIRemovePinEndpoint(t *testing.T) {
|
||||||
|
|
||||||
test.BothEndpoints(t, tf)
|
test.BothEndpoints(t, tf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestHealthEndpoint(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
svcapi := testAPI(t)
|
||||||
|
defer svcapi.Shutdown(ctx)
|
||||||
|
|
||||||
|
tf := func(t *testing.T, url test.URLFunc) {
|
||||||
|
errResp := api.Error{}
|
||||||
|
test.MakeGet(t, svcapi, url(svcapi)+"/health", &errResp)
|
||||||
|
if errResp.Code != 0 || errResp.Message != "" {
|
||||||
|
t.Error("expected no errors")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test.BothEndpoints(t, tf)
|
||||||
|
}
|
|
@ -122,6 +122,9 @@ type Client interface {
|
||||||
// returns collected CIDs. If local is true, it would garbage collect
|
// returns collected CIDs. If local is true, it would garbage collect
|
||||||
// only on contacted peer, otherwise on all peers' IPFS daemons.
|
// only on contacted peer, otherwise on all peers' IPFS daemons.
|
||||||
RepoGC(ctx context.Context, local bool) (api.GlobalRepoGC, error)
|
RepoGC(ctx context.Context, local bool) (api.GlobalRepoGC, error)
|
||||||
|
|
||||||
|
// Health returns no content when everything is ok, and an error otherwise
|
||||||
|
Health(ctx context.Context) (error)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Config allows to configure the parameters to connect
|
// Config allows to configure the parameters to connect
|
||||||
|
|
|
@ -697,3 +697,10 @@ func (c *defaultClient) AddMultiFile(
|
||||||
)
|
)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *defaultClient) Health(ctx context.Context) (error) {
|
||||||
|
ctx, span := trace.StartSpan(ctx, "client/Health")
|
||||||
|
defer span.End()
|
||||||
|
err := c.do(ctx, "GET", "/health", nil, nil, nil)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
|
@ -204,6 +204,12 @@ func (api *API) routes(c *rpc.Client) []common.Route {
|
||||||
Pattern: "/token",
|
Pattern: "/token",
|
||||||
HandlerFunc: api.GenerateTokenHandler,
|
HandlerFunc: api.GenerateTokenHandler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
Name: "Health",
|
||||||
|
Method: "GET",
|
||||||
|
Pattern: "/health",
|
||||||
|
HandlerFunc: api.HealthHandler,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -844,3 +844,20 @@ func TestAPIIPFSGCEndpoint(t *testing.T) {
|
||||||
|
|
||||||
test.BothEndpoints(t, tf)
|
test.BothEndpoints(t, tf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func TestHealthEndpoint(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
rest := testAPI(t)
|
||||||
|
defer rest.Shutdown(ctx)
|
||||||
|
|
||||||
|
tf := func(t *testing.T, url test.URLFunc) {
|
||||||
|
errResp := api.Error{}
|
||||||
|
test.MakeGet(t, rest, url(rest)+"/health", &errResp)
|
||||||
|
if errResp.Code != 0 || errResp.Message != "" {
|
||||||
|
t.Error("expected no errors")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
test.BothEndpoints(t, tf)
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user