2323package resources
2424
2525import (
26- "time"
27-
2826 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
2927
3028 coreosv1 "github.com/coreos/prometheus-operator/pkg/apis/monitoring/v1"
3129 clientv1 "github.com/coreos/prometheus-operator/pkg/client/versioned/typed/monitoring/v1"
3230 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
33-
34- "github.com/rs/zerolog"
31+ "k8s.io/client-go/rest"
3532)
3633
34+ func LabelsForExporterServiceMonitor (deploymentName string ) map [string ]string {
35+ return map [string ]string {
36+ k8sutil .LabelKeyArangoDeployment : deploymentName ,
37+ k8sutil .LabelKeyApp : "arango-exporter" ,
38+ "context" : "metrics" ,
39+ }
40+ }
41+
42+ func LabelsForExporterServiceMonitorSelector (deploymentName string ) map [string ]string {
43+ return map [string ]string {
44+ k8sutil .LabelKeyArangoDeployment : deploymentName ,
45+ k8sutil .LabelKeyApp : "arangodb" ,
46+ }
47+ }
48+
3749// EnsureServiceMonitor creates or updates a ServiceMonitor.
38- func (f * Resources ) EnsureServiceMonitor () error {
50+ func (r * Resources ) EnsureServiceMonitor () error {
3951 // Some preparations:
4052 log := r .log
41- start := time .Now ()
42- kubecli := r .context .GetKubeCli ()
4353 apiObject := r .context .GetAPIObject ()
4454 deploymentName := apiObject .GetName ()
4555 ns := apiObject .GetNamespace ()
4656 owner := apiObject .AsOwner ()
4757 spec := r .context .GetSpec ()
58+ if ! spec .Metrics .IsEnabled () {
59+ return nil
60+ }
4861 serviceMonitorName := deploymentName + "-exporter"
4962
5063 // First get a client:
@@ -60,19 +73,39 @@ func (f *Resources) EnsureServiceMonitor() error {
6073 }
6174
6275 // Check if ServiceMonitor already exists
63- serviceMonitors := mClient .ServiceMonitors ()
64- var found * coreosv1.ServiceMonitor
65- found , err = serviceMonitors .Get (serviceMonitorName , metav1.GetOptions {})
76+ serviceMonitors := mClient .ServiceMonitors (ns )
77+ _ , err = serviceMonitors .Get (serviceMonitorName , metav1.GetOptions {})
6678 if err != nil {
67- if k8serr .IsNotFound (rr ) {
79+ if k8sutil .IsNotFound (err ) {
6880 // Need to create one:
69- smon := & coreosv1.ServiceMonitor {
70- ObjectMeta : metav1.ObjectMeta {
71- Name : serviceMonitorName ,
72- Labels : LabelsForExporterServiceMonitor (deploymentName ),
81+ smon := & coreosv1.ServiceMonitor {
82+ ObjectMeta : metav1.ObjectMeta {
83+ Name : serviceMonitorName ,
84+ Labels : LabelsForExporterServiceMonitor (deploymentName ),
85+ OwnerReferences : []metav1.OwnerReference {owner },
7386 },
7487 Spec : coreosv1.ServiceMonitorSpec {
75-
88+ JobLabel : "k8s-app" ,
89+ Endpoints : []coreosv1.Endpoint {
90+ coreosv1.Endpoint {
91+ Port : "exporter" ,
92+ Interval : "10s" ,
93+ Scheme : "https" ,
94+ TLSConfig : & coreosv1.TLSConfig {
95+ InsecureSkipVerify : true ,
96+ },
97+ },
98+ },
99+ Selector : metav1.LabelSelector {
100+ MatchLabels : LabelsForExporterServiceMonitorSelector (deploymentName ),
101+ },
102+ },
103+ }
104+ smon , err = serviceMonitors .Create (smon )
105+ if err != nil {
106+ log .Error ().Err (err ).Msgf ("Failed to create ServiceMonitor %s" , serviceMonitorName )
107+ return maskAny (err )
108+ }
76109 } else {
77110 log .Error ().Err (err ).Msgf ("Failed to get ServiceMonitor %s" , serviceMonitorName )
78111 return maskAny (err )
0 commit comments