| /* | |
| * | |
| * Copyright 2016 gRPC authors. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| * | |
| */ | |
| package stats | |
| import ( | |
| "context" | |
| "net" | |
| ) | |
| // ConnTagInfo defines the relevant information needed by connection context tagger. | |
| type ConnTagInfo struct { | |
| // RemoteAddr is the remote address of the corresponding connection. | |
| RemoteAddr net.Addr | |
| // LocalAddr is the local address of the corresponding connection. | |
| LocalAddr net.Addr | |
| } | |
| // RPCTagInfo defines the relevant information needed by RPC context tagger. | |
| type RPCTagInfo struct { | |
| // FullMethodName is the RPC method in the format of /package.service/method. | |
| FullMethodName string | |
| // FailFast indicates if this RPC is failfast. | |
| // This field is only valid on client side, it's always false on server side. | |
| FailFast bool | |
| // NameResolutionDelay indicates if the RPC needed to wait for the | |
| // initial name resolver update before it could begin. This should only | |
| // happen if the channel is IDLE when the RPC is started. Note that | |
| // all retry or hedging attempts for an RPC that experienced a delay | |
| // will have it set. | |
| // | |
| // This field is only valid on the client side; it is always false on | |
| // the server side. | |
| NameResolutionDelay bool | |
| } | |
| // Handler defines the interface for the related stats handling (e.g., RPCs, connections). | |
| type Handler interface { | |
| // TagRPC can attach some information to the given context. | |
| // The context used for the rest lifetime of the RPC will be derived from | |
| // the returned context. | |
| TagRPC(context.Context, *RPCTagInfo) context.Context | |
| // HandleRPC processes the RPC stats. | |
| HandleRPC(context.Context, RPCStats) | |
| // TagConn can attach some information to the given context. | |
| // The returned context will be used for stats handling. | |
| // For conn stats handling, the context used in HandleConn for this | |
| // connection will be derived from the context returned. | |
| // For RPC stats handling, | |
| // - On server side, the context used in HandleRPC for all RPCs on this | |
| // connection will be derived from the context returned. | |
| // - On client side, the context is not derived from the context returned. | |
| TagConn(context.Context, *ConnTagInfo) context.Context | |
| // HandleConn processes the Conn stats. | |
| HandleConn(context.Context, ConnStats) | |
| } |