Skip to content

Commit f9b21d3

Browse files
sethiyashYash Sethiya
authored andcommitted
Added E2E testcases for exposing prometheus metrics
Signed-off-by: sethiyash <[email protected]> Signed-off-by: Yash Sethiya <[email protected]>
1 parent 68d3e5d commit f9b21d3

File tree

7 files changed

+241
-30
lines changed

7 files changed

+241
-30
lines changed

pkg/app/app.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ func NewApp(app v1alpha1.App, hooks Hooks,
7676
func (a *App) Name() string { return a.app.Name }
7777
func (a *App) Namespace() string { return a.app.Namespace }
7878

79+
// Kind return kind of App
80+
func (a *App) Kind() string { return "app" }
81+
7982
func (a *App) Status() v1alpha1.AppStatus { return a.app.Status }
8083

8184
func (a *App) StatusAsYAMLBytes() ([]byte, error) {

pkg/app/app_reconcile.go

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,13 @@ import (
1515
"sigs.k8s.io/controller-runtime/pkg/reconcile"
1616
)
1717

18-
const appResourceType = "app"
19-
2018
// Reconcile is not expected to be called concurrently
2119
func (a *App) Reconcile(force bool) (reconcile.Result, error) {
2220
defer a.flushUpdateStatus("app reconciled")
2321

2422
var err error
2523

26-
a.appMetrics.ReconcileCountMetrics.InitMetrics(appResourceType, a.Name(), a.Namespace())
24+
a.appMetrics.ReconcileCountMetrics.InitMetrics(a.Kind(), a.Name(), a.Namespace())
2725

2826
timerOpts := ReconcileTimerOpts{
2927
DefaultSyncPeriod: a.opts.DefaultSyncPeriod,
@@ -106,9 +104,9 @@ func (a *App) reconcileDeploy() error {
106104

107105
func (a *App) reconcileFetchTemplateDeploy() exec.CmdRunResult {
108106
reconcileStartTime := time.Now()
109-
a.appMetrics.IsFirstReconcile = a.appMetrics.ReconcileCountMetrics.GetReconcileAttemptCounterValue(appResourceType, a.Name(), a.Namespace()) == 1
107+
a.appMetrics.IsFirstReconcile = a.appMetrics.ReconcileCountMetrics.GetReconcileAttemptCounterValue(a.Kind(), a.Name(), a.Namespace()) == 1
110108
defer func() {
111-
a.appMetrics.ReconcileTimeMetrics.RegisterOverallTime(appResourceType, a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
109+
a.appMetrics.ReconcileTimeMetrics.RegisterOverallTime(a.Kind(), a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
112110
time.Since(reconcileStartTime))
113111
}()
114112

@@ -138,7 +136,7 @@ func (a *App) reconcileFetchTemplateDeploy() exec.CmdRunResult {
138136
UpdatedAt: metav1.NewTime(time.Now().UTC()),
139137
}
140138

141-
a.appMetrics.ReconcileTimeMetrics.RegisterFetchTime(appResourceType, a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
139+
a.appMetrics.ReconcileTimeMetrics.RegisterFetchTime(a.Kind(), a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
142140
a.app.Status.Fetch.UpdatedAt.Sub(a.app.Status.Fetch.StartedAt.Time))
143141

144142
err := a.updateStatus("marking fetch completed")
@@ -162,7 +160,7 @@ func (a *App) reconcileFetchTemplateDeploy() exec.CmdRunResult {
162160
UpdatedAt: metav1.NewTime(time.Now().UTC()),
163161
}
164162

165-
a.appMetrics.ReconcileTimeMetrics.RegisterTemplateTime(appResourceType, a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
163+
a.appMetrics.ReconcileTimeMetrics.RegisterTemplateTime(a.Kind(), a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
166164
a.app.Status.Template.UpdatedAt.Sub(templateStartTime))
167165

168166
err = a.updateStatus("marking template completed")
@@ -213,7 +211,7 @@ func (a *App) updateLastDeploy(result exec.CmdRunResult) exec.CmdRunResult {
213211
},
214212
}
215213

216-
a.appMetrics.ReconcileTimeMetrics.RegisterDeployTime(appResourceType, a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
214+
a.appMetrics.ReconcileTimeMetrics.RegisterDeployTime(a.Kind(), a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
217215
a.Status().Deploy.UpdatedAt.Sub(a.Status().Deploy.StartedAt.Time))
218216

219217
return result
@@ -267,7 +265,7 @@ func (a *App) setReconciling() {
267265
Status: corev1.ConditionTrue,
268266
})
269267

270-
a.appMetrics.ReconcileCountMetrics.RegisterReconcileAttempt(appResourceType, a.Name(), a.Namespace())
268+
a.appMetrics.ReconcileCountMetrics.RegisterReconcileAttempt(a.Kind(), a.Name(), a.Namespace())
271269
a.app.Status.FriendlyDescription = "Reconciling"
272270
}
273271

@@ -283,7 +281,7 @@ func (a *App) setReconcileCompleted(result exec.CmdRunResult) {
283281
a.app.Status.ConsecutiveReconcileFailures++
284282
a.app.Status.ConsecutiveReconcileSuccesses = 0
285283
a.app.Status.FriendlyDescription = fmt.Sprintf("Reconcile failed: %s", result.ErrorStr())
286-
a.appMetrics.ReconcileCountMetrics.RegisterReconcileFailure(appResourceType, a.Name(), a.Namespace())
284+
a.appMetrics.ReconcileCountMetrics.RegisterReconcileFailure(a.Kind(), a.Name(), a.Namespace())
287285
a.setUsefulErrorMessage(result)
288286
} else {
289287
a.app.Status.Conditions = append(a.app.Status.Conditions, v1alpha1.Condition{
@@ -294,7 +292,7 @@ func (a *App) setReconcileCompleted(result exec.CmdRunResult) {
294292
a.app.Status.ConsecutiveReconcileSuccesses++
295293
a.app.Status.ConsecutiveReconcileFailures = 0
296294
a.app.Status.FriendlyDescription = "Reconcile succeeded"
297-
a.appMetrics.ReconcileCountMetrics.RegisterReconcileSuccess(appResourceType, a.Name(), a.Namespace())
295+
a.appMetrics.ReconcileCountMetrics.RegisterReconcileSuccess(a.Kind(), a.Name(), a.Namespace())
298296
a.app.Status.UsefulErrorMessage = ""
299297
}
300298
}
@@ -307,7 +305,7 @@ func (a *App) setDeleting() {
307305
Status: corev1.ConditionTrue,
308306
})
309307

310-
a.appMetrics.ReconcileCountMetrics.RegisterReconcileDeleteAttempt(appResourceType, a.Name(), a.Namespace())
308+
a.appMetrics.ReconcileCountMetrics.RegisterReconcileDeleteAttempt(a.Kind(), a.Name(), a.Namespace())
311309
a.app.Status.FriendlyDescription = "Deleting"
312310
}
313311

@@ -323,10 +321,10 @@ func (a *App) setDeleteCompleted(result exec.CmdRunResult) {
323321
a.app.Status.ConsecutiveReconcileFailures++
324322
a.app.Status.ConsecutiveReconcileSuccesses = 0
325323
a.app.Status.FriendlyDescription = fmt.Sprintf("Delete failed: %s", result.ErrorStr())
326-
a.appMetrics.ReconcileCountMetrics.RegisterReconcileDeleteFailed(appResourceType, a.Name(), a.Namespace())
324+
a.appMetrics.ReconcileCountMetrics.RegisterReconcileDeleteFailed(a.Kind(), a.Name(), a.Namespace())
327325
a.setUsefulErrorMessage(result)
328326
} else {
329-
a.appMetrics.ReconcileCountMetrics.DeleteMetrics(appResourceType, a.Name(), a.Namespace())
327+
a.appMetrics.ReconcileCountMetrics.DeleteMetrics(a.Kind(), a.Name(), a.Namespace())
330328
}
331329
}
332330

pkg/metrics/reconcile_count_metrics.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,15 @@ func NewCountMetrics() *ReconcileCountMetrics {
6161
prometheus.CounterOpts{
6262
Namespace: metricNamespace,
6363
Name: "app_reconcile_delete_attempt_total",
64-
Help: "Total number of attempted reconcile deletion",
64+
Help: "Total number of attempted reconcile deletions",
6565
},
6666
[]string{resourceTypeLabel, kappNameLabel, kappNamespaceLabel},
6767
),
6868
reconcileDeleteFailedTotal: prometheus.NewCounterVec(
6969
prometheus.CounterOpts{
7070
Namespace: metricNamespace,
7171
Name: "app_reconcile_delete_failed_total",
72-
Help: "Total number of failed reconcile deletion",
72+
Help: "Total number of failed reconcile deletions",
7373
},
7474
[]string{resourceTypeLabel, kappNameLabel, kappNamespaceLabel},
7575
),

pkg/packageinstall/packageinstall.go

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ const (
4242
// PackageInstall to indicate that lower version of the package
4343
// can be selected vs whats currently installed.
4444
DowngradableAnnKey = "packaging.carvel.dev/downgradable"
45-
packageInstallType = "pkgi"
4645
)
4746

4847
// nolint: revive
@@ -60,6 +59,11 @@ type PackageInstallCR struct {
6059
pkgMetrics *metrics.Metrics
6160
}
6261

62+
// Kind return kind of pkg install
63+
func (pi *PackageInstallCR) Kind() string {
64+
return "pkgi"
65+
}
66+
6367
// nolint: revive
6468
type Opts struct {
6569
DefaultSyncPeriod time.Duration
@@ -79,7 +83,7 @@ func (pi *PackageInstallCR) Reconcile() (reconcile.Result, error) {
7983
func(st kcv1alpha1.GenericStatus) { pi.model.Status.GenericStatus = st },
8084
}
8185

82-
pi.pkgMetrics.ReconcileCountMetrics.InitMetrics(packageInstallType, pi.model.Name, pi.model.Namespace)
86+
pi.pkgMetrics.ReconcileCountMetrics.InitMetrics(pi.Kind(), pi.model.Name, pi.model.Namespace)
8387

8488
var result reconcile.Result
8589
var err error
@@ -107,12 +111,12 @@ func (pi *PackageInstallCR) Reconcile() (reconcile.Result, error) {
107111

108112
func (pi *PackageInstallCR) reconcile(modelStatus *reconciler.Status) (reconcile.Result, error) {
109113
pi.log.Info("Reconciling")
110-
pi.pkgMetrics.ReconcileCountMetrics.RegisterReconcileAttempt(packageInstallType, pi.model.Name, pi.model.Namespace)
114+
pi.pkgMetrics.ReconcileCountMetrics.RegisterReconcileAttempt(pi.Kind(), pi.model.Name, pi.model.Namespace)
111115

112116
reconcileStartTime := time.Now()
113-
pi.pkgMetrics.IsFirstReconcile = pi.pkgMetrics.ReconcileCountMetrics.GetReconcileAttemptCounterValue(packageInstallType, pi.model.Name, pi.model.Namespace) == 1
117+
pi.pkgMetrics.IsFirstReconcile = pi.pkgMetrics.ReconcileCountMetrics.GetReconcileAttemptCounterValue(pi.Kind(), pi.model.Name, pi.model.Namespace) == 1
114118
defer func() {
115-
pi.pkgMetrics.ReconcileTimeMetrics.RegisterOverallTime(packageInstallType, pi.model.Name, pi.model.Namespace,
119+
pi.pkgMetrics.ReconcileTimeMetrics.RegisterOverallTime(pi.Kind(), pi.model.Name, pi.model.Namespace,
116120
pi.pkgMetrics.IsFirstReconcile, time.Since(reconcileStartTime))
117121
}()
118122

pkg/pkgrepository/app.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@ func NewApp(app v1alpha1.App, hooks Hooks, fetchFactory fetch.Factory, templateF
4949
func (a *App) Name() string { return a.app.Name }
5050
func (a *App) Namespace() string { return a.app.Namespace }
5151

52+
// Kind return kind of pkg repo
53+
func (a *App) Kind() string { return "pkgr" }
54+
5255
func (a *App) Status() v1alpha1.AppStatus { return a.app.Status }
5356

5457
func (a *App) blockDeletion() error { return a.hooks.BlockDeletion() }

pkg/pkgrepository/app_reconcile.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,13 @@ import (
1515
"sigs.k8s.io/controller-runtime/pkg/reconcile"
1616
)
1717

18-
const packageRepoResourceType = "pkgr"
19-
2018
// Reconcile is not expected to be called concurrently
2119
func (a *App) Reconcile(force bool) (reconcile.Result, error) {
2220
defer a.flushUpdateStatus("packagerepository reconciled")
2321

2422
var err error
2523

26-
a.appMetrics.ReconcileCountMetrics.InitMetrics(packageRepoResourceType, a.Name(), a.Namespace())
24+
a.appMetrics.ReconcileCountMetrics.InitMetrics(a.Kind(), a.Name(), a.Namespace())
2725

2826
switch {
2927
case a.app.Spec.Paused:
@@ -95,9 +93,9 @@ func (a *App) reconcileDeploy() error {
9593

9694
func (a *App) reconcileFetchTemplateDeploy() exec.CmdRunResult {
9795
reconcileStartTime := time.Now()
98-
a.appMetrics.IsFirstReconcile = a.appMetrics.ReconcileCountMetrics.GetReconcileAttemptCounterValue(packageRepoResourceType, a.Name(), a.Namespace()) == 1
96+
a.appMetrics.IsFirstReconcile = a.appMetrics.ReconcileCountMetrics.GetReconcileAttemptCounterValue(a.Kind(), a.Name(), a.Namespace()) == 1
9997
defer func() {
100-
a.appMetrics.ReconcileTimeMetrics.RegisterOverallTime(packageRepoResourceType, a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
98+
a.appMetrics.ReconcileTimeMetrics.RegisterOverallTime(a.Kind(), a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
10199
time.Since(reconcileStartTime))
102100
}()
103101

@@ -127,7 +125,7 @@ func (a *App) reconcileFetchTemplateDeploy() exec.CmdRunResult {
127125
UpdatedAt: metav1.NewTime(time.Now().UTC()),
128126
}
129127

130-
a.appMetrics.ReconcileTimeMetrics.RegisterFetchTime(packageRepoResourceType, a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
128+
a.appMetrics.ReconcileTimeMetrics.RegisterFetchTime(a.Kind(), a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
131129
a.app.Status.Fetch.UpdatedAt.Sub(a.app.Status.Fetch.StartedAt.Time))
132130

133131
err := a.updateStatus("marking fetch completed")
@@ -151,7 +149,7 @@ func (a *App) reconcileFetchTemplateDeploy() exec.CmdRunResult {
151149
UpdatedAt: metav1.NewTime(time.Now().UTC()),
152150
}
153151

154-
a.appMetrics.ReconcileTimeMetrics.RegisterTemplateTime(packageRepoResourceType, a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
152+
a.appMetrics.ReconcileTimeMetrics.RegisterTemplateTime(a.Kind(), a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
155153
a.app.Status.Template.UpdatedAt.Sub(templateStartTime))
156154

157155
err = a.updateStatus("marking template completed")
@@ -181,7 +179,7 @@ func (a *App) updateLastDeploy(result exec.CmdRunResult) exec.CmdRunResult {
181179
UpdatedAt: metav1.NewTime(time.Now().UTC()),
182180
}
183181

184-
a.appMetrics.ReconcileTimeMetrics.RegisterDeployTime(packageRepoResourceType, a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
182+
a.appMetrics.ReconcileTimeMetrics.RegisterDeployTime(a.Kind(), a.Name(), a.Namespace(), a.appMetrics.IsFirstReconcile,
185183
a.Status().Deploy.UpdatedAt.Sub(a.Status().Deploy.StartedAt.Time))
186184

187185
a.updateStatus("marking last deploy")
@@ -215,7 +213,7 @@ func (a *App) setReconciling() {
215213
Status: corev1.ConditionTrue,
216214
})
217215

218-
a.appMetrics.ReconcileCountMetrics.RegisterReconcileAttempt(packageRepoResourceType, a.Name(), a.Namespace())
216+
a.appMetrics.ReconcileCountMetrics.RegisterReconcileAttempt(a.Kind(), a.Name(), a.Namespace())
219217

220218
a.app.Status.FriendlyDescription = "Reconciling"
221219
}

0 commit comments

Comments
 (0)