This repository has been archived by the owner on May 13, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 346
/
events.go
104 lines (93 loc) · 2.2 KB
/
events.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package exec
import (
"fmt"
"strings"
"github.com/hyperledger/burrow/event/query"
"github.com/hyperledger/burrow/execution/errors"
)
type Events []*Event
func (evs *Events) Append(tail ...*Event) {
for i, ev := range tail {
if ev != nil && ev.Header != nil {
ev.Header.Index = uint64(len(*evs) + i)
}
}
*evs = append(*evs, tail...)
}
func (evs *Events) Call(call *CallEvent, exception *errors.Exception) error {
evs.Append(&Event{
Header: &Header{
EventType: TypeCall,
EventID: EventStringAccountCall(call.CallData.Callee),
Exception: exception,
},
Call: call,
})
return nil
}
func (evs *Events) Log(log *LogEvent) error {
evs.Append(&Event{
Header: &Header{
EventType: TypeLog,
EventID: EventStringLogEvent(log.Address),
},
Log: log,
})
return nil
}
func (evs *Events) Print(print *PrintEvent) error {
evs.Append(&Event{
Header: &Header{
EventType: TypePrint,
EventID: EventStringLogEvent(print.Address),
},
Print: print,
})
return nil
}
func (evs Events) CallTrace() string {
var calls []string
for _, ev := range evs {
if ev.Call != nil {
ex := ""
if ev.Header.Exception != nil {
ex = fmt.Sprintf(" [%v]", ev.Header.Exception)
}
calls = append(calls, fmt.Sprintf("%v: %v -> %v: %v%s",
ev.Call.CallType, ev.Call.CallData.Caller, ev.Call.CallData.Callee, ev.Call.Return, ex))
}
}
return strings.Join(calls, "\n")
}
func (evs Events) ExceptionalCalls() []*Event {
var exCalls []*Event
for _, ev := range evs {
if ev.Call != nil && ev.Header.Exception != nil {
exCalls = append(exCalls, ev)
}
}
return exCalls
}
func (evs Events) NestedCallErrors() []errors.NestedCallError {
var nestedErrors []errors.NestedCallError
for _, ev := range evs {
if ev.Call != nil && ev.Header.Exception != nil {
nestedErrors = append(nestedErrors, errors.NestedCallError{
CodedError: ev.Header.Exception,
Caller: ev.Call.CallData.Caller,
Callee: ev.Call.CallData.Callee,
StackDepth: ev.Call.StackDepth,
})
}
}
return nestedErrors
}
func (evs Events) Filter(qry query.Query) Events {
var filtered Events
for _, tev := range evs {
if qry.Matches(tev) {
filtered = append(filtered, tev)
}
}
return filtered
}