Simplify random ordering code
This commit is contained in:
7
main.go
7
main.go
@@ -4,7 +4,6 @@ import (
|
|||||||
"flag"
|
"flag"
|
||||||
"io"
|
"io"
|
||||||
"log"
|
"log"
|
||||||
"math/rand"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
@@ -42,7 +41,7 @@ func main() {
|
|||||||
|
|
||||||
switch *ordering {
|
switch *ordering {
|
||||||
case "random":
|
case "random":
|
||||||
rand.Seed(time.Now().UnixNano())
|
targets.Shuffle(time.Now().UnixNano())
|
||||||
case "sequential":
|
case "sequential":
|
||||||
break
|
break
|
||||||
default:
|
default:
|
||||||
@@ -92,8 +91,8 @@ func attack(targets Targets, ordering string, rate uint, duration time.Duration,
|
|||||||
defer close(responses)
|
defer close(responses)
|
||||||
client := NewClient(rate)
|
client := NewClient(rate)
|
||||||
go client.Drill(hits, responses) // Attack!
|
go client.Drill(hits, responses) // Attack!
|
||||||
for i, idxs := 0, targets.Iter(ordering); i < cap(hits); i++ {
|
for i := 0; i < cap(hits); i++ {
|
||||||
hits <- targets[idxs[i%len(idxs)]]
|
hits <- targets[i%len(targets)]
|
||||||
}
|
}
|
||||||
// Wait for all requests to finish
|
// Wait for all requests to finish
|
||||||
for i := 0; i < cap(responses); i++ {
|
for i := 0; i < cap(responses); i++ {
|
||||||
|
|||||||
14
targets.go
14
targets.go
@@ -49,13 +49,11 @@ func NewTargets(source io.Reader) (Targets, error) {
|
|||||||
return targets, nil
|
return targets, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t Targets) Iter(ordering string) []int {
|
func (t Targets) Shuffle(seed int64) {
|
||||||
if ordering == "random" {
|
rand.Seed(seed)
|
||||||
return rand.Perm(len(t))
|
for i, rnd := range rand.Perm(len(t)) {
|
||||||
|
tmp := t[i]
|
||||||
|
t[i] = t[rnd]
|
||||||
|
t[rnd] = tmp
|
||||||
}
|
}
|
||||||
iter := make([]int, len(t))
|
|
||||||
for i := 0; i < len(t); i++ {
|
|
||||||
iter[i] = i
|
|
||||||
}
|
|
||||||
return iter
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user