diff options
author | Ian Cottrell <iancottrell@google.com> | 2020-03-10 23:52:14 -0400 |
---|---|---|
committer | Ian Cottrell <iancottrell@google.com> | 2020-03-18 13:29:43 +0000 |
commit | 540150da7399370d8e9c64690ee8fe18ead08f8f (patch) | |
tree | e482ca101b29836044d4a2c0df4c9d88ea76d952 /internal/lsp/debug | |
parent | d7fc2cf50e39d8ef74453bed096595c43fe4aabf (diff) | |
download | golang-x-tools-540150da7399370d8e9c64690ee8fe18ead08f8f.tar.gz |
internal/telemetry: add type safe tag keys
This changes the way keys work, there is still a single internal key
implementation for performance reasons, but the public interface is a set of key
implementations that have type safe Of and Get methods.
This also hides the implemenation of Tag so that we can modify the storage form
and find a more efficient storage if needed.
Change-Id: I6a39cc75c2824c6a92e52d59f16e82e876f16e9c
Reviewed-on: https://go-review.googlesource.com/c/tools/+/223137
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
Diffstat (limited to 'internal/lsp/debug')
-rw-r--r-- | internal/lsp/debug/metrics.go | 10 | ||||
-rw-r--r-- | internal/lsp/debug/rpc.go | 14 | ||||
-rw-r--r-- | internal/lsp/debug/tag/tag.go | 40 | ||||
-rw-r--r-- | internal/lsp/debug/trace.go | 2 |
4 files changed, 29 insertions, 37 deletions
diff --git a/internal/lsp/debug/metrics.go b/internal/lsp/debug/metrics.go index 19ac0a1f3..09e2a9405 100644 --- a/internal/lsp/debug/metrics.go +++ b/internal/lsp/debug/metrics.go @@ -18,33 +18,33 @@ var ( receivedBytes = metric.HistogramInt64{ Name: "received_bytes", Description: "Distribution of received bytes, by method.", - Keys: []*event.Key{tag.RPCDirection, tag.Method}, + Keys: []event.Key{tag.RPCDirection, tag.Method}, Buckets: bytesDistribution, }.Record(tag.ReceivedBytes) sentBytes = metric.HistogramInt64{ Name: "sent_bytes", Description: "Distribution of sent bytes, by method.", - Keys: []*event.Key{tag.RPCDirection, tag.Method}, + Keys: []event.Key{tag.RPCDirection, tag.Method}, Buckets: bytesDistribution, }.Record(tag.SentBytes) latency = metric.HistogramFloat64{ Name: "latency", Description: "Distribution of latency in milliseconds, by method.", - Keys: []*event.Key{tag.RPCDirection, tag.Method}, + Keys: []event.Key{tag.RPCDirection, tag.Method}, Buckets: millisecondsDistribution, }.Record(tag.Latency) started = metric.Scalar{ Name: "started", Description: "Count of RPCs started by method.", - Keys: []*event.Key{tag.RPCDirection, tag.Method}, + Keys: []event.Key{tag.RPCDirection, tag.Method}, }.CountInt64(tag.Started) completed = metric.Scalar{ Name: "completed", Description: "Count of RPCs completed by method and status.", - Keys: []*event.Key{tag.RPCDirection, tag.Method, tag.StatusCode}, + Keys: []event.Key{tag.RPCDirection, tag.Method, tag.StatusCode}, }.CountFloat64(tag.Latency) ) diff --git a/internal/lsp/debug/rpc.go b/internal/lsp/debug/rpc.go index 07aed82d4..11f45d4dc 100644 --- a/internal/lsp/debug/rpc.go +++ b/internal/lsp/debug/rpc.go @@ -8,7 +8,6 @@ import ( "context" "fmt" "html/template" - "log" "net/http" "sort" "sync" @@ -97,13 +96,10 @@ func (r *rpcs) Metric(ctx context.Context, data event.MetricData) { defer r.mu.Unlock() for i, group := range data.Groups() { set := &r.Inbound - if group.Get(tag.RPCDirection) == tag.Outbound { + if tag.RPCDirection.Get(group) == tag.Outbound { set = &r.Outbound } - method, ok := group.Get(tag.Method).(string) - if !ok { - continue - } + method := tag.Method.Get(group) index := sort.Search(len(*set), func(i int) bool { return (*set)[i].Method >= method }) @@ -119,11 +115,7 @@ func (r *rpcs) Metric(ctx context.Context, data event.MetricData) { case started: stats.Started = data.(*metric.Int64Data).Rows[i] case completed: - status, ok := group.Get(tag.StatusCode).(string) - if !ok { - log.Printf("Not status... %v", group) - continue - } + status := tag.StatusCode.Get(group) var b *rpcCodeBucket for c, entry := range stats.Codes { if entry.Key == status { diff --git a/internal/lsp/debug/tag/tag.go b/internal/lsp/debug/tag/tag.go index 389fd9084..b9743969d 100644 --- a/internal/lsp/debug/tag/tag.go +++ b/internal/lsp/debug/tag/tag.go @@ -13,27 +13,27 @@ import ( var ( // create the tag keys we use - Method = &event.Key{Name: "method"} - StatusCode = &event.Key{Name: "status.code"} - StatusMessage = &event.Key{Name: "status.message"} - RPCID = &event.Key{Name: "id"} - RPCDirection = &event.Key{Name: "direction"} - File = &event.Key{Name: "file"} - Directory = &event.Key{Name: "directory"} - URI = &event.Key{Name: "URI"} - Package = &event.Key{Name: "package"} - PackagePath = &event.Key{Name: "package_path"} - Query = &event.Key{Name: "query"} - Snapshot = &event.Key{Name: "snapshot"} - Operation = &event.Key{Name: "operation"} + Method = event.NewStringKey("method", "") + StatusCode = event.NewStringKey("status.code", "") + StatusMessage = event.NewStringKey("status.message", "") + RPCID = event.NewStringKey("id", "") + RPCDirection = event.NewStringKey("direction", "") + File = event.NewStringKey("file", "") + Directory = event.NewKey("directory", "") + URI = event.NewKey("URI", "") + Package = event.NewStringKey("package", "") + PackagePath = event.NewStringKey("package_path", "") + Query = event.NewKey("query", "") + Snapshot = event.NewUInt64Key("snapshot", "") + Operation = event.NewStringKey("operation", "") - Position = &event.Key{Name: "position"} - Category = &event.Key{Name: "category"} - PackageCount = &event.Key{Name: "packages"} - Files = &event.Key{Name: "files"} - Port = &event.Key{Name: "port"} - Type = &event.Key{Name: "type"} - HoverKind = &event.Key{Name: "hoverkind"} + Position = event.NewKey("position", "") + Category = event.NewStringKey("category", "") + PackageCount = event.NewIntKey("packages", "") + Files = event.NewKey("files", "") + Port = event.NewIntKey("port", "") + Type = event.NewKey("type", "") + HoverKind = event.NewStringKey("hoverkind", "") ) var ( diff --git a/internal/lsp/debug/trace.go b/internal/lsp/debug/trace.go index 907c4bd70..e32af8cf2 100644 --- a/internal/lsp/debug/trace.go +++ b/internal/lsp/debug/trace.go @@ -172,7 +172,7 @@ func fillOffsets(td *traceData, start time.Time) { func renderTags(tags event.TagList) string { buf := &bytes.Buffer{} for _, tag := range tags { - fmt.Fprintf(buf, "%v=%q ", tag.Key, tag.Value) + fmt.Fprintf(buf, "%s=%q ", tag.Key().Name(), tag.Value()) } return buf.String() } |