mirror of
https://github.com/buger/goreplay
synced 2026-04-22 23:27:07 +08:00
40946831b9
change package from `main -> goreplay` this will allow importing `goreplay` as a package
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package goreplay
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// DummyInput used for debugging. It generate 1 "GET /"" request per second.
|
|
type DummyInput struct {
|
|
data chan []byte
|
|
quit chan struct{}
|
|
}
|
|
|
|
// NewDummyInput constructor for DummyInput
|
|
func NewDummyInput(options string) (di *DummyInput) {
|
|
di = new(DummyInput)
|
|
di.data = make(chan []byte)
|
|
di.quit = make(chan struct{})
|
|
|
|
go di.emit()
|
|
|
|
return
|
|
}
|
|
|
|
// PluginRead reads message from this plugin
|
|
func (i *DummyInput) PluginRead() (*Message, error) {
|
|
var msg Message
|
|
select {
|
|
case <-i.quit:
|
|
return nil, ErrorStopped
|
|
case buf := <-i.data:
|
|
msg.Meta, msg.Data = payloadMetaWithBody(buf)
|
|
return &msg, nil
|
|
}
|
|
}
|
|
|
|
func (i *DummyInput) emit() {
|
|
ticker := time.NewTicker(time.Second)
|
|
|
|
for range ticker.C {
|
|
uuid := uuid()
|
|
reqh := payloadHeader(RequestPayload, uuid, time.Now().UnixNano(), -1)
|
|
i.data <- append(reqh, []byte("GET / HTTP/1.1\r\nHost: www.w3.org\r\nUser-Agent: Go 1.1 package http\r\nAccept-Encoding: gzip\r\n\r\n")...)
|
|
|
|
resh := payloadHeader(ResponsePayload, uuid, time.Now().UnixNano()+1, 1)
|
|
i.data <- append(resh, []byte("HTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n")...)
|
|
}
|
|
}
|
|
|
|
func (i *DummyInput) String() string {
|
|
return "Dummy Input"
|
|
}
|
|
|
|
// Close closes this plugins
|
|
func (i *DummyInput) Close() error {
|
|
close(i.quit)
|
|
return nil
|
|
}
|