This is an automated email from the ASF dual-hosted git repository.

nferraro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k.git


The following commit(s) were added to refs/heads/master by this push:
     new e9c4932  Add Prometheus ServiceMonitor labels trait configuration
e9c4932 is described below

commit e9c493251659ddd884b24013a224d1d6a4a86163
Author: Antonin Stefanutti <anto...@stefanutti.fr>
AuthorDate: Tue Jan 29 10:41:15 2019 +0100

    Add Prometheus ServiceMonitor labels trait configuration
---
 docs/traits.adoc        | 14 +++++++++-----
 pkg/trait/prometheus.go | 20 +++++++++++++++-----
 2 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/docs/traits.adoc b/docs/traits.adoc
index 338272c..60456cb 100644
--- a/docs/traits.adoc
+++ b/docs/traits.adoc
@@ -177,16 +177,20 @@ The following is a list of common traits that can be 
configured by the end users
 
 | prometheus
 | Kubernetes, OpenShift
-| Exposes the integration with a Service and a ServiceMonitor resources so 
that the Prometheus endpoint can be scraped.
-  +
-  +
-  It's disabled by default.
+| Exposes the integration with a `Service` and a `ServiceMonitor` resources so 
that the Prometheus endpoint can be scraped.
+
+WARNING: It requires the 
https://github.com/coreos/prometheus-operator[Prometheus Operator] custom 
resource definitions to be installed.
+
+It's disabled by default.
 
 [cols="m,"]
 !===
 
+! prometheus.labels
+! The `ServiceMonitor` resource labels.
+
 ! prometheus.port
-! To configure a different Prometheus endpoint port (default `9778`).
+! The Prometheus endpoint port (default `9778`).
 
 !===
 
diff --git a/pkg/trait/prometheus.go b/pkg/trait/prometheus.go
index 3ee31e9..7a4d7be 100644
--- a/pkg/trait/prometheus.go
+++ b/pkg/trait/prometheus.go
@@ -18,6 +18,7 @@ limitations under the License.
 package trait
 
 import (
+       "strings"
        "strconv"
 
        "github.com/apache/camel-k/pkg/apis/camel/v1alpha1"
@@ -33,6 +34,7 @@ import (
 type prometheusTrait struct {
        BaseTrait `property:",squash"`
 
+       Labels string `property:"labels"`
        Port int `property:"port"`
 }
 
@@ -107,6 +109,9 @@ func (t *prometheusTrait) Apply(e *Environment) (err error) 
{
 }
 
 func (t *prometheusTrait) getServiceMonitorFor(e *Environment) 
*monitoringv1.ServiceMonitor {
+       labels := parseLabels(t.Labels)
+       labels["camel.apache.org/integration"] = e.Integration.Name
+
        smt := monitoringv1.ServiceMonitor{
                TypeMeta: metav1.TypeMeta{
                        Kind:       "ServiceMonitor",
@@ -115,11 +120,7 @@ func (t *prometheusTrait) getServiceMonitorFor(e 
*Environment) *monitoringv1.Ser
                ObjectMeta: metav1.ObjectMeta{
                        Name:      e.Integration.Name,
                        Namespace: e.Integration.Namespace,
-                       Labels: map[string]string{
-                               // TODO: add the ability to configure 
additional labels
-                               "camel.apache.org/integration": 
e.Integration.Name,
-                               "team": "fuse",
-                       },
+                       Labels:    labels,
                },
                Spec: monitoringv1.ServiceMonitorSpec{
                        Selector: metav1.LabelSelector{
@@ -136,3 +137,12 @@ func (t *prometheusTrait) getServiceMonitorFor(e 
*Environment) *monitoringv1.Ser
        }
        return &smt
 }
+
+func parseLabels(labels string) map[string]string {
+       m := make(map[string]string)
+       for _, label := range strings.Split(labels, ",") {
+               kv := strings.Split(label, "=")
+               m[kv[0]] = kv[1]
+       }
+       return m
+}

Reply via email to