blob: 7fc760e0eb9a5a1d9d8f1f766f95a8261907ddcb [file] [log] [blame]
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Package event provides support for event based telemetry.
package event
import (
"fmt"
"time"
)
type eventType uint8
const (
LogType = eventType(iota)
StartSpanType
EndSpanType
LabelType
QueryType
DetachType
)
type Event struct {
Type eventType
At time.Time
Message string
Error error
Tags TagList
}
func (e Event) IsLog() bool { return e.Type == LogType }
func (e Event) IsEndSpan() bool { return e.Type == EndSpanType }
func (e Event) IsStartSpan() bool { return e.Type == StartSpanType }
func (e Event) IsLabel() bool { return e.Type == LabelType }
func (e Event) IsQuery() bool { return e.Type == QueryType }
func (e Event) IsDetach() bool { return e.Type == DetachType }
func (e Event) Format(f fmt.State, r rune) {
if !e.At.IsZero() {
fmt.Fprint(f, e.At.Format("2006/01/02 15:04:05 "))
}
fmt.Fprint(f, e.Message)
if e.Error != nil {
if f.Flag('+') {
fmt.Fprintf(f, ": %+v", e.Error)
} else {
fmt.Fprintf(f, ": %v", e.Error)
}
}
for _, tag := range e.Tags {
fmt.Fprintf(f, "\n\t%s = %v", tag.Key.Name, tag.Value)
}
}