Skip to content

Commit be66d3c

Browse files
committed
Refactor to split handler and server.
Signed-off-by: Kevin McDermott <[email protected]>
1 parent a6d0852 commit be66d3c

File tree

3 files changed

+36
-23
lines changed

3 files changed

+36
-23
lines changed

internal/server/receiver_handler_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -919,11 +919,11 @@ func Test_handlePayload(t *testing.T) {
919919
}
920920

921921
client := builder.Build()
922-
s := ReceiverServer{
923-
port: "",
924-
logger: logger.NewLogger(logger.Options{}),
925-
kubeClient: client,
926-
}
922+
s := newReceiverHandler(
923+
logger.NewLogger(logger.Options{}),
924+
client,
925+
false,
926+
)
927927

928928
data, err := json.Marshal(tt.payload)
929929
if err != nil {

internal/server/receiver_handlers.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,27 @@ func IndexReceiverWebhookPath(o client.Object) []string {
7777
return nil
7878
}
7979

80-
func (s *ReceiverServer) handlePayload(w http.ResponseWriter, r *http.Request) {
81-
ctx := context.Background()
80+
func newReceiverHandler(logger logr.Logger, kubeClient client.Client, exportHTTPPathMetrics bool) *receiverHandler {
81+
h := &receiverHandler{
82+
logger: logger.WithName("receiver-server"),
83+
kubeClient: kubeClient,
84+
exportHTTPPathMetrics: exportHTTPPathMetrics,
85+
ServeMux: http.NewServeMux(),
86+
}
87+
h.ServeMux.Handle(apiv1.ReceiverWebhookPath, http.HandlerFunc(h.handlePayload))
88+
89+
return h
90+
}
91+
92+
type receiverHandler struct {
93+
logger logr.Logger
94+
kubeClient client.Client
95+
exportHTTPPathMetrics bool
96+
*http.ServeMux
97+
}
98+
99+
func (s *receiverHandler) handlePayload(w http.ResponseWriter, r *http.Request) {
100+
ctx := r.Context()
82101
digest := url.PathEscape(strings.TrimPrefix(r.RequestURI, apiv1.ReceiverWebhookPath))
83102

84103
s.logger.Info(fmt.Sprintf("handling request: %s", digest))
@@ -150,7 +169,7 @@ func (s *ReceiverServer) handlePayload(w http.ResponseWriter, r *http.Request) {
150169
}
151170
}
152171

153-
func (s *ReceiverServer) validate(ctx context.Context, receiver apiv1.Receiver, r *http.Request) error {
172+
func (s *receiverHandler) validate(ctx context.Context, receiver apiv1.Receiver, r *http.Request) error {
154173
token, err := s.token(ctx, receiver)
155174
if err != nil {
156175
return fmt.Errorf("unable to read token, error: %w", err)
@@ -394,7 +413,7 @@ func (s *ReceiverServer) validate(ctx context.Context, receiver apiv1.Receiver,
394413
return fmt.Errorf("recevier type '%s' not supported", receiver.Spec.Type)
395414
}
396415

397-
func (s *ReceiverServer) token(ctx context.Context, receiver apiv1.Receiver) (string, error) {
416+
func (s *receiverHandler) token(ctx context.Context, receiver apiv1.Receiver) (string, error) {
398417
token := ""
399418
secretName := types.NamespacedName{
400419
Namespace: receiver.GetNamespace(),
@@ -417,7 +436,7 @@ func (s *ReceiverServer) token(ctx context.Context, receiver apiv1.Receiver) (st
417436
}
418437

419438
// requestReconciliation requests reconciliation of all the resources matching the given CrossNamespaceObjectReference by annotating them accordingly.
420-
func (s *ReceiverServer) requestReconciliation(ctx context.Context, logger logr.Logger, resource apiv1.CrossNamespaceObjectReference, defaultNamespace string) error {
439+
func (s *receiverHandler) requestReconciliation(ctx context.Context, logger logr.Logger, resource apiv1.CrossNamespaceObjectReference, defaultNamespace string) error {
421440
namespace := defaultNamespace
422441
if resource.Namespace != "" {
423442
namespace = resource.Namespace
@@ -500,7 +519,7 @@ func (s *ReceiverServer) requestReconciliation(ctx context.Context, logger logr.
500519
return nil
501520
}
502521

503-
func (s *ReceiverServer) annotate(ctx context.Context, resource *metav1.PartialObjectMetadata) error {
522+
func (s *receiverHandler) annotate(ctx context.Context, resource *metav1.PartialObjectMetadata) error {
504523
patch := client.MergeFrom(resource.DeepCopy())
505524
sourceAnnotations := resource.GetAnnotations()
506525

@@ -565,7 +584,7 @@ func getGroupVersion(s string) (string, string) {
565584
return slice[0], slice[1]
566585
}
567586

568-
func (s *ReceiverServer) evaluateResourceExpressions(r *http.Request, receiver apiv1.Receiver) ([]apiv1.CrossNamespaceObjectReference, error) {
587+
func (s *receiverHandler) evaluateResourceExpressions(r *http.Request, receiver apiv1.Receiver) ([]apiv1.CrossNamespaceObjectReference, error) {
569588
if len(receiver.Spec.ResourceExpressions) == 0 {
570589
return nil, nil
571590
}

internal/server/receiver_server.go

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,31 +32,25 @@ import (
3232

3333
// ReceiverServer handles webhook POST requests
3434
type ReceiverServer struct {
35-
port string
36-
logger logr.Logger
37-
kubeClient client.Client
38-
exportHTTPPathMetrics bool
35+
port string
36+
*receiverHandler
3937
}
4038

4139
// NewReceiverServer returns an HTTP server that handles webhooks
4240
func NewReceiverServer(port string, logger logr.Logger, kubeClient client.Client, exportHTTPPathMetrics bool) *ReceiverServer {
4341
return &ReceiverServer{
44-
port: port,
45-
logger: logger.WithName("receiver-server"),
46-
kubeClient: kubeClient,
47-
exportHTTPPathMetrics: exportHTTPPathMetrics,
42+
port: port,
43+
receiverHandler: newReceiverHandler(logger, kubeClient, exportHTTPPathMetrics),
4844
}
4945
}
5046

5147
// ListenAndServe starts the HTTP server on the specified port
5248
func (s *ReceiverServer) ListenAndServe(stopCh <-chan struct{}, mdlw middleware.Middleware) {
53-
mux := http.NewServeMux()
54-
mux.Handle(apiv1.ReceiverWebhookPath, http.HandlerFunc(s.handlePayload))
5549
handlerID := apiv1.ReceiverWebhookPath
5650
if s.exportHTTPPathMetrics {
5751
handlerID = ""
5852
}
59-
h := std.Handler(handlerID, mdlw, mux)
53+
h := std.Handler(handlerID, mdlw, s.receiverHandler)
6054
srv := &http.Server{
6155
Addr: s.port,
6256
Handler: h,

0 commit comments

Comments
 (0)