blob: 3f331484b0320dde82094148185d636bb0366e4f [file] [log] [blame]
Matt Rosencrantzb30286b2014-11-10 14:52:17 -08001package impl
2
3import (
Jiri Simsa6ac95222015-02-23 16:11:49 -08004 "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 Rosencrantzb30286b2014-11-10 14:52:17 -08009)
10
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080011type vtraceService struct{}
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080012
Matt Rosencrantz9dce9b22015-03-02 10:48:37 -080013func (v *vtraceService) Trace(call ipc.ServerCall, id uniqueid.Id) (vtrace.TraceRecord, error) {
14 store := vtrace.GetStore(call.Context())
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080015 tr := store.TraceRecord(id)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080016 if tr == nil {
Matt Rosencrantz9dce9b22015-03-02 10:48:37 -080017 return vtrace.TraceRecord{}, verror.New(verror.ErrNoExist, call.Context(), "No trace with id %x", id)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080018 }
19 return *tr, nil
20}
21
Robin Thellendbde278d2014-11-19 15:07:32 -080022func (v *vtraceService) AllTraces(ctx svtrace.StoreAllTracesContext) error {
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080023 // TODO(mattr): Consider changing the store to allow us to iterate through traces
24 // when there are many.
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080025 store := vtrace.GetStore(ctx.Context())
26 traces := store.TraceRecords()
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080027 for i := range traces {
Robin Thellendbde278d2014-11-19 15:07:32 -080028 if err := ctx.SendStream().Send(traces[i]); err != nil {
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080029 return err
30 }
31 }
32 return nil
33}
34
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080035func NewVtraceService() interface{} {
36 return svtrace.StoreServer(&vtraceService{})
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080037}