feat: wire ContainerLogForwarder into DockerRuntimeOrchestrator
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,12 @@ public class DockerRuntimeOrchestrator implements RuntimeOrchestrator {
|
|||||||
private static final Logger log = LoggerFactory.getLogger(DockerRuntimeOrchestrator.class);
|
private static final Logger log = LoggerFactory.getLogger(DockerRuntimeOrchestrator.class);
|
||||||
private DockerClient dockerClient;
|
private DockerClient dockerClient;
|
||||||
|
|
||||||
|
private ContainerLogForwarder logForwarder;
|
||||||
|
|
||||||
|
public void setLogForwarder(ContainerLogForwarder logForwarder) {
|
||||||
|
this.logForwarder = logForwarder;
|
||||||
|
}
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
public void init() {
|
public void init() {
|
||||||
var config = DefaultDockerClientConfig.createDefaultConfigBuilder()
|
var config = DefaultDockerClientConfig.createDefaultConfigBuilder()
|
||||||
@@ -196,4 +202,25 @@ public class DockerRuntimeOrchestrator implements RuntimeOrchestrator {
|
|||||||
}
|
}
|
||||||
return logLines.stream();
|
return logLines.stream();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void startLogCapture(String containerId, String appSlug, String envSlug, String tenantId) {
|
||||||
|
if (logForwarder != null) {
|
||||||
|
logForwarder.startCapture(containerId, appSlug, envSlug, tenantId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stopLogCapture(String containerId) {
|
||||||
|
if (logForwarder != null) {
|
||||||
|
logForwarder.stopCapture(containerId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stopLogCaptureByApp(String appSlug, String envSlug) {
|
||||||
|
if (logForwarder != null) {
|
||||||
|
logForwarder.stopCaptureByApp(appSlug, envSlug);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.cameleer3.server.app.runtime;
|
package com.cameleer3.server.app.runtime;
|
||||||
|
|
||||||
|
import com.cameleer3.server.app.search.ClickHouseLogStore;
|
||||||
import com.cameleer3.server.app.storage.PostgresDeploymentRepository;
|
import com.cameleer3.server.app.storage.PostgresDeploymentRepository;
|
||||||
import com.cameleer3.server.core.runtime.DeploymentRepository;
|
import com.cameleer3.server.core.runtime.DeploymentRepository;
|
||||||
import com.cameleer3.server.core.runtime.RuntimeOrchestrator;
|
import com.cameleer3.server.core.runtime.RuntimeOrchestrator;
|
||||||
@@ -17,13 +18,17 @@ public class RuntimeOrchestratorAutoConfig {
|
|||||||
private static final Logger log = LoggerFactory.getLogger(RuntimeOrchestratorAutoConfig.class);
|
private static final Logger log = LoggerFactory.getLogger(RuntimeOrchestratorAutoConfig.class);
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public RuntimeOrchestrator runtimeOrchestrator() {
|
public RuntimeOrchestrator runtimeOrchestrator(
|
||||||
// Auto-detect: Docker socket available?
|
@org.springframework.beans.factory.annotation.Autowired(required = false)
|
||||||
|
ContainerLogForwarder logForwarder) {
|
||||||
if (Files.exists(Path.of("/var/run/docker.sock"))) {
|
if (Files.exists(Path.of("/var/run/docker.sock"))) {
|
||||||
log.info("Docker socket detected - enabling Docker runtime orchestrator");
|
log.info("Docker socket detected - enabling Docker runtime orchestrator");
|
||||||
return new DockerRuntimeOrchestrator();
|
DockerRuntimeOrchestrator orchestrator = new DockerRuntimeOrchestrator();
|
||||||
|
if (logForwarder != null) {
|
||||||
|
orchestrator.setLogForwarder(logForwarder);
|
||||||
|
}
|
||||||
|
return orchestrator;
|
||||||
}
|
}
|
||||||
// TODO: K8s detection (check for service account token)
|
|
||||||
log.info("No Docker socket or K8s detected - runtime management disabled (observability-only mode)");
|
log.info("No Docker socket or K8s detected - runtime management disabled (observability-only mode)");
|
||||||
return new DisabledRuntimeOrchestrator();
|
return new DisabledRuntimeOrchestrator();
|
||||||
}
|
}
|
||||||
@@ -44,4 +49,13 @@ public class RuntimeOrchestratorAutoConfig {
|
|||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ContainerLogForwarder containerLogForwarder(RuntimeOrchestrator orchestrator,
|
||||||
|
ClickHouseLogStore logStore) {
|
||||||
|
if (orchestrator instanceof DockerRuntimeOrchestrator docker) {
|
||||||
|
return new ContainerLogForwarder(docker.getDockerClient(), logStore);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user