-
Notifications
You must be signed in to change notification settings - Fork 4
/
trace.go
55 lines (44 loc) · 979 Bytes
/
trace.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package server
import (
"fmt"
gtrace "github.com/annetutil/gnetcli/pkg/trace"
)
type MultiTrace interface {
AddTrace(gtrace.Trace) int
DelTrace(int) error
}
type MultiTraceImp struct {
trs map[int]gtrace.Trace
}
func NewMultiTrace() *MultiTraceImp {
return &MultiTraceImp{
trs: map[int]gtrace.Trace{},
}
}
var _ MultiTrace = (*MultiTraceImp)(nil)
var _ gtrace.Trace = (*MultiTraceImp)(nil)
func (m *MultiTraceImp) Add(op gtrace.Operation, data []byte) {
for _, tr := range m.trs {
tr.Add(op, data)
}
}
func (m *MultiTraceImp) List() []gtrace.Item {
panic("not implement List() for MultiTraceImp")
}
func (m *MultiTraceImp) AddTrace(tr gtrace.Trace) int {
for i := 0; i <= len(m.trs); i++ {
if _, ok := m.trs[i]; !ok {
m.trs[i] = tr
return i
}
}
panic("unknown error")
}
func (m *MultiTraceImp) DelTrace(index int) error {
if _, ok := m.trs[index]; ok {
delete(m.trs, index)
} else {
return fmt.Errorf("unknown trace")
}
return nil
}