Files
old-vegeta/targets.go
Tomás Senart c88c8c4fb5 Working Vegeta
2013-08-14 14:13:12 +02:00

62 lines
1.2 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) {
reader := bufio.NewReader(source)
targets := make([]*http.Request, 0)
for {
line, err := reader.ReadString('\n')
if err != nil && err == io.EOF {
break
} else if err != nil {
return targets, err
}
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)
}
return targets, nil
}
func (t Targets) Iter(random bool) []int {
if random {
return rand.Perm(len(t))
}
iter := make([]int, len(t))
for i := 0; i < len(t); i++ {
iter[i] = i
}
return iter
}