@@ -4,17 +4,14 @@ use snafu::{ResultExt, Snafu};
44use  stackable_operator:: { 
55    builder:: meta:: ObjectMetaBuilder , 
66    k8s_openapi:: api:: core:: v1:: { Service ,  ServicePort ,  ServiceSpec } , 
7-     kvp:: { Label ,  ObjectLabels } , 
7+     kvp:: { Annotations ,   Label ,  ObjectLabels } , 
88    role_utils:: RoleGroupRef , 
99} ; 
1010
1111use  crate :: crd:: { 
1212    DruidRole ,  METRICS_PORT ,  METRICS_PORT_NAME ,  security:: DruidTlsSecurity ,  v1alpha1, 
1313} ; 
1414
15- const  METRICS_SERVICE_SUFFIX :  & str  = "metrics" ; 
16- const  HEADLESS_SERVICE_SUFFIX :  & str  = "headless" ; 
17- 
1815#[ derive( Snafu ,  Debug ) ]  
1916pub  enum  Error  { 
2017    #[ snafu( display( "object is missing metadata to build owner reference" ) ) ]  
@@ -46,9 +43,7 @@ pub fn build_rolegroup_headless_service(
4643    Ok ( Service  { 
4744        metadata :  ObjectMetaBuilder :: new ( ) 
4845            . name_and_namespace ( druid) 
49-             . name ( rolegroup_headless_service_name ( 
50-                 & role_group_ref. object_name ( ) , 
51-             ) ) 
46+             . name ( role_group_ref. rolegroup_headless_service_name ( ) ) 
5247            . ownerreference_from_resource ( druid,  None ,  Some ( true ) ) 
5348            . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
5449            . with_recommended_labels ( object_labels) 
@@ -77,14 +72,13 @@ pub fn build_rolegroup_metrics_service(
7772    Ok ( Service  { 
7873        metadata :  ObjectMetaBuilder :: new ( ) 
7974            . name_and_namespace ( druid) 
80-             . name ( rolegroup_metrics_service_name ( 
81-                 & role_group_ref. object_name ( ) , 
82-             ) ) 
75+             . name ( role_group_ref. rolegroup_metrics_service_name ( ) ) 
8376            . ownerreference_from_resource ( druid,  None ,  Some ( true ) ) 
8477            . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
8578            . with_recommended_labels ( object_labels) 
8679            . context ( MetadataBuildSnafu ) ?
8780            . with_label ( Label :: try_from ( ( "prometheus.io/scrape" ,  "true" ) ) . context ( LabelBuildSnafu ) ?) 
81+             . with_annotations ( prometheus_annotations ( ) ) 
8882            . build ( ) , 
8983        spec :  Some ( ServiceSpec  { 
9084            // Internal communication does not need to be exposed 
@@ -108,12 +102,17 @@ fn metrics_service_ports() -> Vec<ServicePort> {
108102    } ] 
109103} 
110104
111- /// Returns the metrics rolegroup service name `<cluster>-<role>-<rolegroup>-<METRICS_SERVICE_SUFFIX>`. 
112- fn  rolegroup_metrics_service_name ( role_group_ref_object_name :  & str )  -> String  { 
113-     format ! ( "{role_group_ref_object_name}-{METRICS_SERVICE_SUFFIX}" ) 
114- } 
115- 
116- /// Returns the headless rolegroup service name `<cluster>-<role>-<rolegroup>-<HEADLESS_SERVICE_SUFFIX>`. 
117- pub  fn  rolegroup_headless_service_name ( role_group_ref_object_name :  & str )  -> String  { 
118-     format ! ( "{role_group_ref_object_name}-{HEADLESS_SERVICE_SUFFIX}" ) 
105+ /// Common annotations for Prometheus 
106+ /// 
107+ /// These annotations can be used in a ServiceMonitor. 
108+ /// 
109+ /// see also <https://github.com/prometheus-community/helm-charts/blob/prometheus-27.32.0/charts/prometheus/values.yaml#L983-L1036> 
110+ fn  prometheus_annotations ( )  -> Annotations  { 
111+     Annotations :: try_from ( [ 
112+         ( "prometheus.io/path" . to_owned ( ) ,  "/metrics" . to_owned ( ) ) , 
113+         ( "prometheus.io/port" . to_owned ( ) ,  METRICS_PORT . to_string ( ) ) , 
114+         ( "prometheus.io/scheme" . to_owned ( ) ,  "http" . to_owned ( ) ) , 
115+         ( "prometheus.io/scrape" . to_owned ( ) ,  "true" . to_owned ( ) ) , 
116+     ] ) 
117+     . expect ( "should be valid annotations" ) 
119118} 
0 commit comments