diff options
Diffstat (limited to 'src/main/java/com/gitblit/utils/ContainerDetector.java')
-rw-r--r-- | src/main/java/com/gitblit/utils/ContainerDetector.java | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/main/java/com/gitblit/utils/ContainerDetector.java b/src/main/java/com/gitblit/utils/ContainerDetector.java new file mode 100644 index 00000000..8e4a071a --- /dev/null +++ b/src/main/java/com/gitblit/utils/ContainerDetector.java @@ -0,0 +1,74 @@ +package com.gitblit.utils; + +import org.slf4j.Logger; + +import java.io.File; + +/** + * The ContainerDetector tries to detect if the Gitblit instance + * is running in a container, or directly on the (virtualized) OS. + */ +public class ContainerDetector +{ + private static Boolean inContainer; + private static String detectedType = ""; + + /** + * Detect if this instance in running inside a container. + * + * @return true - if a container could be detected + * false - otherwise + */ + public static boolean detect() + { + if (inContainer == null) { + File proc = new File("/proc/1/cgroup"); + if (! proc.exists()) inContainer = Boolean.FALSE; + else { + String cgroups = FileUtils.readContent(proc, null); + if (cgroups.contains("/docker")) { + inContainer = Boolean.TRUE; + detectedType = "Docker container"; + } + else if (cgroups.contains("/ecs")) { + inContainer = Boolean.TRUE; + detectedType = "ECS container"; + } + else if (cgroups.contains("/kubepod") || cgroups.contains("/kubepods")) { + inContainer = Boolean.TRUE; + detectedType = "Kubernetes pod"; + } + } + + // Finally, if we still haven't found proof, it is probably not a container + if (inContainer == null) inContainer = Boolean.FALSE; + } + + return inContainer; + } + + + /** + * Report to some output if a container was detected. + * + */ + public static void report(Logger logger, boolean onlyIfInContainer) + { + if (detect()) { + String msg = "Running in a " + detectedType; + if (logger == null) { + System.out.println(msg); + } + else logger.info(msg); + } + else if (!onlyIfInContainer) { + String msg = "Not detected to be running in a container"; + if (logger == null) { + System.out.println(msg); + } + else logger.info(msg); + + } + + } +} |