/* * * Copyright 2015 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 grpcimport ()// EnableTracing controls whether to trace RPCs using the golang.org/x/net/trace package.// This should only be set before any RPCs are sent or received by this program.varEnableTracingbool// methodFamily returns the trace family for the given method.// It turns "/pkg.Service/GetFoo" into "pkg.Service".func ( string) string { = strings.TrimPrefix(, "/") // remove leading slashif := strings.Index(, "/"); >= 0 { = [:] // remove everything from second slash }return}// traceEventLog mirrors golang.org/x/net/trace.EventLog.//// It exists in order to avoid importing x/net/trace on grpcnotrace builds.typetraceEventLoginterface {Printf(format string, a ...any)Errorf(format string, a ...any)Finish()}// traceLog mirrors golang.org/x/net/trace.Trace.//// It exists in order to avoid importing x/net/trace on grpcnotrace builds.typetraceLoginterface {LazyLog(x fmt.Stringer, sensitive bool)LazyPrintf(format string, a ...any)SetError()SetRecycler(f func(any))SetTraceInfo(traceID, spanID uint64)SetMaxEvents(m int)Finish()}// traceInfo contains tracing information for an RPC.typetraceInfostruct {trtraceLogfirstLinefirstLine}// firstLine is the first line of an RPC trace.// It may be mutated after construction; remoteAddr specifically may change// during client-side use.typefirstLinestruct {musync.Mutexclientbool// whether this is a client (outgoing) RPCremoteAddrnet.Addrdeadlinetime.Duration// may be zero}func ( *firstLine) ( net.Addr) { .mu.Lock() .remoteAddr = .mu.Unlock()}func ( *firstLine) () string { .mu.Lock()defer .mu.Unlock()varbytes.Bufferio.WriteString(&, "RPC: ")if .client {io.WriteString(&, "to") } else {io.WriteString(&, "from") }fmt.Fprintf(&, " %v deadline:", .remoteAddr)if .deadline != 0 {fmt.Fprint(&, .deadline) } else {io.WriteString(&, "none") }return .String()}consttruncateSize = 100func ( string, int) string {if > len() {return }return [:]}// payload represents an RPC request or response payload.typepayloadstruct {sentbool// whether this is an outgoing payloadmsgany// e.g. a proto.Message// TODO(dsymonds): add stringifying info to codec, and limit how much we hold here?}func ( payload) () string {if .sent {returntruncate(fmt.Sprintf("sent: %v", .msg), truncateSize) }returntruncate(fmt.Sprintf("recv: %v", .msg), truncateSize)}typefmtStringerstruct {formatstringa []any}func ( *fmtStringer) () string {returnfmt.Sprintf(.format, .a...)}typestringerstringfunc ( stringer) () string { returnstring() }
The pages are generated with Goldsv0.7.6. (GOOS=linux GOARCH=amd64)