Skip to content

Commit 556f8ff

Browse files
committed
Add slog structured logging to main controllers
Integrated slog logging into the MirrorPeerSecretReconciler, MirrorPeerReconciler, and DRPolicyReconciler controllers. Improved error handling and logging for better observability and debugging. Replaced klog with slog for consistency across the codebase. Changes include: Added Logger field to controller structs to pass and use slog.Logger. Enhanced logging messages to provide more context, including function names, object names, namespaces, and error details. Signed-off-by: vbadrina <vbadrina@redhat.com>
1 parent d9a23ce commit 556f8ff

32 files changed

+892
-549
lines changed

.golangci.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@ run:
55
timeout: 5m
66
modules-download-mode: readonly
77

8+
9+
linters:
10+
enable:
11+
- sloglint
12+
813
linters-settings:
914
errcheck:
1015
# report about not checking of errors in type assertions: `a := b.(MyStruct)`;

addons/agent_mirrorpeer_controller.go

Lines changed: 143 additions & 81 deletions
Large diffs are not rendered by default.

addons/agent_mirrorpeer_controller_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ func TestMirrorPeerReconcile(t *testing.T) {
148148
SpokeClient: fakeSpokeClient,
149149
Scheme: scheme,
150150
SpokeClusterName: pr.ClusterName,
151+
Logger: utils.GetLogger(utils.GetZapLogger(true)),
151152
}
152153

