-
Notifications
You must be signed in to change notification settings - Fork 0
/
http.go
54 lines (49 loc) · 1.57 KB
/
http.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
package sender
import (
"github.com/Borislavv/go-ddos/config"
"github.com/Borislavv/go-ddos/internal/flooder/domain/service/sender/middleware/req"
respmiddleware "github.com/Borislavv/go-ddos/internal/flooder/domain/service/sender/middleware/resp"
"github.com/Borislavv/go-ddos/internal/flooder/infrastructure/httpclient"
logservice "github.com/Borislavv/go-ddos/internal/log/domain/service"
statservice "github.com/Borislavv/go-ddos/internal/stat/domain/service"
"net/http"
)
type Http struct {
cfg *config.Config
logger logservice.Logger
httpClient httpclient.Pooled
collector statservice.Collector
}
func NewHttp(
cfg *config.Config,
logger logservice.Logger,
httpClient httpclient.Pooled,
collector statservice.Collector,
) *Http {
s := &Http{
cfg: cfg,
logger: logger,
httpClient: httpClient,
collector: collector,
}
s.addMiddlewares()
return s
}
func (s *Http) Send(req *http.Request) {
_, _ = s.httpClient.Do(req)
}
func (s *Http) addMiddlewares() {
s.httpClient.
OnReq(
reqmiddleware.NewInitRequestMiddleware(s.logger).InitRequest,
reqmiddleware.NewRandUrlMiddleware([]string{s.cfg.URL}, s.logger).AddRandUrl,
reqmiddleware.NewTimestampMiddleware().AddTimestamp,
).
OnResp(
respmiddleware.NewErrorMiddleware(s.logger).HandleError,
respmiddleware.NewStatusCodeMiddleware(s.logger).HandleStatusCode,
respmiddleware.NewExpectedDataMiddleware(s.cfg, s.logger).CheckData,
respmiddleware.NewMetricsMiddleware(s.logger, s.collector).CollectMetrics,
respmiddleware.NewCloseBodyMiddleware(s.logger).CloseResponseBody,
)
}