summary refs log tree commit diff
path: root/application/pkg
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2024-12-29 18:06:59 +0100
committerMel <einebeere@gmail.com>2024-12-29 18:06:59 +0100
commit18c168e2debe952e932e360ec3dbc9c58ad3cd3f (patch)
tree2d7a118a18e5edc17b06fe7a313811711c45ad50 /application/pkg
parent5025fab41ac37665ad35967f1f03c16588461605 (diff)
downloadspecimen-18c168e2debe952e932e360ec3dbc9c58ad3cd3f.tar.zst
specimen-18c168e2debe952e932e360ec3dbc9c58ad3cd3f.zip
Read configuration from flags and reply with configured name step-1
Signed-off-by: Mel <einebeere@gmail.com>
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 {