blob: e1427a897bf640cf3bf5347b6f22c9b27d09c9a6 [file] [log] [blame]
Jiri Simsad7616c92015-03-24 23:44:30 -07001// 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 Wang1ea8f192015-04-03 17:31:51 -07005package vtracelib
Matt Rosencrantzb30286b2014-11-10 14:52:17 -08006
7import (
Todd Wang54feabe2015-04-15 23:38:26 -07008 "v.io/v23/context"
Matt Rosencrantz94502cf2015-03-18 09:43:44 -07009 "v.io/v23/rpc"
Todd Wang94c9d0b2015-04-01 14:27:00 -070010 s_vtrace "v.io/v23/services/vtrace"
Jiri Simsa6ac95222015-02-23 16:11:49 -080011 "v.io/v23/uniqueid"
12 "v.io/v23/verror"
13 "v.io/v23/vtrace"
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080014)
15
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080016type vtraceService struct{}
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080017
Todd Wang54feabe2015-04-15 23:38:26 -070018func (v *vtraceService) Trace(ctx *context.T, _ rpc.ServerCall, id uniqueid.Id) (vtrace.TraceRecord, error) {
19 store := vtrace.GetStore(ctx)
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080020 tr := store.TraceRecord(id)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080021 if tr == nil {
Todd Wang54feabe2015-04-15 23:38:26 -070022 return vtrace.TraceRecord{}, verror.New(verror.ErrNoExist, ctx, "No trace with id %x", id)
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080023 }
24 return *tr, nil
25}
26
Todd Wang54feabe2015-04-15 23:38:26 -070027func (v *vtraceService) AllTraces(ctx *context.T, call s_vtrace.StoreAllTracesServerCall) error {
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080028 // TODO(mattr): Consider changing the store to allow us to iterate through traces
29 // when there are many.
Todd Wang54feabe2015-04-15 23:38:26 -070030 store := vtrace.GetStore(ctx)
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080031 traces := store.TraceRecords()
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080032 for i := range traces {
Suharsh Sivakumar31f49852015-03-03 16:13:20 -080033 if err := call.SendStream().Send(traces[i]); err != nil {
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080034 return err
35 }
36 }
37 return nil
38}
39
Matt Rosencrantz5f98d942015-01-08 13:48:30 -080040func NewVtraceService() interface{} {
Todd Wang94c9d0b2015-04-01 14:27:00 -070041 return s_vtrace.StoreServer(&vtraceService{})
Matt Rosencrantzb30286b2014-11-10 14:52:17 -080042}