33import com .ringcentral .platform .metrics .MetricRegistry ;
44import com .ringcentral .platform .metrics .names .MetricName ;
55import com .ringcentral .platform .metrics .reporters .MetricsExporter ;
6- import com .ringcentral .platform .metrics .samples .CompositeInstanceSamplesProvider ;
76import com .ringcentral .platform .metrics .samples .InstanceSamplesProvider ;
87import com .ringcentral .platform .metrics .samples .prometheus .PrometheusInstanceSample ;
98import com .ringcentral .platform .metrics .samples .prometheus .PrometheusInstanceSamplesProvider ;
109import com .ringcentral .platform .metrics .samples .prometheus .PrometheusSample ;
11- import com .ringcentral .platform .metrics .samples .prometheus .collectorRegistry .SimpleCollectorRegistryPrometheusInstanceSamplesProvider ;
1210import com .ringcentral .platform .metrics .utils .StringBuilderWriter ;
13- import io .prometheus .client .CollectorRegistry ;
1411import io .prometheus .client .exporter .common .TextFormat ;
1512import org .slf4j .Logger ;
1613
2017
2118import static com .ringcentral .platform .metrics .reporters .prometheus .PrometheusMetricsExporter .Format .PROMETHEUS_TEXT_O_O_4 ;
2219import static io .prometheus .client .Collector .MetricFamilySamples ;
23- import static io .prometheus .client .Collector .sanitizeMetricName ;
2420import static java .lang .String .join ;
2521import static java .util .Collections .emptyList ;
2622import static java .util .Collections .enumeration ;
23+ import static java .util .Objects .requireNonNull ;
2724import static java .util .stream .Collectors .toList ;
2825import static org .slf4j .LoggerFactory .getLogger ;
2926
@@ -42,109 +39,38 @@ public enum Format {
4239
4340 public static final Format DEFAULT_FORMAT = PROMETHEUS_TEXT_O_O_4 ;
4441 public static final String NAME_PARTS_DELIMITER = "_" ;
45- public static final boolean DEFAULT_LOWER_CASE_NAME = false ;
42+ public static final boolean DEFAULT_CONVERT_NAME_TO_LOWER_CASE = false ;
4643 public static final Locale DEFAULT_LOCALE = Locale .ENGLISH ;
4744
4845 private final Format defaultFormat ;
49- private final InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample > instanceSamplesProvider ;
5046 private final boolean convertNameToLowercase ;
5147 private final Locale locale ;
48+ private final PrometheusMetricSanitizer sanitizer ;
49+ private final InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample > instanceSamplesProvider ;
5250
5351 private static final Logger logger = getLogger (PrometheusMetricsExporter .class );
5452
55- public PrometheusMetricsExporter (MetricRegistry registry ) {
56- this (new PrometheusInstanceSamplesProvider (registry ));
57- }
58-
59- public PrometheusMetricsExporter (MetricRegistry registry , CollectorRegistry ... collectorRegistries ) {
60- this (
61- new PrometheusInstanceSamplesProvider (registry ),
62- new SimpleCollectorRegistryPrometheusInstanceSamplesProvider (collectorRegistries ));
63- }
64-
65- public PrometheusMetricsExporter (
66- MetricRegistry registry ,
67- boolean convertNameToLowercase ,
68- Locale locale ) {
69-
70- this (
71- convertNameToLowercase ,
72- locale ,
73- new PrometheusInstanceSamplesProvider (registry ));
74- }
75-
76- public PrometheusMetricsExporter (InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample > instanceSamplesProvider ) {
77- this (DEFAULT_FORMAT , instanceSamplesProvider );
78- }
79-
80- public PrometheusMetricsExporter (
81- Format defaultFormat ,
82- InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample > instanceSamplesProvider ) {
83-
84- this (
85- defaultFormat ,
86- DEFAULT_LOWER_CASE_NAME ,
87- DEFAULT_LOCALE ,
88- instanceSamplesProvider );
89- }
90-
91- public PrometheusMetricsExporter (
92- Format defaultFormat ,
93- boolean convertNameToLowercase ,
94- Locale locale ,
95- InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample > instanceSamplesProvider ) {
96-
97- this .defaultFormat = defaultFormat ;
98- this .convertNameToLowercase = convertNameToLowercase ;
99- this .locale = locale != null ? locale : DEFAULT_LOCALE ;
100- this .instanceSamplesProvider = instanceSamplesProvider ;
101- }
102-
103- @ SafeVarargs
104- public PrometheusMetricsExporter (InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample >... instanceSamplesProviders ) {
105- this (
106- DEFAULT_FORMAT ,
107- DEFAULT_LOWER_CASE_NAME ,
108- DEFAULT_LOCALE ,
109- instanceSamplesProviders );
110- }
111-
112- @ SafeVarargs
113- public PrometheusMetricsExporter (
114- boolean convertNameToLowercase ,
115- Locale locale ,
116- InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample >... instanceSamplesProviders ) {
117-
53+ public PrometheusMetricsExporter (MetricRegistry metricRegistry ) {
11854 this (
11955 DEFAULT_FORMAT ,
120- convertNameToLowercase ,
121- locale ,
122- instanceSamplesProviders );
123- }
124-
125- @ SafeVarargs
126- public PrometheusMetricsExporter (
127- Format defaultFormat ,
128- InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample >... instanceSamplesProviders ) {
129-
130- this (
131- defaultFormat ,
132- DEFAULT_LOWER_CASE_NAME ,
56+ DEFAULT_CONVERT_NAME_TO_LOWER_CASE ,
13357 DEFAULT_LOCALE ,
134- instanceSamplesProviders );
58+ new DefaultPrometheusMetricSanitizer (),
59+ new PrometheusInstanceSamplesProvider (metricRegistry ));
13560 }
13661
137- @ SafeVarargs
13862 public PrometheusMetricsExporter (
13963 Format defaultFormat ,
14064 boolean convertNameToLowercase ,
14165 Locale locale ,
142- InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample >... instanceSamplesProviders ) {
66+ PrometheusMetricSanitizer sanitizer ,
67+ InstanceSamplesProvider <? extends PrometheusSample , ? extends PrometheusInstanceSample > instanceSamplesProvider ) {
14368
144- this .defaultFormat = defaultFormat ;
69+ this .defaultFormat = requireNonNull ( defaultFormat ) ;
14570 this .convertNameToLowercase = convertNameToLowercase ;
14671 this .locale = locale != null ? locale : DEFAULT_LOCALE ;
147- this .instanceSamplesProvider = new CompositeInstanceSamplesProvider <>(List .of (instanceSamplesProviders ));
72+ this .sanitizer = requireNonNull (sanitizer );
73+ this .instanceSamplesProvider = requireNonNull (instanceSamplesProvider );
14874 }
14975
15076 @ Override
@@ -232,21 +158,21 @@ private MetricFamilySamples toMetricFamilySamples(PrometheusInstanceSample is) {
232158
233159 return new MetricFamilySamples .Sample (
234160 sampleName ,
235- s .labelNames () != null ? s .labelNames () : emptyList (),
161+ s .labelNames () != null ? sanitizer . sanitizeLabelNames ( s .labelNames () ) : emptyList (),
236162 s .labelValues () != null ? s .labelValues () : emptyList (),
237163 s .value ());
238164 })
239165 .collect (toList ()));
240166 }
241167
242168 private String buildName (MetricName name ) {
243- final var sanitizedName = sanitizeMetricName (join (NAME_PARTS_DELIMITER , name ));
169+ final var sanitizedName = sanitizer . sanitizeMetricName (join (NAME_PARTS_DELIMITER , name ));
244170 return convertNameToLowercase ? sanitizedName .toLowerCase (locale ) : sanitizedName ;
245171 }
246172
247173 private String buildNameSuffix (PrometheusSample ps ) {
248174 final var suffix = ps .nameSuffix ();
249- final var sanitizedSuffix = sanitizeMetricName (suffix );
175+ final var sanitizedSuffix = sanitizer . sanitizeMetricName (suffix );
250176 return convertNameToLowercase ? sanitizedSuffix .toLowerCase (locale ) : sanitizedSuffix ;
251177 }
252178
0 commit comments