Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 1 | package impl |
| 2 | |
| 3 | import ( |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 4 | "v.io/v23/ipc" |
| 5 | svtrace "v.io/v23/services/mgmt/vtrace" |
| 6 | "v.io/v23/uniqueid" |
| 7 | "v.io/v23/verror" |
| 8 | "v.io/v23/vtrace" |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 9 | ) |
| 10 | |
Matt Rosencrantz | 5f98d94 | 2015-01-08 13:48:30 -0800 | [diff] [blame] | 11 | type vtraceService struct{} |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 12 | |
Matt Rosencrantz | 9dce9b2 | 2015-03-02 10:48:37 -0800 | [diff] [blame] | 13 | func (v *vtraceService) Trace(call ipc.ServerCall, id uniqueid.Id) (vtrace.TraceRecord, error) { |
| 14 | store := vtrace.GetStore(call.Context()) |
Matt Rosencrantz | 5f98d94 | 2015-01-08 13:48:30 -0800 | [diff] [blame] | 15 | tr := store.TraceRecord(id) |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 16 | if tr == nil { |
Matt Rosencrantz | 9dce9b2 | 2015-03-02 10:48:37 -0800 | [diff] [blame] | 17 | return vtrace.TraceRecord{}, verror.New(verror.ErrNoExist, call.Context(), "No trace with id %x", id) |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 18 | } |
| 19 | return *tr, nil |
| 20 | } |
| 21 | |
Robin Thellend | bde278d | 2014-11-19 15:07:32 -0800 | [diff] [blame] | 22 | func (v *vtraceService) AllTraces(ctx svtrace.StoreAllTracesContext) error { |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 23 | // TODO(mattr): Consider changing the store to allow us to iterate through traces |
| 24 | // when there are many. |
Matt Rosencrantz | 5f98d94 | 2015-01-08 13:48:30 -0800 | [diff] [blame] | 25 | store := vtrace.GetStore(ctx.Context()) |
| 26 | traces := store.TraceRecords() |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 27 | for i := range traces { |
Robin Thellend | bde278d | 2014-11-19 15:07:32 -0800 | [diff] [blame] | 28 | if err := ctx.SendStream().Send(traces[i]); err != nil { |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 29 | return err |
| 30 | } |
| 31 | } |
| 32 | return nil |
| 33 | } |
| 34 | |
Matt Rosencrantz | 5f98d94 | 2015-01-08 13:48:30 -0800 | [diff] [blame] | 35 | func NewVtraceService() interface{} { |
| 36 | return svtrace.StoreServer(&vtraceService{}) |
Matt Rosencrantz | b30286b | 2014-11-10 14:52:17 -0800 | [diff] [blame] | 37 | } |