-
Notifications
You must be signed in to change notification settings - Fork 159
/
xt.go
108 lines (90 loc) · 2.42 KB
/
xt.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
105
106
107
108
/*
Copyright NetFoundry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package xt
import (
"fmt"
"time"
)
type Registry interface {
RegisterFactory(factory Factory)
GetStrategy(name string) (Strategy, error)
}
type Factory interface {
GetStrategyName() string
NewStrategy() Strategy
}
type Terminator interface {
GetId() string
GetPrecedence() Precedence
GetCost() uint16
GetServiceId() string
GetInstanceId() string
GetRouterId() string
GetBinding() string
GetAddress() string
GetPeerData() PeerData
GetCreatedAt() time.Time
GetHostId() string
}
type PeerData map[uint32][]byte
type CostedTerminator interface {
Terminator
GetRouteCost() uint32
}
type StrategyChangeEvent interface {
GetServiceId() string
GetCurrent() []Terminator
GetAdded() []Terminator
GetChanged() []Terminator
GetRemoved() []Terminator
}
type Strategy interface {
Select(terminators []CostedTerminator) (CostedTerminator, error)
HandleTerminatorChange(event StrategyChangeEvent) error
NotifyEvent(event TerminatorEvent)
}
type Precedence interface {
fmt.Stringer
getMinCost() uint32
getMaxCost() uint32
IsFailed() bool
IsDefault() bool
IsRequired() bool
Unbias(cost uint32) uint32
GetBiasedCost(cost uint32) uint32
}
type TerminatorEvent interface {
GetTerminator() Terminator
Accept(visitor EventVisitor)
}
type EventVisitor interface {
VisitDialFailed(event TerminatorEvent)
VisitDialSucceeded(event TerminatorEvent)
VisitCircuitRemoved(event TerminatorEvent)
}
type Stats interface {
GetCost() uint32
GetPrecedence() Precedence
}
type Costs interface {
ClearCost(terminatorId string)
SetDynamicCost(terminatorId string, weight uint16)
UpdateDynamicCost(terminatorId string, updateF func(uint16) uint16)
GetDynamicCost(terminatorId string) uint16
}
type FailureCosts interface {
Failure(terminatorId string) uint16
Success(terminatorId string) uint16
Clear(terminatorId string)
CreditOverTime(credit uint8, period time.Duration) *time.Ticker
}