Fixed ctx issue, changed to track failures instead of success
This commit is contained in:
parent
353c5d8b12
commit
7db39115e8
@ -156,7 +156,7 @@ func (handlers) getSpan(ctx context.Context, req request) (context.Context, *tra
|
|||||||
func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer)), rpcError rpcErrFunc, done func(keepCtx bool), chOut chanOut) {
|
func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer)), rpcError rpcErrFunc, done func(keepCtx bool), chOut chanOut) {
|
||||||
// Not sure if we need to sanitize the incoming req.Method or not.
|
// Not sure if we need to sanitize the incoming req.Method or not.
|
||||||
ctx, span := h.getSpan(ctx, req)
|
ctx, span := h.getSpan(ctx, req)
|
||||||
ctx, _ = tag.New(context.Background(), tag.Insert(metrics.RPCMethod, req.Method))
|
ctx, _ = tag.New(ctx, tag.Insert(metrics.RPCMethod, req.Method))
|
||||||
defer span.End()
|
defer span.End()
|
||||||
|
|
||||||
handler, ok := h[req.Method]
|
handler, ok := h[req.Method]
|
||||||
@ -169,6 +169,7 @@ func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer
|
|||||||
|
|
||||||
if len(req.Params) != handler.nParams {
|
if len(req.Params) != handler.nParams {
|
||||||
rpcError(w, &req, rpcInvalidParams, fmt.Errorf("wrong param count"))
|
rpcError(w, &req, rpcInvalidParams, fmt.Errorf("wrong param count"))
|
||||||
|
stats.Record(ctx, metrics.RPCRequestError.M(1))
|
||||||
done(false)
|
done(false)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -178,6 +179,7 @@ func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer
|
|||||||
|
|
||||||
if chOut == nil && outCh {
|
if chOut == nil && outCh {
|
||||||
rpcError(w, &req, rpcMethodNotFound, fmt.Errorf("method '%s' not supported in this mode (no out channel support)", req.Method))
|
rpcError(w, &req, rpcMethodNotFound, fmt.Errorf("method '%s' not supported in this mode (no out channel support)", req.Method))
|
||||||
|
stats.Record(ctx, metrics.RPCRequestError.M(1))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,6 +193,7 @@ func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer
|
|||||||
rp := reflect.New(handler.paramReceivers[i])
|
rp := reflect.New(handler.paramReceivers[i])
|
||||||
if err := json.NewDecoder(bytes.NewReader(req.Params[i].data)).Decode(rp.Interface()); err != nil {
|
if err := json.NewDecoder(bytes.NewReader(req.Params[i].data)).Decode(rp.Interface()); err != nil {
|
||||||
rpcError(w, &req, rpcParseError, xerrors.Errorf("unmarshaling params for '%s': %w", handler.handlerFunc, err))
|
rpcError(w, &req, rpcParseError, xerrors.Errorf("unmarshaling params for '%s': %w", handler.handlerFunc, err))
|
||||||
|
stats.Record(ctx, metrics.RPCRequestError.M(1))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -202,12 +205,12 @@ func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer
|
|||||||
callResult, err := doCall(req.Method, handler.handlerFunc, callParams)
|
callResult, err := doCall(req.Method, handler.handlerFunc, callParams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rpcError(w, &req, 0, xerrors.Errorf("fatal error calling '%s': %w", req.Method, err))
|
rpcError(w, &req, 0, xerrors.Errorf("fatal error calling '%s': %w", req.Method, err))
|
||||||
|
stats.Record(ctx, metrics.RPCRequestError.M(1))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if req.ID == nil {
|
if req.ID == nil {
|
||||||
return // notification
|
return // notification
|
||||||
}
|
}
|
||||||
stats.Record(ctx, metrics.RPCRequestSuccess.M(1))
|
|
||||||
|
|
||||||
///////////////////
|
///////////////////
|
||||||
|
|
||||||
@ -220,6 +223,7 @@ func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer
|
|||||||
err := callResult[handler.errOut].Interface()
|
err := callResult[handler.errOut].Interface()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("error in RPC call to '%s': %+v", req.Method, err)
|
log.Warnf("error in RPC call to '%s': %+v", req.Method, err)
|
||||||
|
stats.Record(ctx, metrics.RPCResponseError.M(1))
|
||||||
resp.Error = &respError{
|
resp.Error = &respError{
|
||||||
Code: 1,
|
Code: 1,
|
||||||
Message: err.(error).Error(),
|
Message: err.(error).Error(),
|
||||||
@ -241,6 +245,7 @@ func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.Warnf("failed to setup channel in RPC call to '%s': %+v", req.Method, err)
|
log.Warnf("failed to setup channel in RPC call to '%s': %+v", req.Method, err)
|
||||||
|
stats.Record(ctx, metrics.RPCResponseError.M(1))
|
||||||
resp.Error = &respError{
|
resp.Error = &respError{
|
||||||
Code: 1,
|
Code: 1,
|
||||||
Message: err.(error).Error(),
|
Message: err.(error).Error(),
|
||||||
@ -250,8 +255,8 @@ func (h handlers) handle(ctx context.Context, req request, w func(func(io.Writer
|
|||||||
w(func(w io.Writer) {
|
w(func(w io.Writer) {
|
||||||
if err := json.NewEncoder(w).Encode(resp); err != nil {
|
if err := json.NewEncoder(w).Encode(resp); err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
|
stats.Record(ctx, metrics.RPCResponseError.M(1))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
stats.Record(ctx, metrics.RPCResponseSuccess.M(1))
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@ var (
|
|||||||
ChainNodeHeight = stats.Int64("chain/node_height", "Current Height of the node", stats.UnitDimensionless)
|
ChainNodeHeight = stats.Int64("chain/node_height", "Current Height of the node", stats.UnitDimensionless)
|
||||||
PeerCount = stats.Int64("peer/count", "Current number of FIL peers", stats.UnitDimensionless)
|
PeerCount = stats.Int64("peer/count", "Current number of FIL peers", stats.UnitDimensionless)
|
||||||
RPCInvalidMethod = stats.Int64("rpc/invalid_method", "Total number of invalid RPC methods called", stats.UnitDimensionless)
|
RPCInvalidMethod = stats.Int64("rpc/invalid_method", "Total number of invalid RPC methods called", stats.UnitDimensionless)
|
||||||
RPCRequestSuccess = stats.Int64("rpc/request_success", "Total number of successful requests handled", stats.UnitDimensionless)
|
RPCRequestError = stats.Int64("rpc/request_error", "Total number of request errors handled", stats.UnitDimensionless)
|
||||||
RPCResponseSuccess = stats.Int64("rpc/response_success", "Total number of succeessful responses handled", stats.UnitDimensionless)
|
RPCResponseError = stats.Int64("rpc/response_error", "Total number of responses errors handled", stats.UnitDimensionless)
|
||||||
)
|
)
|
||||||
|
|
||||||
// DefaultViews is an array of Consensus views for metric gathering purposes
|
// DefaultViews is an array of Consensus views for metric gathering purposes
|
||||||
@ -48,12 +48,12 @@ var DefaultViews = []*view.View{
|
|||||||
TagKeys: []tag.Key{RPCMethod},
|
TagKeys: []tag.Key{RPCMethod},
|
||||||
},
|
},
|
||||||
&view.View{
|
&view.View{
|
||||||
Measure: RPCRequestSuccess,
|
Measure: RPCRequestError,
|
||||||
Aggregation: view.Count(),
|
Aggregation: view.Count(),
|
||||||
TagKeys: []tag.Key{RPCMethod},
|
TagKeys: []tag.Key{RPCMethod},
|
||||||
},
|
},
|
||||||
&view.View{
|
&view.View{
|
||||||
Measure: RPCResponseSuccess,
|
Measure: RPCResponseError,
|
||||||
Aggregation: view.Count(),
|
Aggregation: view.Count(),
|
||||||
TagKeys: []tag.Key{RPCMethod},
|
TagKeys: []tag.Key{RPCMethod},
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user