aboutsummaryrefslogtreecommitdiff
path: root/application/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'application/pkg')
-rw-r--r--application/pkg/specimen/handler.go34
-rw-r--r--application/pkg/specimen/server.go14
2 files changed, 39 insertions, 9 deletions
diff --git a/application/pkg/specimen/handler.go b/application/pkg/specimen/handler.go
index 05a56ec..6d4e733 100644
--- a/application/pkg/specimen/handler.go
+++ b/application/pkg/specimen/handler.go
@@ -1,19 +1,47 @@
package specimen
import (
+ "fmt"
"log/slog"
"net/http"
)
type requestHandler struct {
logger *slog.Logger
+ name string
}
-func newRequestHandler(logger *slog.Logger) *requestHandler {
- return &requestHandler{logger: logger}
+func newRequestHandler(logger *slog.Logger, name string) *requestHandler {
+ return &requestHandler{logger: logger, name: name}
}
func (h *requestHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
- h.logger.Info("received a request!", slog.String("method", r.Method), slog.String("url", r.URL.String()))
+ // NOTE: we could also write some logger middleware,
+ // but that probably would be overkill for this...
+ logger := h.logger.With(requestLogAttrs(r))
+ logger.Info("incoming request.")
+
+ reply := h.message()
+
+ w.Header().Set("Content-Type", "text/plain")
w.WriteHeader(http.StatusOK)
+ if _, err := w.Write([]byte(reply)); err != nil {
+ logger.Error("failed to write the response.", slog.Any("error", err))
+ return
+ }
+
+ logger.Info("request successfully handled.")
+}
+
+func (h *requestHandler) message() string {
+ return fmt.Sprintf("hello %s", h.name)
+}
+
+func requestLogAttrs(r *http.Request) slog.Attr {
+ return slog.Group(
+ "request",
+ slog.String("method", r.Method),
+ slog.String("url", r.URL.String()),
+ slog.String("remote_addr", r.RemoteAddr),
+ )
}
diff --git a/application/pkg/specimen/server.go b/application/pkg/specimen/server.go
index cccf6e2..2a222a3 100644
--- a/application/pkg/specimen/server.go
+++ b/application/pkg/specimen/server.go
@@ -6,23 +6,25 @@ import (
"log/slog"
"net/http"
"time"
-)
-const port = 4444
+ "git.rnrd.eu/specimen/cmd/specimen/cfg"
+)
type Server struct {
logger *slog.Logger
+ config cfg.Config
server *http.Server
handler *requestHandler
}
-func NewServer(logger *slog.Logger) *Server {
- handler := newRequestHandler(logger)
+func NewServer(logger *slog.Logger, config cfg.Config) *Server {
+ handler := newRequestHandler(logger, config.Name)
return &Server{
logger: logger,
+ config: config,
server: &http.Server{
- Addr: fmt.Sprintf(":%d", port),
+ Addr: fmt.Sprintf("%s:%d", config.Address, config.Port),
Handler: handler,
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
@@ -31,7 +33,7 @@ func NewServer(logger *slog.Logger) *Server {
}
func (s *Server) Start(ctx context.Context) {
- s.logger.Info("listening for incoming connections...")
+ s.logger.Info("listening for incoming connections...", slog.String("address", s.server.Addr))
err := s.server.ListenAndServe()
switch err {