Files
old-vegeta/targets.go
2013-08-16 19:46:40 +02:00

58 lines
1.1 KiB
Go

package main
import (
"bufio"
"fmt"
"io"
"math/rand"
"net/http"
"os"
"strings"
)
type Targets []*http.Request
func NewTargetsFromFile(filename string) (Targets, error) {
file, err := os.Open(filename)
if err != nil {
return Targets{}, err
}
defer file.Close()
return NewTargets(file)
}
func NewTargets(source io.Reader) (Targets, error) {
targets := make([]*http.Request, 0)
scanner := bufio.NewScanner(source)
for scanner.Scan() {
line := scanner.Text()
if line = strings.TrimSpace(line); line == "" { // Empty line
continue
}
parts := strings.SplitN(line, " ", 2)
if len(parts) != 2 {
return targets, fmt.Errorf("Invalid request format: `%s`", line)
}
// Build request
req, err := http.NewRequest(parts[0], parts[1], nil)
if err != nil {
return targets, fmt.Errorf("Failed to build request: %s", err)
}
targets = append(targets, req)
}
if err := scanner.Err(); err != nil {
return targets, err
}
return targets, nil
}
func (t Targets) Shuffle(seed int64) {
rand.Seed(seed)
for i, rnd := range rand.Perm(len(t)) {
tmp := t[i]
t[i] = t[rnd]
t[rnd] = tmp
}
}