ref: Implement trace control in javascript.
This CL includes logic to properly control setting the trace flags
in javascript. You can also control tracing by setting a regular
expression to match span names and annotations. I still need
to add some tests.
Change-Id: I3a1d3a6a4652462d9fc93e2c88e170881005bea8
MultiPart: 2/3
diff --git a/profiles/internal/ipc/client.go b/profiles/internal/ipc/client.go
index 8363bd4..85cd4f7 100644
--- a/profiles/internal/ipc/client.go
+++ b/profiles/internal/ipc/client.go
@@ -28,7 +28,6 @@
"v.io/x/ref/profiles/internal/ipc/stream/vc"
"v.io/x/ref/profiles/internal/ipc/version"
inaming "v.io/x/ref/profiles/internal/naming"
- ivtrace "v.io/x/ref/profiles/internal/vtrace"
)
const pkgPath = "v.io/x/ref/profiles/internal/ipc"
@@ -722,7 +721,7 @@
GrantedBlessings: fc.grantedBlessings,
Blessings: blessingsRequest,
Discharges: fc.discharges,
- TraceRequest: ivtrace.Request(fc.ctx),
+ TraceRequest: vtrace.GetRequest(fc.ctx),
}
if err := fc.enc.Encode(req); err != nil {
berr := verror.New(verror.ErrBadProtocol, fc.ctx, verror.New(errRequestEncoding, fc.ctx, fmt.Sprintf("%#v", req), err))
@@ -885,7 +884,7 @@
clientAckBlessings(fc.flow.VCDataCache(), fc.blessings)
}
// Incorporate any VTrace info that was returned.
- ivtrace.Merge(fc.ctx, fc.response.TraceResponse)
+ vtrace.GetStore(fc.ctx).Merge(fc.response.TraceResponse)
if fc.response.Error != nil {
// TODO(cnicolaou): remove verror.ErrNoAccess with verror version
// when ipc.Server is converted.
diff --git a/profiles/internal/ipc/server.go b/profiles/internal/ipc/server.go
index 29f133a..81daa28 100644
--- a/profiles/internal/ipc/server.go
+++ b/profiles/internal/ipc/server.go
@@ -30,7 +30,6 @@
"v.io/x/ref/lib/stats"
"v.io/x/ref/profiles/internal/ipc/stream/vc"
inaming "v.io/x/ref/profiles/internal/naming"
- ivtrace "v.io/x/ref/profiles/internal/vtrace"
// TODO(cnicolaou): finish verror2 -> verror transition, in particular
// for communicating from server to client.
@@ -957,7 +956,7 @@
var traceResponse vtrace.Response
if fs.allowDebug {
- traceResponse = ivtrace.Response(fs.T)
+ traceResponse = vtrace.GetResponse(fs.T)
}
// Respond to the client with the response header and positional results.
diff --git a/profiles/internal/vtrace/store.go b/profiles/internal/vtrace/store.go
index c733ed0..1ac8d3c 100644
--- a/profiles/internal/vtrace/store.go
+++ b/profiles/internal/vtrace/store.go
@@ -6,7 +6,6 @@
"sync"
"time"
- "v.io/v23/context"
"v.io/v23/uniqueid"
"v.io/v23/vtrace"
@@ -79,7 +78,7 @@
}
// Merge merges a vtrace.Response into the current store.
-func (s *Store) merge(t vtrace.Response) {
+func (s *Store) Merge(t vtrace.Response) {
s.mu.Lock()
defer s.mu.Unlock()
@@ -273,8 +272,3 @@
out.ID = ts.id
out.Spans = spans
}
-
-// Merge merges a vtrace.Response into the current store.
-func Merge(ctx *context.T, t vtrace.Response) {
- getStore(ctx).merge(t)
-}
diff --git a/profiles/internal/vtrace/vtrace.go b/profiles/internal/vtrace/vtrace.go
index 9aca9d7..c35411b 100644
--- a/profiles/internal/vtrace/vtrace.go
+++ b/profiles/internal/vtrace/vtrace.go
@@ -59,29 +59,6 @@
return s.store.flags(s.trace)
}
-// Request generates a vtrace.Request from the active Span.
-func Request(ctx *context.T) vtrace.Request {
- if span := getSpan(ctx); span != nil {
- return vtrace.Request{
- SpanID: span.id,
- TraceID: span.trace,
- Flags: span.flags(),
- }
- }
- return vtrace.Request{}
-}
-
-// Response captures the vtrace.Response for the active Span.
-func Response(ctx *context.T) vtrace.Response {
- if span := getSpan(ctx); span != nil {
- return vtrace.Response{
- Flags: span.flags(),
- Trace: *span.store.TraceRecord(span.trace),
- }
- }
- return vtrace.Response{}
-}
-
type contextKey int
const (
@@ -143,6 +120,29 @@
return nil
}
+// Request generates a vtrace.Request from the active Span.
+func (m manager) GetRequest(ctx *context.T) vtrace.Request {
+ if span := getSpan(ctx); span != nil {
+ return vtrace.Request{
+ SpanID: span.id,
+ TraceID: span.trace,
+ Flags: span.flags(),
+ }
+ }
+ return vtrace.Request{}
+}
+
+// Response captures the vtrace.Response for the active Span.
+func (m manager) GetResponse(ctx *context.T) vtrace.Response {
+ if span := getSpan(ctx); span != nil {
+ return vtrace.Response{
+ Flags: span.flags(),
+ Trace: *span.store.TraceRecord(span.trace),
+ }
+ }
+ return vtrace.Response{}
+}
+
// Store returns the current vtrace.Store.
func (m manager) GetStore(ctx *context.T) vtrace.Store {
if store := getStore(ctx); store != nil {
diff --git a/services/wsprd/app/app.go b/services/wsprd/app/app.go
index 323303d..089e11a 100644
--- a/services/wsprd/app/app.go
+++ b/services/wsprd/app/app.go
@@ -192,13 +192,9 @@
func (c *Controller) sendRPCResponse(ctx *context.T, w lib.ClientWriter, span vtrace.Span, results []*vdl.Value) {
span.Finish()
- traceRecord := vtrace.GetStore(ctx).TraceRecord(span.Trace())
-
response := VeyronRPCResponse{
- OutArgs: results,
- TraceResponse: vtrace.Response{
- Trace: *traceRecord,
- },
+ OutArgs: results,
+ TraceResponse: vtrace.GetResponse(ctx),
}
encoded, err := lib.VomEncode(response)
if err != nil {