@@ -4,14 +4,11 @@ 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 , Labels , ObjectLabels } ,
88 role_utils:: RoleGroupRef ,
99} ;
1010
11- use crate :: crd:: {
12- METRICS_PORT , METRICS_PORT_NAME , rolegroup_headless_service_name,
13- rolegroup_metrics_service_name, v1alpha1,
14- } ;
11+ use crate :: crd:: { METRICS_PORT , METRICS_PORT_NAME , v1alpha1} ;
1512
1613#[ derive( Snafu , Debug ) ]
1714pub enum Error {
@@ -42,9 +39,7 @@ pub fn build_rolegroup_headless_service(
4239 Ok ( Service {
4340 metadata : ObjectMetaBuilder :: new ( )
4441 . name_and_namespace ( trino)
45- . name ( rolegroup_headless_service_name (
46- & role_group_ref. object_name ( ) ,
47- ) )
42+ . name ( role_group_ref. rolegroup_headless_service_name ( ) )
4843 . ownerreference_from_resource ( trino, None , Some ( true ) )
4944 . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
5045 . with_recommended_labels ( object_labels)
@@ -73,14 +68,13 @@ pub fn build_rolegroup_metrics_service(
7368 Ok ( Service {
7469 metadata : ObjectMetaBuilder :: new ( )
7570 . name_and_namespace ( trino)
76- . name ( rolegroup_metrics_service_name (
77- & role_group_ref. object_name ( ) ,
78- ) )
71+ . name ( role_group_ref. rolegroup_metrics_service_name ( ) )
7972 . ownerreference_from_resource ( trino, None , Some ( true ) )
8073 . context ( ObjectMissingMetadataForOwnerRefSnafu ) ?
8174 . with_recommended_labels ( object_labels)
8275 . context ( MetadataBuildSnafu ) ?
83- . with_label ( Label :: try_from ( ( "prometheus.io/scrape" , "true" ) ) . context ( LabelBuildSnafu ) ?)
76+ . with_labels ( prometheus_labels ( ) )
77+ . with_annotations ( prometheus_annotations ( ) )
8478 . build ( ) ,
8579 spec : Some ( ServiceSpec {
8680 // Internal communication does not need to be exposed
@@ -115,3 +109,23 @@ fn metrics_service_ports() -> Vec<ServicePort> {
115109 ..ServicePort :: default ( )
116110 } ]
117111}
112+
113+ /// Common labels for Prometheus
114+ fn prometheus_labels ( ) -> Labels {
115+ Labels :: try_from ( [ ( "prometheus.io/scrape" , "true" ) ] ) . expect ( "should be a valid label" )
116+ }
117+
118+ /// Common annotations for Prometheus
119+ ///
120+ /// These annotations can be used in a ServiceMonitor.
121+ ///
122+ /// see also <https://github.com/prometheus-community/helm-charts/blob/prometheus-27.32.0/charts/prometheus/values.yaml#L983-L1036>
123+ fn prometheus_annotations ( ) -> Annotations {
124+ Annotations :: try_from ( [
125+ ( "prometheus.io/path" . to_owned ( ) , "/metrics" . to_owned ( ) ) ,
126+ ( "prometheus.io/port" . to_owned ( ) , METRICS_PORT . to_string ( ) ) ,
127+ ( "prometheus.io/scheme" . to_owned ( ) , "http" . to_owned ( ) ) ,
128+ ( "prometheus.io/scrape" . to_owned ( ) , "true" . to_owned ( ) ) ,
129+ ] )
130+ . expect ( "should be valid annotations" )
131+ }
0 commit comments