@@ -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