Skip to content

Commit

Permalink
Add some metrics about the release count (#34)
Browse files Browse the repository at this point in the history
* Add some metrics about the release count

* Put a feature description about the metrics
  • Loading branch information
LinuxSuRen authored Nov 9, 2021
1 parent bb7cd61 commit 836061a
Show file tree
Hide file tree
Showing 6 changed files with 91 additions and 2 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ This project aims to help to release a project which especially has multiple git

* Support to create a tag for a git repository
* Support to create a release (or pre-release) for [a GitHub repository](docs/github.md)
* Metrics support for the release action count
* Support to integrate with GitOps framework (such as [Argo CD](https://github.com/argoproj/argo-cd))

## Installation
Expand Down
2 changes: 1 addition & 1 deletion config/default/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ bases:
# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. 'WEBHOOK' components are required.
- ../certmanager
# [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'.
#- ../prometheus
- ../prometheus

patchesStrategicMerge:
# Protect the /metrics endpoint by putting it behind auth.
Expand Down
57 changes: 57 additions & 0 deletions controllers/metrics.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package controllers

import (
"github.com/prometheus/client_golang/prometheus"
"sigs.k8s.io/controller-runtime/pkg/metrics"
)

var (
releaserTagActionCount = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "releaser_tag_total",
Help: "Number of tag actions",
},
)
releaserReleaseActionCount = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "releaser_release_total",
Help: "Number of release actions",
},
)
releaserPreReleaseActionCount = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "releaser_prerelease_total",
Help: "Number of preRelease actions",
},
)
releaserGitOpsCount = prometheus.NewCounter(
prometheus.CounterOpts{
Name: "releaser_gitops_total",
Help: "Number of using GitOps way",
},
)
)

func init() {
// Register custom metrics with the global prometheus registry
metrics.Registry.MustRegister(releaserTagActionCount,
releaserPreReleaseActionCount,
releaserReleaseActionCount,
releaserGitOpsCount)
}

func increaseTagActionCount() {
releaserTagActionCount.Inc()
}

func increasePreReleaseActionCount() {
releaserPreReleaseActionCount.Inc()
}

func increaseReleaseActionCount() {
releaserReleaseActionCount.Inc()
}

func increaseGitOpsCount() {
releaserGitOpsCount.Inc()
}
31 changes: 30 additions & 1 deletion controllers/releaser_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ func (r *ReleaserReconciler) Reconcile(ctx context.Context, req ctrl.Request) (r

if err == nil {
releaser.Status.CompletionTime = &metav1.Time{Time: time.Now()}
metricsRecord(releaser.DeepCopy())
}

if updateErr := r.Status().Update(ctx, releaser); err == nil && updateErr == nil {
Expand All @@ -151,6 +152,9 @@ func (r *ReleaserReconciler) needToUpdate(ctx context.Context, releaser *devopsv

func (r *ReleaserReconciler) updateHash(ctx context.Context, releaser *devopsv1alpha1.Releaser) (err error) {
newHash := ComputeHash(releaser.Spec)
if releaser.Annotations == nil {
releaser.Annotations = make(map[string]string)
}
releaser.Annotations["releaser.devops.kubesphere.io/hash"] = newHash
err = r.Update(ctx, releaser)
return
Expand All @@ -167,7 +171,14 @@ func (r *ReleaserReconciler) markAsDone(secret *v1.Secret, releaser *devopsv1alp
gitOps := releaser.Spec.GitOps
if gitOps == nil || !gitOps.Enable {
releaser.Spec.Phase = devopsv1alpha1.PhaseDone
err = r.Update(context.TODO(), releaser)
if err = r.Update(context.TODO(), releaser); err == nil {
nextReleaser := releaser.DeepCopy()
bumpReleaser(nextReleaser)

if err = r.Create(context.TODO(), nextReleaser); err != nil {
err = fmt.Errorf("failed to create next releaser: %s, error: %v", nextReleaser.GetName(), err)
}
}
return
}

Expand Down Expand Up @@ -223,6 +234,24 @@ func (r *ReleaserReconciler) markAsDone(secret *v1.Secret, releaser *devopsv1alp
return
}

func metricsRecord(releaser *devopsv1alpha1.Releaser) {
increaseTagActionCount()

if releaser.Spec.GitOps != nil && releaser.Spec.GitOps.Enable {
increaseGitOpsCount()
}

for i, _ := range releaser.Spec.Repositories {
repo := releaser.Spec.Repositories[i]
switch repo.Action {
case devopsv1alpha1.ActionPreRelease:
increasePreReleaseActionCount()
case devopsv1alpha1.ActionRelease:
increaseReleaseActionCount()
}
}
}

// addCondition adds or replaces a condition
func addCondition(releaser *devopsv1alpha1.Releaser, condition devopsv1alpha1.Condition) {
releaser.Status.Conditions = append(releaser.Status.Conditions, condition)
Expand Down
1 change: 1 addition & 0 deletions controllers/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ func bumpReleaser(releaser *devopsv1alpha1.Releaser) {
releaser.ObjectMeta.Generation = 0
releaser.ObjectMeta.SelfLink = ""
releaser.ObjectMeta.Annotations = nil
releaser.ObjectMeta.ResourceVersion = ""

releaser.Spec.Phase = devopsv1alpha1.PhaseDraft
releaser.Spec.Version = nextVersion
Expand Down
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ require (
github.com/jenkins-x/go-scm v1.10.10
github.com/onsi/ginkgo v1.14.1
github.com/onsi/gomega v1.10.2
github.com/prometheus/client_golang v1.7.1
github.com/stretchr/testify v1.7.0
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b
gopkg.in/src-d/go-git.v4 v4.13.1
Expand Down

0 comments on commit 836061a

Please sign in to comment.