You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
911 B
53 lines
911 B
package simulation |
|
|
|
type LoadBalancerNode struct { |
|
ID string |
|
Queue []*Request |
|
Targets []string |
|
Counter int |
|
Alive bool |
|
Processed []*Request |
|
} |
|
|
|
func (lb *LoadBalancerNode) GetID() string { |
|
return lb.ID |
|
} |
|
|
|
func (lb *LoadBalancerNode) Type() string { |
|
return "loadBalancer" |
|
} |
|
|
|
func (lb *LoadBalancerNode) IsAlive() bool { |
|
return lb.Alive |
|
} |
|
|
|
func (lb *LoadBalancerNode) Receive(req *Request) { |
|
lb.Queue = append(lb.Queue) |
|
} |
|
|
|
func (lb *LoadBalancerNode) Tick(tick int) { |
|
lb.Processed = nil |
|
|
|
for _, req := range lb.Queue { |
|
if len(lb.Targets) == 0 { |
|
continue |
|
} |
|
|
|
target := lb.Targets[lb.Counter%len(lb.Targets)] |
|
lb.Counter++ |
|
|
|
req.Path = append([]string{target}, req.Path...) |
|
|
|
req.LatencyMS += 10 |
|
|
|
lb.Processed = append(lb.Processed, req) |
|
} |
|
|
|
lb.Queue = lb.Queue[:0] |
|
} |
|
|
|
func (lb *LoadBalancerNode) Emit() []*Request { |
|
out := lb.Processed |
|
lb.Processed = nil |
|
return out |
|
}
|
|
|