aboutsummaryrefslogtreecommitdiff
path: root/internal/lsp/debug
diff options
context:
space:
mode:
authorIan Cottrell <iancottrell@google.com>2020-03-10 23:52:14 -0400
committerIan Cottrell <iancottrell@google.com>2020-03-18 13:29:43 +0000
commit540150da7399370d8e9c64690ee8fe18ead08f8f (patch)
treee482ca101b29836044d4a2c0df4c9d88ea76d952 /internal/lsp/debug
parentd7fc2cf50e39d8ef74453bed096595c43fe4aabf (diff)
downloadgolang-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.go10
-rw-r--r--internal/lsp/debug/rpc.go14
-rw-r--r--internal/lsp/debug/tag/tag.go40
-rw-r--r--internal/lsp/debug/trace.go2
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()
}