event: minor additions used when updating gopls
Added an Error helper that is a Log that also takes an error.
Added a Find method that searches an event for a named label.
Change-Id: Ie4d7deb669140ae5699e45765823b4ef7ffd3c05
Reviewed-on: https://go-review.googlesource.com/c/exp/+/333069
Trust: Ian Cottrell <iancottrell@google.com>
Run-TryBot: Ian Cottrell <iancottrell@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/event/common.go b/event/common.go
index 68c0008..e98d20b 100644
--- a/event/common.go
+++ b/event/common.go
@@ -49,6 +49,15 @@
}
}
+func Error(ctx context.Context, msg string, err error, labels ...Label) {
+ ev := New(ctx, LogKind)
+ if ev != nil {
+ ev.Labels = append(ev.Labels, labels...)
+ ev.Labels = append(ev.Labels, String("msg", msg), Value("error", err))
+ ev.Deliver()
+ }
+}
+
func Annotate(ctx context.Context, labels ...Label) {
ev := New(ctx, 0)
if ev != nil {
diff --git a/event/event.go b/event/event.go
index bfba077..beff412 100644
--- a/event/event.go
+++ b/event/event.go
@@ -118,3 +118,12 @@
eventPool.Put(ev)
return ctx
}
+
+func (ev *Event) Find(name string) Label {
+ for _, l := range ev.Labels {
+ if l.Name == name {
+ return l
+ }
+ }
+ return Label{}
+}
diff --git a/event/keys/keys.go b/event/keys/keys.go
index a4463fb..b9b7a44 100644
--- a/event/keys/keys.go
+++ b/event/keys/keys.go
@@ -185,3 +185,14 @@
// From can be used to get a value from a Label.
func (k Bool) From(l event.Label) bool { return l.Bool() }
+
+// Error represents a key
+type Error string
+
+// Of creates a new Label with this key and the supplied value.
+func (k Error) Of(v error) event.Label {
+ return event.Value(string(k), v)
+}
+
+// From can be used to get a value from a Label.
+func (k Error) From(l event.Label) error { return l.Interface().(error) }
diff --git a/jsonrpc2/conn.go b/jsonrpc2/conn.go
index f7ddaa1..b4befbf 100644
--- a/jsonrpc2/conn.go
+++ b/jsonrpc2/conn.go
@@ -414,7 +414,7 @@
if err := c.respond(entry, result, rerr); err != nil {
// no way to propagate this error
//TODO: should we do more than just log it?
- event.Log(entry.baseCtx, "jsonrpc2 message delivery failed", event.Value("error", err))
+ event.Error(entry.baseCtx, "jsonrpc2 message delivery failed", err)
}
}