trace Read endpoint

This commit is contained in:
Asim Aslam 2020-01-24 21:24:51 +00:00
parent eeb6944ce5
commit 8d2dc8a822
3 changed files with 29 additions and 4 deletions

View File

@ -16,7 +16,25 @@ type trace struct {
}
func (t *trace) Read(opts ...ReadOption) ([]*Span, error) {
return []*Span{}, nil
var options ReadOptions
for _, o := range opts {
o(&options)
}
sp := t.buffer.Get(t.buffer.Size())
var spans []*Span
for _, span := range sp {
val := span.Value.(*Span)
// skip if trace id is specified and doesn't match
if len(options.Trace) > 0 && val.Trace != options.Trace {
continue
}
spans = append(spans, val)
}
return spans, nil
}
func (t *trace) Start(ctx context.Context, name string) *Span {
@ -49,7 +67,7 @@ func (t *trace) Start(ctx context.Context, name string) *Span {
func (t *trace) Finish(s *Span) error {
// set finished time
s.Finished = time.Now()
s.Duration = time.Since(s.Started)
// save the span
t.buffer.Put(s)

View File

@ -10,3 +10,10 @@ type ReadOptions struct {
}
type ReadOption func(o *ReadOptions)
// Read the given trace
func ReadTrace(t string) ReadOption {
return func(o *ReadOptions) {
o.Trace = t
}
}

View File

@ -28,8 +28,8 @@ type Span struct {
Parent string
// Start time
Started time.Time
// Finish time
Finished time.Time
// Duration in nano seconds
Duration time.Duration
// associated data
Metadata map[string]string
}