Copilot commented on code in PR #3552:
URL: https://github.com/apache/fluss/pull/3552#discussion_r3518094463


##########
fluss-metrics/fluss-metrics-prometheus/src/main/java/org/apache/fluss/metrics/prometheus/PrometheusPushGatewayReporter.java:
##########
@@ -46,12 +52,18 @@ public PrometheusPushGatewayReporter(
             String jobName,
             Map<String, String> groupingKey,
             final boolean deleteOnShutdown,
-            Duration pushInterval) {
+            Duration pushInterval,
+            @Nullable String username,
+            @Nullable String password) {
         this.pushGateway = new PushGateway(hostUrl);
         this.jobName = jobName;
         this.groupingKey = groupingKey;
         this.deleteOnShutdown = deleteOnShutdown;
         this.pushInterval = pushInterval;
+        if (username != null && !username.isEmpty()) {
+            this.pushGateway.setConnectionFactory(
+                    basicAuthConnectionFactory(username, password == null ? "" 
: password));
+        }

Review Comment:
   `username` is treated as configured when it is non-empty, but 
whitespace-only values (e.g. " ") will still enable Basic Auth and send an 
invalid `Authorization` header. This is inconsistent with the plugin, which 
treats whitespace-only usernames as disabled. Consider using the same 
`StringUtils.isNullOrWhitespaceOnly` check here as well.



##########
fluss-common/src/main/java/org/apache/fluss/config/ConfigOptions.java:
##########
@@ -2171,6 +2171,22 @@ public class ConfigOptions {
                             .withDescription(
                                     "The interval of pushing metrics to 
Prometheus PushGateway.");
 
+    public static final ConfigOption<String> 
METRICS_REPORTER_PROMETHEUS_PUSHGATEWAY_USERNAME =
+            key("metrics.reporter.prometheus-push.username")
+                    .stringType()
+                    .noDefaultValue()
+                    .withDescription(
+                            "The username for Basic Auth of the Prometheus 
PushGateway. "
+                                    + "Leave it unset to disable 
authentication.");
+
+    public static final ConfigOption<String> 
METRICS_REPORTER_PROMETHEUS_PUSHGATEWAY_PASSWORD =
+            key("metrics.reporter.prometheus-push.password")
+                    .stringType()
+                    .noDefaultValue()
+                    .withDescription(
+                            "The password for Basic Auth of the Prometheus 
PushGateway. "
+                                    + "Only takes effect when username is 
configured.");

Review Comment:
   `metrics.reporter.prometheus-push.password` is defined as a plain `String` 
option, which means it won’t be treated as sensitive by the configuration 
subsystem (e.g., it may be included in config dumps or error messages). 
Consider defining it as a `Password` option via `.passwordType()` so it is 
automatically redacted when configurations are logged or displayed.



##########
fluss-metrics/fluss-metrics-prometheus/src/main/java/org/apache/fluss/metrics/prometheus/PrometheusPushGatewayReporter.java:
##########
@@ -80,4 +92,17 @@ public void report() {
             LOG.warn("Could not push metrics to PushGateway.", e);
         }
     }
+
+    private static HttpConnectionFactory basicAuthConnectionFactory(String 
user, String password) {
+        final String header =
+                "Basic "
+                        + Base64.getEncoder()
+                                .encodeToString(
+                                        (user + ":" + 
password).getBytes(StandardCharsets.UTF_8));

Review Comment:
   The PR description says `BasicAuthHttpConnectionFactory` is injected into 
`PushGateway`, but the implementation here uses a custom 
`HttpConnectionFactory`. Please either update the PR description to match the 
implementation, or switch to the Prometheus client’s built-in factory if it is 
available in the dependency version used by this module.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to