2020-04-01 02:08:21 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"github.com/baez90/inetmock/internal/config"
|
|
|
|
"go.uber.org/zap"
|
|
|
|
"net/http"
|
|
|
|
"sync"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
|
|
name = "http_mock"
|
|
|
|
)
|
|
|
|
|
2020-04-01 22:58:44 +00:00
|
|
|
type httpHandler struct {
|
2020-04-01 02:08:21 +00:00
|
|
|
logger *zap.Logger
|
|
|
|
router *RegexpHandler
|
|
|
|
server *http.Server
|
|
|
|
}
|
|
|
|
|
2020-04-01 22:58:44 +00:00
|
|
|
func (p *httpHandler) Run(config config.HandlerConfig) {
|
2020-04-01 02:08:21 +00:00
|
|
|
options := loadFromConfig(config.Options())
|
|
|
|
addr := fmt.Sprintf("%s:%d", config.ListenAddress(), config.Port())
|
|
|
|
p.server = &http.Server{Addr: addr, Handler: p.router}
|
|
|
|
p.logger = p.logger.With(
|
|
|
|
zap.String("address", addr),
|
|
|
|
)
|
|
|
|
|
|
|
|
for _, rule := range options.Rules {
|
|
|
|
p.setupRoute(rule)
|
|
|
|
}
|
|
|
|
|
|
|
|
go p.startServer()
|
|
|
|
}
|
|
|
|
|
2020-04-01 22:58:44 +00:00
|
|
|
func (p *httpHandler) Shutdown(wg *sync.WaitGroup) {
|
2020-04-12 01:51:41 +00:00
|
|
|
p.logger.Info("Shutting down HTTP mock")
|
2020-04-01 02:08:21 +00:00
|
|
|
if err := p.server.Close(); err != nil {
|
|
|
|
p.logger.Error(
|
|
|
|
"failed to shutdown HTTP server",
|
|
|
|
zap.Error(err),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
|
|
|
|
wg.Done()
|
|
|
|
}
|
|
|
|
|
2020-04-01 22:58:44 +00:00
|
|
|
func (p *httpHandler) startServer() {
|
2020-04-01 02:08:21 +00:00
|
|
|
if err := p.server.ListenAndServe(); err != nil {
|
|
|
|
p.logger.Error(
|
|
|
|
"failed to start http listener",
|
|
|
|
zap.Error(err),
|
|
|
|
)
|
|
|
|
}
|
|
|
|
}
|