feat: add Prometheus docker_sd_configs labels to agent containers
Labels prometheus.scrape, prometheus.path, and prometheus.port are now set on every deployed container based on the resolved runtime type, enabling automatic Prometheus service discovery via docker_sd_configs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -162,6 +162,7 @@ public class DeploymentExecutor {
|
||||
|
||||
Map<String, String> baseEnvVars = buildEnvVars(app, env, config);
|
||||
Map<String, String> labels = TraefikLabelBuilder.build(app.slug(), env.slug(), tenantId, config);
|
||||
labels.putAll(PrometheusLabelBuilder.build(resolvedRuntimeType));
|
||||
|
||||
List<Map<String, Object>> replicaStates = new ArrayList<>();
|
||||
List<String> newContainerIds = new ArrayList<>();
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package com.cameleer3.server.app.runtime;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public final class PrometheusLabelBuilder {
|
||||
|
||||
private PrometheusLabelBuilder() {}
|
||||
|
||||
public static Map<String, String> build(String resolvedRuntimeType) {
|
||||
Map<String, String> labels = new LinkedHashMap<>();
|
||||
labels.put("prometheus.scrape", "true");
|
||||
|
||||
switch (resolvedRuntimeType) {
|
||||
case "spring-boot" -> {
|
||||
labels.put("prometheus.path", "/actuator/prometheus");
|
||||
labels.put("prometheus.port", "8081");
|
||||
}
|
||||
case "quarkus", "native" -> {
|
||||
labels.put("prometheus.path", "/q/metrics");
|
||||
labels.put("prometheus.port", "9000");
|
||||
}
|
||||
case "plain-java" -> {
|
||||
labels.put("prometheus.path", "/metrics");
|
||||
labels.put("prometheus.port", "9464");
|
||||
}
|
||||
default -> {
|
||||
labels.put("prometheus.path", "/actuator/prometheus");
|
||||
labels.put("prometheus.port", "8081");
|
||||
}
|
||||
}
|
||||
|
||||
return labels;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.cameleer3.server.app.runtime;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class PrometheusLabelBuilderTest {
|
||||
|
||||
@Test
|
||||
void springBootLabels() {
|
||||
Map<String, String> labels = PrometheusLabelBuilder.build("spring-boot");
|
||||
assertEquals("true", labels.get("prometheus.scrape"));
|
||||
assertEquals("/actuator/prometheus", labels.get("prometheus.path"));
|
||||
assertEquals("8081", labels.get("prometheus.port"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void quarkusLabels() {
|
||||
Map<String, String> labels = PrometheusLabelBuilder.build("quarkus");
|
||||
assertEquals("true", labels.get("prometheus.scrape"));
|
||||
assertEquals("/q/metrics", labels.get("prometheus.path"));
|
||||
assertEquals("9000", labels.get("prometheus.port"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void nativeLabels() {
|
||||
Map<String, String> labels = PrometheusLabelBuilder.build("native");
|
||||
assertEquals("true", labels.get("prometheus.scrape"));
|
||||
assertEquals("/q/metrics", labels.get("prometheus.path"));
|
||||
assertEquals("9000", labels.get("prometheus.port"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void plainJavaLabels() {
|
||||
Map<String, String> labels = PrometheusLabelBuilder.build("plain-java");
|
||||
assertEquals("true", labels.get("prometheus.scrape"));
|
||||
assertEquals("/metrics", labels.get("prometheus.path"));
|
||||
assertEquals("9464", labels.get("prometheus.port"));
|
||||
}
|
||||
|
||||
@Test
|
||||
void unknownDefaultsToSpringBoot() {
|
||||
Map<String, String> labels = PrometheusLabelBuilder.build("unknown");
|
||||
assertEquals("true", labels.get("prometheus.scrape"));
|
||||
assertEquals("/actuator/prometheus", labels.get("prometheus.path"));
|
||||
assertEquals("8081", labels.get("prometheus.port"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user