All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.undefinedlabs.scope.utils.props.SystemProps Maven / Gradle / Ivy

package com.undefinedlabs.scope.utils.props;

import java.io.IOException;
import java.lang.management.ManagementFactory;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.UUID;

public class SystemProps {

  public static final String USER_DIR;

  public static final String AGENT_ID;
  public static final String AGENT_TYPE;
  public static final String AGENT_VERSION;

  public static final String JAVA_HOME;
  public static final String JAVA_CLASS_PATH;
  public static final String JAVA_VENDOR;
  public static final String JAVA_VERSION;
  public static final String JAVA_VM_ARGUMENTS;
  public static final String JAVA_MAIN_CLASS;

  public static final String PLATFORM_NAME;
  public static final String PLATFORM_VERSION;
  public static final String PLATFORM_ARCHITECTURE;

  public static final boolean RUNNING_IN_CONTAINER;
  public static final String HOSTNAME;

  static {
    USER_DIR = System.getProperty("user.dir");

    AGENT_ID = UUID.randomUUID().toString();
    AGENT_VERSION = getAgentVersion();
    AGENT_TYPE = "java";

    JAVA_HOME = System.getProperty("java.home");
    JAVA_VERSION = System.getProperty("java.version");
    JAVA_CLASS_PATH = System.getProperty("java.class.path");
    JAVA_VENDOR = System.getProperty("java.vendor");
    JAVA_VM_ARGUMENTS = getVmArguments();
    JAVA_MAIN_CLASS = getMainClass();

    PLATFORM_NAME = System.getProperty("os.name");
    PLATFORM_VERSION = System.getProperty("os.version");
    PLATFORM_ARCHITECTURE = System.getProperty("os.arch");

    RUNNING_IN_CONTAINER = isRunningInContainer();
    HOSTNAME = getHostname();
  }

  private static String getAgentVersion() {
    final String version = VersionUtils.getAgentVersion();
    return version != null ? version : "";
  }

  private static String getMainClass() {
    final StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();
    final StackTraceElement main = stackTrace[stackTrace.length - 1];
    return main.getClassName();
  }

  private static String getVmArguments() {
    return ManagementFactory.getRuntimeMXBean().getInputArguments().toString();
  }

  private static String getHostname() {
    try {
      return InetAddress.getLocalHost().getHostName();
    } catch (final UnknownHostException e) {
      return "unknown";
    }
  }

  private static boolean isRunningInContainer() {
    try {
      // When it is executed within a container
      // the cgroups returns lines starting with "/docker" || "/lxc"
      final List lines =
          Files.readAllLines(Paths.get("/proc/1/cgroup"), Charset.defaultCharset());
      for (final String line : lines) {
        if (line.contains("/docker")
            || line.contains("/lxc")
            || line.contains("/ecs")
            || line.contains("/kubepods")
            || line.contains("/actions_job")) {
          return true;
        }
      }
      return false;
    } catch (final IOException e) {
      return false;
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy