Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // Copyright 2015 The Vanadium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Todd Wang | 1ea8f19 | 2015-04-03 17:31:51 -0700 | [diff] [blame] | 5 | package vtracelib |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 6 | |
| 7 | import ( |
Todd Wang | 54feabe | 2015-04-15 23:38:26 -0700 | [diff] [blame^] | 8 | "v.io/v23/context" |
Matt Rosencrantz | 94502cf | 2015-03-18 09:43:44 -0700 | [diff] [blame] | 9 | "v.io/v23/rpc" |
Todd Wang | 94c9d0b | 2015-04-01 14:27:00 -0700 | [diff] [blame] | 10 | s_vtrace "v.io/v23/services/vtrace" |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 11 | "v.io/v23/uniqueid" |
| 12 | "v.io/v23/verror" |
| 13 | "v.io/v23/vtrace" |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 14 | ) |
| 15 | |
Matt Rosencrantz | 5f98d94 | 2015-01-08 13:48:30 -0800 | [diff] [blame] | 16 | type vtraceService struct{} |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 17 | |
Todd Wang | 54feabe | 2015-04-15 23:38:26 -0700 | [diff] [blame^] | 18 | func (v *vtraceService) Trace(ctx *context.T, _ rpc.ServerCall, id uniqueid.Id) (vtrace.TraceRecord, error) { |
| 19 | store := vtrace.GetStore(ctx) |
Matt Rosencrantz | 5f98d94 | 2015-01-08 13:48:30 -0800 | [diff] [blame] | 20 | tr := store.TraceRecord(id) |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 21 | if tr == nil { |
Todd Wang | 54feabe | 2015-04-15 23:38:26 -0700 | [diff] [blame^] | 22 | return vtrace.TraceRecord{}, verror.New(verror.ErrNoExist, ctx, "No trace with id %x", id) |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 23 | } |
| 24 | return *tr, nil |
| 25 | } |
| 26 | |
Todd Wang | 54feabe | 2015-04-15 23:38:26 -0700 | [diff] [blame^] | 27 | func (v *vtraceService) AllTraces(ctx *context.T, call s_vtrace.StoreAllTracesServerCall) error { |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 28 | // TODO(mattr): Consider changing the store to allow us to iterate through traces |
| 29 | // when there are many. |
Todd Wang | 54feabe | 2015-04-15 23:38:26 -0700 | [diff] [blame^] | 30 | store := vtrace.GetStore(ctx) |
Matt Rosencrantz | 5f98d94 | 2015-01-08 13:48:30 -0800 | [diff] [blame] | 31 | traces := store.TraceRecords() |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 32 | for i := range traces { |
Suharsh Sivakumar | 31f4985 | 2015-03-03 16:13:20 -0800 | [diff] [blame] | 33 | if err := call.SendStream().Send(traces[i]); err != nil { |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 34 | return err |
| 35 | } |
| 36 | } |
| 37 | return nil |
| 38 | } |
| 39 | |
Matt Rosencrantz | 5f98d94 | 2015-01-08 13:48:30 -0800 | [diff] [blame] | 40 | func NewVtraceService() interface{} { |
Todd Wang | 94c9d0b | 2015-04-01 14:27:00 -0700 | [diff] [blame] | 41 | return s_vtrace.StoreServer(&vtraceService{}) |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 42 | } |