1
0
mirror of https://github.com/golang/go synced 2024-11-18 17:04:41 -07:00

internal/lsp: move the telemetry package

Move the lsp specific telemetry package that just declares the labels under the
debug package and call it tag, to make all the usages much more readable.

Change-Id: Ic89b3408dd3b8b3d914cc69d81f41b8919aaf424
Reviewed-on: https://go-review.googlesource.com/c/tools/+/222850
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Emmanuel Odeke <emm.odeke@gmail.com>
This commit is contained in:
Ian Cottrell 2020-03-10 23:09:39 -04:00
parent 9dec35b5f8
commit 04208b9e8a
22 changed files with 78 additions and 79 deletions

View File

@ -15,8 +15,8 @@ import (
"golang.org/x/sync/errgroup" "golang.org/x/sync/errgroup"
"golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/memoize" "golang.org/x/tools/internal/memoize"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
errors "golang.org/x/xerrors" errors "golang.org/x/xerrors"
@ -207,7 +207,7 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
} }
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
event.Print(ctx, fmt.Sprintf("analysis panicked: %s", r), telemetry.Package.Of(pkg.PkgPath)) event.Print(ctx, fmt.Sprintf("analysis panicked: %s", r), tag.Package.Of(pkg.PkgPath))
data.err = errors.Errorf("analysis %s for package %s panicked: %v", analyzer.Name, pkg.PkgPath(), r) data.err = errors.Errorf("analysis %s for package %s panicked: %v", analyzer.Name, pkg.PkgPath(), r)
} }
}() }()
@ -343,7 +343,7 @@ func runAnalysis(ctx context.Context, fset *token.FileSet, analyzer *analysis.An
for _, diag := range diagnostics { for _, diag := range diagnostics {
srcErr, err := sourceError(ctx, fset, pkg, diag) srcErr, err := sourceError(ctx, fset, pkg, diag)
if err != nil { if err != nil {
event.Error(ctx, "unable to compute analysis error position", err, event.TagOf("category", diag.Category), telemetry.Package.Of(pkg.ID())) event.Error(ctx, "unable to compute analysis error position", err, event.TagOf("category", diag.Category), tag.Package.Of(pkg.ID()))
continue continue
} }
data.diagnostics = append(data.diagnostics, srcErr) data.diagnostics = append(data.diagnostics, srcErr)

View File

@ -17,8 +17,8 @@ import (
"sync" "sync"
"golang.org/x/tools/go/packages" "golang.org/x/tools/go/packages"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/memoize" "golang.org/x/tools/internal/memoize"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
@ -143,7 +143,7 @@ func (s *snapshot) buildKey(ctx context.Context, id packageID, mode source.Parse
} }
depHandle, err := s.buildPackageHandle(ctx, depID, mode) depHandle, err := s.buildPackageHandle(ctx, depID, mode)
if err != nil { if err != nil {
event.Error(ctx, "no dep handle", err, telemetry.Package.Of(depID)) event.Error(ctx, "no dep handle", err, tag.Package.Of(depID))
// One bad dependency should not prevent us from checking the entire package. // One bad dependency should not prevent us from checking the entire package.
// Add a special key to mark a bad dependency. // Add a special key to mark a bad dependency.
@ -259,7 +259,7 @@ func (s *snapshot) parseGoHandles(ctx context.Context, files []span.URI, mode so
} }
func typeCheck(ctx context.Context, fset *token.FileSet, m *metadata, mode source.ParseMode, goFiles []source.ParseGoHandle, compiledGoFiles []source.ParseGoHandle, deps map[packagePath]*packageHandle) (*pkg, error) { func typeCheck(ctx context.Context, fset *token.FileSet, m *metadata, mode source.ParseMode, goFiles []source.ParseGoHandle, compiledGoFiles []source.ParseGoHandle, deps map[packagePath]*packageHandle) (*pkg, error) {
ctx, done := event.StartSpan(ctx, "cache.importer.typeCheck", telemetry.Package.Of(m.id)) ctx, done := event.StartSpan(ctx, "cache.importer.typeCheck", tag.Package.Of(m.id))
defer done() defer done()
var rawErrors []error var rawErrors []error
@ -393,7 +393,7 @@ func typeCheck(ctx context.Context, fset *token.FileSet, m *metadata, mode sourc
for _, e := range rawErrors { for _, e := range rawErrors {
srcErr, err := sourceError(ctx, fset, pkg, e) srcErr, err := sourceError(ctx, fset, pkg, e)
if err != nil { if err != nil {
event.Error(ctx, "unable to compute error positions", err, telemetry.Package.Of(pkg.ID())) event.Error(ctx, "unable to compute error positions", err, tag.Package.Of(pkg.ID()))
continue continue
} }
pkg.errors = append(pkg.errors, srcErr) pkg.errors = append(pkg.errors, srcErr)

View File

@ -16,9 +16,9 @@ import (
"golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis"
"golang.org/x/tools/go/packages" "golang.org/x/tools/go/packages"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
errors "golang.org/x/xerrors" errors "golang.org/x/xerrors"
@ -60,7 +60,7 @@ func sourceError(ctx context.Context, fset *token.FileSet, pkg *pkg, e interface
kind = source.ParseError kind = source.ParseError
spn, err = scannerErrorRange(ctx, fset, pkg, e.Pos) spn, err = scannerErrorRange(ctx, fset, pkg, e.Pos)
if err != nil { if err != nil {
event.Error(ctx, "no span for scanner.Error pos", err, telemetry.Package.Of(pkg.ID())) event.Error(ctx, "no span for scanner.Error pos", err, tag.Package.Of(pkg.ID()))
spn = span.Parse(e.Pos.String()) spn = span.Parse(e.Pos.String())
} }
@ -73,7 +73,7 @@ func sourceError(ctx context.Context, fset *token.FileSet, pkg *pkg, e interface
kind = source.ParseError kind = source.ParseError
spn, err = scannerErrorRange(ctx, fset, pkg, e[0].Pos) spn, err = scannerErrorRange(ctx, fset, pkg, e[0].Pos)
if err != nil { if err != nil {
event.Error(ctx, "no span for scanner.Error pos", err, telemetry.Package.Of(pkg.ID())) event.Error(ctx, "no span for scanner.Error pos", err, tag.Package.Of(pkg.ID()))
spn = span.Parse(e[0].Pos.String()) spn = span.Parse(e[0].Pos.String())
} }
case types.Error: case types.Error:

View File

@ -9,8 +9,8 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
errors "golang.org/x/xerrors" errors "golang.org/x/xerrors"
@ -48,7 +48,7 @@ func (h *nativeFileHandle) Identity() source.FileIdentity {
} }
func (h *nativeFileHandle) Read(ctx context.Context) ([]byte, string, error) { func (h *nativeFileHandle) Read(ctx context.Context) ([]byte, string, error) {
ctx, done := event.StartSpan(ctx, "cache.nativeFileHandle.Read", telemetry.File.Of(h.identity.URI.Filename())) ctx, done := event.StartSpan(ctx, "cache.nativeFileHandle.Read", tag.File.Of(h.identity.URI.Filename()))
_ = ctx _ = ctx
defer done() defer done()

View File

@ -12,8 +12,8 @@ import (
"strings" "strings"
"golang.org/x/tools/go/packages" "golang.org/x/tools/go/packages"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/packagesinternal" "golang.org/x/tools/internal/packagesinternal"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
@ -77,7 +77,7 @@ func (s *snapshot) load(ctx context.Context, scopes ...interface{}) error {
} }
sort.Strings(query) // for determinism sort.Strings(query) // for determinism
ctx, done := event.StartSpan(ctx, "cache.view.load", telemetry.Query.Of(query)) ctx, done := event.StartSpan(ctx, "cache.view.load", tag.Query.Of(query))
defer done() defer done()
cfg := s.Config(ctx) cfg := s.Config(ctx)

View File

@ -16,9 +16,9 @@ import (
"golang.org/x/mod/modfile" "golang.org/x/mod/modfile"
"golang.org/x/tools/go/packages" "golang.org/x/tools/go/packages"
"golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/gocommand"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/memoize" "golang.org/x/tools/internal/memoize"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
@ -144,7 +144,7 @@ func (s *snapshot) ModHandle(ctx context.Context, fh source.FileHandle) source.M
view: folder, view: folder,
} }
h := s.view.session.cache.store.Bind(key, func(ctx context.Context) interface{} { h := s.view.session.cache.store.Bind(key, func(ctx context.Context) interface{} {
ctx, done := event.StartSpan(ctx, "cache.ModHandle", telemetry.File.Of(uri)) ctx, done := event.StartSpan(ctx, "cache.ModHandle", tag.File.Of(uri))
defer done() defer done()
contents, _, err := fh.Read(ctx) contents, _, err := fh.Read(ctx)
@ -317,7 +317,7 @@ func (s *snapshot) ModTidyHandle(ctx context.Context, realfh source.FileHandle)
return &modData{} return &modData{}
} }
ctx, done := event.StartSpan(ctx, "cache.ModTidyHandle", telemetry.File.Of(realURI)) ctx, done := event.StartSpan(ctx, "cache.ModTidyHandle", tag.File.Of(realURI))
defer done() defer done()
realContents, _, err := realfh.Read(ctx) realContents, _, err := realfh.Read(ctx)

View File

@ -13,9 +13,9 @@ import (
"go/token" "go/token"
"reflect" "reflect"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/memoize" "golang.org/x/tools/internal/memoize"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
@ -106,7 +106,7 @@ func hashParseKeys(phs []source.ParseGoHandle) string {
} }
func parseGo(ctx context.Context, fset *token.FileSet, fh source.FileHandle, mode source.ParseMode) *parseGoData { func parseGo(ctx context.Context, fset *token.FileSet, fh source.FileHandle, mode source.ParseMode) *parseGoData {
ctx, done := event.StartSpan(ctx, "cache.parseGo", telemetry.File.Of(fh.Identity().URI.Filename())) ctx, done := event.StartSpan(ctx, "cache.parseGo", tag.File.Of(fh.Identity().URI.Filename()))
defer done() defer done()
if fh.Identity().Kind != source.Go { if fh.Identity().Kind != source.Go {

View File

@ -17,8 +17,8 @@ import (
"golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis"
"golang.org/x/tools/go/packages" "golang.org/x/tools/go/packages"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
errors "golang.org/x/xerrors" errors "golang.org/x/xerrors"
@ -151,7 +151,7 @@ func (s *snapshot) PackageHandles(ctx context.Context, fh source.FileHandle) ([]
panic("called PackageHandles on a non-Go FileHandle") panic("called PackageHandles on a non-Go FileHandle")
} }
ctx = event.Label(ctx, telemetry.File.Of(fh.Identity().URI)) ctx = event.Label(ctx, tag.File.Of(fh.Identity().URI))
// Check if we should reload metadata for the file. We don't invalidate IDs // Check if we should reload metadata for the file. We don't invalidate IDs
// (though we should), so the IDs will be a better source of truth than the // (though we should), so the IDs will be a better source of truth than the

View File

@ -24,8 +24,8 @@ import (
"golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/gocommand"
"golang.org/x/tools/internal/imports" "golang.org/x/tools/internal/imports"
"golang.org/x/tools/internal/lsp/debug" "golang.org/x/tools/internal/lsp/debug"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/memoize" "golang.org/x/tools/internal/memoize"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
@ -792,7 +792,7 @@ func (v *view) modfileFlagExists(ctx context.Context, env []string) (bool, error
// If the output is not go1.14 or an empty string, then it could be an error. // If the output is not go1.14 or an empty string, then it could be an error.
lines := strings.Split(stdout.String(), "\n") lines := strings.Split(stdout.String(), "\n")
if len(lines) < 2 && stdout.String() != "" { if len(lines) < 2 && stdout.String() != "" {
event.Error(ctx, "unexpected stdout when checking for go1.14", errors.Errorf("%q", stdout), telemetry.Directory.Of(folder)) event.Error(ctx, "unexpected stdout when checking for go1.14", errors.Errorf("%q", stdout), tag.Directory.Of(folder))
return false, nil return false, nil
} }
return lines[0] == "go1.14", nil return lines[0] == "go1.14", nil

View File

@ -11,10 +11,10 @@ import (
"strings" "strings"
"golang.org/x/tools/internal/imports" "golang.org/x/tools/internal/imports"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/mod" "golang.org/x/tools/internal/lsp/mod"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
errors "golang.org/x/xerrors" errors "golang.org/x/xerrors"
) )
@ -73,7 +73,7 @@ func (s *Server) codeAction(ctx context.Context, params *protocol.CodeActionPara
// First, add the quick fixes reported by go/analysis. // First, add the quick fixes reported by go/analysis.
qf, err := quickFixes(ctx, snapshot, fh, diagnostics) qf, err := quickFixes(ctx, snapshot, fh, diagnostics)
if err != nil { if err != nil {
event.Error(ctx, "quick fixes failed", err, telemetry.File.Of(uri)) event.Error(ctx, "quick fixes failed", err, tag.File.Of(uri))
} }
codeActions = append(codeActions, qf...) codeActions = append(codeActions, qf...)
@ -97,7 +97,7 @@ func (s *Server) codeAction(ctx context.Context, params *protocol.CodeActionPara
} }
actions, err := mod.SuggestedGoFixes(ctx, snapshot, fh, diagnostics) actions, err := mod.SuggestedGoFixes(ctx, snapshot, fh, diagnostics)
if err != nil { if err != nil {
event.Error(ctx, "quick fixes failed", err, telemetry.File.Of(uri)) event.Error(ctx, "quick fixes failed", err, tag.File.Of(uri))
} }
if len(actions) > 0 { if len(actions) > 0 {
codeActions = append(codeActions, actions...) codeActions = append(codeActions, actions...)
@ -234,7 +234,7 @@ func quickFixes(ctx context.Context, snapshot source.Snapshot, fh source.FileHan
for uri, edits := range fix.Edits { for uri, edits := range fix.Edits {
fh, err := snapshot.GetFile(uri) fh, err := snapshot.GetFile(uri)
if err != nil { if err != nil {
event.Error(ctx, "no file", err, telemetry.URI.Of(uri)) event.Error(ctx, "no file", err, tag.URI.Of(uri))
continue continue
} }
action.Edit.DocumentChanges = append(action.Edit.DocumentChanges, documentChanges(fh, edits)...) action.Edit.DocumentChanges = append(action.Edit.DocumentChanges, documentChanges(fh, edits)...)

View File

@ -5,7 +5,7 @@
package debug package debug
import ( import (
"golang.org/x/tools/internal/lsp/telemetry" "golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
"golang.org/x/tools/internal/telemetry/metric" "golang.org/x/tools/internal/telemetry/metric"
) )
@ -18,33 +18,33 @@ var (
receivedBytes = metric.HistogramInt64{ receivedBytes = metric.HistogramInt64{
Name: "received_bytes", Name: "received_bytes",
Description: "Distribution of received bytes, by method.", Description: "Distribution of received bytes, by method.",
Keys: []*event.Key{telemetry.RPCDirection, telemetry.Method}, Keys: []*event.Key{tag.RPCDirection, tag.Method},
Buckets: bytesDistribution, Buckets: bytesDistribution,
}.Record(telemetry.ReceivedBytes) }.Record(tag.ReceivedBytes)
sentBytes = metric.HistogramInt64{ sentBytes = metric.HistogramInt64{
Name: "sent_bytes", Name: "sent_bytes",
Description: "Distribution of sent bytes, by method.", Description: "Distribution of sent bytes, by method.",
Keys: []*event.Key{telemetry.RPCDirection, telemetry.Method}, Keys: []*event.Key{tag.RPCDirection, tag.Method},
Buckets: bytesDistribution, Buckets: bytesDistribution,
}.Record(telemetry.SentBytes) }.Record(tag.SentBytes)
latency = metric.HistogramFloat64{ latency = metric.HistogramFloat64{
Name: "latency", Name: "latency",
Description: "Distribution of latency in milliseconds, by method.", Description: "Distribution of latency in milliseconds, by method.",
Keys: []*event.Key{telemetry.RPCDirection, telemetry.Method}, Keys: []*event.Key{tag.RPCDirection, tag.Method},
Buckets: millisecondsDistribution, Buckets: millisecondsDistribution,
}.Record(telemetry.Latency) }.Record(tag.Latency)
started = metric.Scalar{ started = metric.Scalar{
Name: "started", Name: "started",
Description: "Count of RPCs started by method.", Description: "Count of RPCs started by method.",
Keys: []*event.Key{telemetry.RPCDirection, telemetry.Method}, Keys: []*event.Key{tag.RPCDirection, tag.Method},
}.CountInt64(telemetry.Started) }.CountInt64(tag.Started)
completed = metric.Scalar{ completed = metric.Scalar{
Name: "completed", Name: "completed",
Description: "Count of RPCs completed by method and status.", Description: "Count of RPCs completed by method and status.",
Keys: []*event.Key{telemetry.RPCDirection, telemetry.Method, telemetry.StatusCode}, Keys: []*event.Key{tag.RPCDirection, tag.Method, tag.StatusCode},
}.CountFloat64(telemetry.Latency) }.CountFloat64(tag.Latency)
) )

View File

@ -13,7 +13,7 @@ import (
"sort" "sort"
"sync" "sync"
tlm "golang.org/x/tools/internal/lsp/telemetry" "golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
"golang.org/x/tools/internal/telemetry/metric" "golang.org/x/tools/internal/telemetry/metric"
) )
@ -97,10 +97,10 @@ func (r *rpcs) Metric(ctx context.Context, data event.MetricData) {
defer r.mu.Unlock() defer r.mu.Unlock()
for i, group := range data.Groups() { for i, group := range data.Groups() {
set := &r.Inbound set := &r.Inbound
if group.Get(tlm.RPCDirection) == tlm.Outbound { if group.Get(tag.RPCDirection) == tag.Outbound {
set = &r.Outbound set = &r.Outbound
} }
method, ok := group.Get(tlm.Method).(string) method, ok := group.Get(tag.Method).(string)
if !ok { if !ok {
continue continue
} }
@ -119,7 +119,7 @@ func (r *rpcs) Metric(ctx context.Context, data event.MetricData) {
case started: case started:
stats.Started = data.(*metric.Int64Data).Rows[i] stats.Started = data.(*metric.Int64Data).Rows[i]
case completed: case completed:
status, ok := group.Get(tlm.StatusCode).(string) status, ok := group.Get(tag.StatusCode).(string)
if !ok { if !ok {
log.Printf("Not status... %v", group) log.Printf("Not status... %v", group)
continue continue

View File

@ -2,9 +2,8 @@
// Use of this source code is governed by a BSD-style // Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// Package telemetry provides the hooks and adapters to allow use of telemetry // Package tag provides the labels used for telemetry throughout gopls.
// throughout gopls. package tag
package telemetry
import ( import (
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"

View File

@ -10,10 +10,10 @@ import (
"strings" "strings"
"sync" "sync"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/mod" "golang.org/x/tools/internal/lsp/mod"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
"golang.org/x/tools/internal/xcontext" "golang.org/x/tools/internal/xcontext"
) )
@ -98,7 +98,7 @@ func (s *Server) diagnose(ctx context.Context, snapshot source.Snapshot, alwaysA
} }
s.showedInitialErrorMu.Unlock() s.showedInitialErrorMu.Unlock()
event.Error(ctx, "diagnose: no workspace packages", err, telemetry.Snapshot.Of(snapshot.ID()), telemetry.Directory.Of(snapshot.View().Folder)) event.Error(ctx, "diagnose: no workspace packages", err, tag.Snapshot.Of(snapshot.ID()), tag.Directory.Of(snapshot.View().Folder))
return nil return nil
} }
for _, ph := range wsPackages { for _, ph := range wsPackages {
@ -124,7 +124,7 @@ func (s *Server) diagnose(ctx context.Context, snapshot source.Snapshot, alwaysA
return return
} }
if err != nil { if err != nil {
event.Error(ctx, "diagnose: could not generate diagnostics for package", err, telemetry.Snapshot.Of(snapshot.ID()), telemetry.Package.Of(ph.ID())) event.Error(ctx, "diagnose: could not generate diagnostics for package", err, tag.Snapshot.Of(snapshot.ID()), tag.Package.Of(ph.ID()))
return return
} }
reportsMu.Lock() reportsMu.Lock()
@ -201,7 +201,7 @@ func (s *Server) publishReports(ctx context.Context, snapshot source.Snapshot, r
Version: key.id.Version, Version: key.id.Version,
}); err != nil { }); err != nil {
if ctx.Err() == nil { if ctx.Err() == nil {
event.Error(ctx, "publishReports: failed to deliver diagnostic", err, telemetry.URI.Of(key.id.URI)) event.Error(ctx, "publishReports: failed to deliver diagnostic", err, tag.URI.Of(key.id.URI))
} }
continue continue
} }

View File

@ -12,8 +12,8 @@ import (
"strconv" "strconv"
"golang.org/x/tools/internal/gocommand" "golang.org/x/tools/internal/gocommand"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
errors "golang.org/x/xerrors" errors "golang.org/x/xerrors"
) )
@ -60,7 +60,7 @@ type eventWriter struct {
} }
func (ew *eventWriter) Write(p []byte) (n int, err error) { func (ew *eventWriter) Write(p []byte) (n int, err error) {
event.Print(ew.ctx, string(p), telemetry.Operation.Of("generate")) event.Print(ew.ctx, string(p), tag.Operation.Of("generate"))
return len(p), nil return len(p), nil
} }

View File

@ -7,9 +7,9 @@ package lsp
import ( import (
"context" "context"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
) )
@ -20,7 +20,7 @@ func (s *Server) documentHighlight(ctx context.Context, params *protocol.Documen
} }
rngs, err := source.Highlight(ctx, snapshot, fh, params.Position) rngs, err := source.Highlight(ctx, snapshot, fh, params.Position)
if err != nil { if err != nil {
event.Error(ctx, "no highlight", err, telemetry.URI.Of(params.TextDocument.URI)) event.Error(ctx, "no highlight", err, tag.URI.Of(params.TextDocument.URI))
} }
return toProtocolHighlight(rngs), nil return toProtocolHighlight(rngs), nil
} }

View File

@ -10,7 +10,7 @@ import (
"time" "time"
"golang.org/x/tools/internal/jsonrpc2" "golang.org/x/tools/internal/jsonrpc2"
"golang.org/x/tools/internal/lsp/telemetry" "golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
) )
@ -39,16 +39,16 @@ func (h telemetryHandler) Request(ctx context.Context, conn *jsonrpc2.Conn, dire
payload: r.Params, payload: r.Params,
} }
ctx = context.WithValue(ctx, statsKey, stats) ctx = context.WithValue(ctx, statsKey, stats)
mode := telemetry.Outbound mode := tag.Outbound
if direction == jsonrpc2.Receive { if direction == jsonrpc2.Receive {
mode = telemetry.Inbound mode = tag.Inbound
} }
ctx, stats.close = event.StartSpan(ctx, r.Method, ctx, stats.close = event.StartSpan(ctx, r.Method,
telemetry.Method.Of(r.Method), tag.Method.Of(r.Method),
telemetry.RPCDirection.Of(mode), tag.RPCDirection.Of(mode),
telemetry.RPCID.Of(r.ID), tag.RPCID.Of(r.ID),
) )
telemetry.Started.Record(ctx, 1) tag.Started.Record(ctx, 1)
_, stats.delivering = event.StartSpan(ctx, "queued") _, stats.delivering = event.StartSpan(ctx, "queued")
return ctx return ctx
} }
@ -60,23 +60,23 @@ func (h telemetryHandler) Response(ctx context.Context, conn *jsonrpc2.Conn, dir
func (h telemetryHandler) Done(ctx context.Context, err error) { func (h telemetryHandler) Done(ctx context.Context, err error) {
stats := h.getStats(ctx) stats := h.getStats(ctx)
if err != nil { if err != nil {
ctx = event.Label(ctx, telemetry.StatusCode.Of("ERROR")) ctx = event.Label(ctx, tag.StatusCode.Of("ERROR"))
} else { } else {
ctx = event.Label(ctx, telemetry.StatusCode.Of("OK")) ctx = event.Label(ctx, tag.StatusCode.Of("OK"))
} }
elapsedTime := time.Since(stats.start) elapsedTime := time.Since(stats.start)
latencyMillis := float64(elapsedTime) / float64(time.Millisecond) latencyMillis := float64(elapsedTime) / float64(time.Millisecond)
telemetry.Latency.Record(ctx, latencyMillis) tag.Latency.Record(ctx, latencyMillis)
stats.close() stats.close()
} }
func (h telemetryHandler) Read(ctx context.Context, bytes int64) context.Context { func (h telemetryHandler) Read(ctx context.Context, bytes int64) context.Context {
telemetry.SentBytes.Record(ctx, bytes) tag.SentBytes.Record(ctx, bytes)
return ctx return ctx
} }
func (h telemetryHandler) Wrote(ctx context.Context, bytes int64) context.Context { func (h telemetryHandler) Wrote(ctx context.Context, bytes int64) context.Context {
telemetry.ReceivedBytes.Record(ctx, bytes) tag.ReceivedBytes.Record(ctx, bytes)
return ctx return ctx
} }
@ -88,7 +88,7 @@ func (h telemetryHandler) Error(ctx context.Context, err error) {
func (h telemetryHandler) getStats(ctx context.Context) *rpcStats { func (h telemetryHandler) getStats(ctx context.Context) *rpcStats {
stats, ok := ctx.Value(statsKey).(*rpcStats) stats, ok := ctx.Value(statsKey).(*rpcStats)
if !ok || stats == nil { if !ok || stats == nil {
method, ok := ctx.Value(telemetry.Method).(string) method, ok := ctx.Value(tag.Method).(string)
if !ok { if !ok {
method = "???" method = "???"
} }

View File

@ -6,9 +6,9 @@ import (
"strings" "strings"
"golang.org/x/mod/modfile" "golang.org/x/mod/modfile"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
) )
@ -22,7 +22,7 @@ func CodeLens(ctx context.Context, snapshot source.Snapshot, uri span.URI) ([]pr
if uri != realURI { if uri != realURI {
return nil, nil return nil, nil
} }
ctx, done := event.StartSpan(ctx, "mod.CodeLens", telemetry.File.Of(realURI)) ctx, done := event.StartSpan(ctx, "mod.CodeLens", tag.File.Of(realURI))
defer done() defer done()
fh, err := snapshot.GetFile(realURI) fh, err := snapshot.GetFile(realURI)

View File

@ -12,9 +12,9 @@ import (
"regexp" "regexp"
"golang.org/x/mod/modfile" "golang.org/x/mod/modfile"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
) )
@ -27,7 +27,7 @@ func Diagnostics(ctx context.Context, snapshot source.Snapshot) (map[source.File
return nil, nil, nil return nil, nil, nil
} }
ctx, done := event.StartSpan(ctx, "mod.Diagnostics", telemetry.File.Of(realURI)) ctx, done := event.StartSpan(ctx, "mod.Diagnostics", tag.File.Of(realURI))
defer done() defer done()
realfh, err := snapshot.GetFile(realURI) realfh, err := snapshot.GetFile(realURI)
@ -97,7 +97,7 @@ func SuggestedFixes(ctx context.Context, snapshot source.Snapshot, realfh source
for uri, edits := range fix.Edits { for uri, edits := range fix.Edits {
fh, err := snapshot.GetFile(uri) fh, err := snapshot.GetFile(uri)
if err != nil { if err != nil {
event.Error(ctx, "no file", err, telemetry.URI.Of(uri)) event.Error(ctx, "no file", err, tag.URI.Of(uri))
continue continue
} }
action.Edit.DocumentChanges = append(action.Edit.DocumentChanges, protocol.TextDocumentEdit{ action.Edit.DocumentChanges = append(action.Edit.DocumentChanges, protocol.TextDocumentEdit{
@ -126,7 +126,7 @@ func SuggestedGoFixes(ctx context.Context, snapshot source.Snapshot, gofh source
return nil, nil return nil, nil
} }
ctx, done := event.StartSpan(ctx, "mod.SuggestedGoFixes", telemetry.File.Of(realURI)) ctx, done := event.StartSpan(ctx, "mod.SuggestedGoFixes", tag.File.Of(realURI))
defer done() defer done()
realfh, err := snapshot.GetFile(realURI) realfh, err := snapshot.GetFile(realURI)

View File

@ -14,9 +14,9 @@ import (
"strings" "strings"
"golang.org/x/tools/internal/imports" "golang.org/x/tools/internal/imports"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/snippet" "golang.org/x/tools/internal/lsp/snippet"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
errors "golang.org/x/xerrors" errors "golang.org/x/xerrors"
@ -196,7 +196,7 @@ func (c *completer) item(cand candidate) (CompletionItem, error) {
} }
hover, err := ident.Hover(c.ctx) hover, err := ident.Hover(c.ctx)
if err != nil { if err != nil {
event.Error(c.ctx, "failed to find Hover", err, telemetry.URI.Of(uri)) event.Error(c.ctx, "failed to find Hover", err, tag.URI.Of(uri))
return item, nil return item, nil
} }
item.Documentation = hover.Synopsis item.Documentation = hover.Synopsis

View File

@ -13,8 +13,8 @@ import (
"golang.org/x/mod/modfile" "golang.org/x/mod/modfile"
"golang.org/x/tools/go/analysis" "golang.org/x/tools/go/analysis"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/span" "golang.org/x/tools/internal/span"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
errors "golang.org/x/xerrors" errors "golang.org/x/xerrors"
@ -128,7 +128,7 @@ func Diagnostics(ctx context.Context, snapshot Snapshot, ph PackageHandle, missi
if ctx.Err() != nil { if ctx.Err() != nil {
return nil, warn, ctx.Err() return nil, warn, ctx.Err()
} }
event.Error(ctx, "failed to run analyses", err, telemetry.Package.Of(ph.ID())) event.Error(ctx, "failed to run analyses", err, tag.Package.Of(ph.ID()))
} }
} }
return reports, warn, nil return reports, warn, nil
@ -163,7 +163,7 @@ type diagnosticSet struct {
} }
func diagnostics(ctx context.Context, snapshot Snapshot, reports map[FileIdentity][]Diagnostic, pkg Package, hasMissingDeps bool) (bool, error) { func diagnostics(ctx context.Context, snapshot Snapshot, reports map[FileIdentity][]Diagnostic, pkg Package, hasMissingDeps bool) (bool, error) {
ctx, done := event.StartSpan(ctx, "source.diagnostics", telemetry.Package.Of(pkg.ID())) ctx, done := event.StartSpan(ctx, "source.diagnostics", tag.Package.Of(pkg.ID()))
_ = ctx // circumvent SA4006 _ = ctx // circumvent SA4006
defer done() defer done()

View File

@ -7,9 +7,9 @@ package lsp
import ( import (
"context" "context"
"golang.org/x/tools/internal/lsp/debug/tag"
"golang.org/x/tools/internal/lsp/protocol" "golang.org/x/tools/internal/lsp/protocol"
"golang.org/x/tools/internal/lsp/source" "golang.org/x/tools/internal/lsp/source"
"golang.org/x/tools/internal/lsp/telemetry"
"golang.org/x/tools/internal/telemetry/event" "golang.org/x/tools/internal/telemetry/event"
) )
@ -23,7 +23,7 @@ func (s *Server) documentSymbol(ctx context.Context, params *protocol.DocumentSy
} }
docSymbols, err := source.DocumentSymbols(ctx, snapshot, fh) docSymbols, err := source.DocumentSymbols(ctx, snapshot, fh)
if err != nil { if err != nil {
event.Error(ctx, "DocumentSymbols failed", err, telemetry.URI.Of(fh.Identity().URI)) event.Error(ctx, "DocumentSymbols failed", err, tag.URI.Of(fh.Identity().URI))
return []interface{}{}, nil return []interface{}{}, nil
} }
// Convert the symbols to an interface array. // Convert the symbols to an interface array.