153154
req := ctrl.Request{
@@ -209,6 +210,7 @@ func TestDisableMirroring(t *testing.T) {
209210
SpokeClient: fakeSpokeClient,
210211
Scheme: scheme,
211212
SpokeClusterName: pr.ClusterName,
213+
Logger: utils.GetLogger(utils.GetZapLogger(true)),
212214
}
213215
if err := r.disableMirroring(ctx, pr.StorageClusterRef.Name, pr.StorageClusterRef.Namespace, &mirrorpeer1); err != nil {
214216
t.Error("failed to disable mirroring", err)
@@ -258,6 +260,7 @@ func TestDeleteGreenSecret(t *testing.T) {
258260
SpokeClient: fakeSpokeClient,
259261
Scheme: scheme,
260262
SpokeClusterName: pr.ClusterName,
263+
Logger: utils.GetLogger(utils.GetZapLogger(true)),
261264
}
262265

263266
if err := r.deleteGreenSecret(ctx, pr.ClusterName, pr.StorageClusterRef.Namespace, &mirrorpeer1); err != nil {
@@ -297,6 +300,7 @@ func TestDeleteS3(t *testing.T) {
297300
SpokeClient: fakeSpokeClient,
298301
Scheme: scheme,
299302
SpokeClusterName: pr.ClusterName,
303+
Logger: utils.GetLogger(utils.GetZapLogger(true)),
300304
}
301305
if err := r.deleteS3(ctx, mirrorpeer1, pr.StorageClusterRef.Namespace); err != nil {
302306
t.Errorf("failed to delete s3 bucket")

addons/blue_secret_controller.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package addons
22

33
import (
44
"context"
5+
"log/slog"
56

67
ctrl "sigs.k8s.io/controller-runtime"
78
"sigs.k8s.io/controller-runtime/pkg/builder"
@@ -13,7 +14,6 @@ import (
1314
corev1 "k8s.io/api/core/v1"
1415
"k8s.io/apimachinery/pkg/api/errors"
1516
"k8s.io/apimachinery/pkg/runtime"
16-
"k8s.io/klog/v2"
1717
)
1818

1919
// BlueSecretReconciler reconciles a MirrorPeer object
@@ -22,6 +22,7 @@ type BlueSecretReconciler struct {
2222
HubClient client.Client
2323
SpokeClient client.Client
2424
SpokeClusterName string
25+
Logger *slog.Logger
2526
}
2627

2728
// SetupWithManager sets up the controller with the Manager.
@@ -45,6 +46,8 @@ func (r *BlueSecretReconciler) SetupWithManager(mgr ctrl.Manager) error {
4546
},
4647
}
4748

49+
r.Logger.Info("Setting up controller with manager")
50+
4851
return ctrl.NewControllerManagedBy(mgr).
4952
Named("bluesecret_controller").
5053
Watches(&corev1.Secret{}, &handler.EnqueueRequestForObject{},
@@ -55,22 +58,26 @@ func (r *BlueSecretReconciler) SetupWithManager(mgr ctrl.Manager) error {
5558
func (r *BlueSecretReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
5659
var err error
5760
var secret corev1.Secret
61+
logger := r.Logger.With("secret", req.NamespacedName.String())
5862

59-
klog.Info("Reconciling blue secret", "secret", req.NamespacedName.String())
63+
logger.Info("Starting reconciliation for BlueSecret")
6064
err = r.SpokeClient.Get(ctx, req.NamespacedName, &secret)
6165
if err != nil {
6266
if errors.IsNotFound(err) {
63-
klog.Infof("Could not find secret. Ignoring since it must have been deleted")
67+
logger.Info("BlueSecret not found, possibly deleted")
6468
return ctrl.Result{}, nil
6569
}
66-
klog.Error("Failed to get secret.", err)
70+
logger.Error("Failed to retrieve BlueSecret", "error", err)
6771
return ctrl.Result{}, err
6872
}
6973

74+
logger.Info("Successfully retrieved BlueSecret")
7075
err = r.syncBlueSecretForRook(ctx, secret)
7176
if err != nil {
77+
logger.Error("Failed to synchronize BlueSecret", "error", err)
7278
return ctrl.Result{}, err
7379
}
7480

81+
logger.Info("Reconciliation complete for BlueSecret")
7582
return ctrl.Result{}, nil
7683
}

addons/blue_secret_controller_test.go

Lines changed: 0 additions & 1 deletion
This file was deleted.

addons/green_secret_controller.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ package addons
33
import (
44
"context"
55
"fmt"
6+
"log/slog"
67

78
"github.com/red-hat-storage/odf-multicluster-orchestrator/controllers/utils"
89
corev1 "k8s.io/api/core/v1"
910
"k8s.io/apimachinery/pkg/api/errors"
1011
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1112
"k8s.io/apimachinery/pkg/runtime"
12-
"k8s.io/klog/v2"
1313
ctrl "sigs.k8s.io/controller-runtime"
1414
"sigs.k8s.io/controller-runtime/pkg/builder"
1515
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -24,6 +24,7 @@ type GreenSecretReconciler struct {
2424
HubClient client.Client
2525
SpokeClient client.Client
2626
SpokeClusterName string
27+
Logger *slog.Logger
2728
}
2829

2930
// SetupWithManager sets up the controller with the Manager.
@@ -51,6 +52,8 @@ func (r *GreenSecretReconciler) SetupWithManager(mgr ctrl.Manager) error {
5152
},
5253
}
5354

55+
r.Logger.Info("Setting up controller with manager")
56+
5457
return ctrl.NewControllerManagedBy(mgr).
5558
Named("greensecret_controller").
5659
Watches(&corev1.Secret{}, &handler.EnqueueRequestForObject{},
@@ -61,26 +64,30 @@ func (r *GreenSecretReconciler) SetupWithManager(mgr ctrl.Manager) error {
6164
func (r *GreenSecretReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
6265
var err error
6366
var greenSecret corev1.Secret
67+
logger := r.Logger.With("secret", req.NamespacedName.String())
6468

65-
klog.Info("Reconciling green secret", "secret", req.NamespacedName.String())
69+
logger.Info("Reconciling green secret")
6670
err = r.HubClient.Get(ctx, req.NamespacedName, &greenSecret)
6771
if err != nil {
6872
if errors.IsNotFound(err) {
69-
klog.Infof("Could not find secret. Ignoring since it must have been deleted")
73+
logger.Info("Green secret not found, likely deleted")
7074
return ctrl.Result{}, nil
7175
}
72-
klog.Error("Failed to get secret.", err)
76+
logger.Error("Failed to retrieve green secret", "error", err)
7377
return ctrl.Result{}, err
7478
}
7579

7680
if err = validateGreenSecret(greenSecret); err != nil {
77-
return ctrl.Result{}, fmt.Errorf("failed to validate secret %q", greenSecret.Name)
81+
logger.Error("Validation failed for green secret", "error", err)
82+
return ctrl.Result{}, fmt.Errorf("failed to validate green secret %q: %v", greenSecret.Name, err)
7883
}
7984

8085
err = r.syncGreenSecretForRook(ctx, greenSecret)
8186
if err != nil {
87+
logger.Error("Failed to sync green secret for Rook", "error", err)
8288
return ctrl.Result{}, err
8389
}
8490

91+
logger.Info("Successfully reconciled and synced green secret")
8592
return ctrl.Result{}, nil
8693
}

addons/green_secret_controller_test.go

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)