diff --git a/.github/workflows/publish-dev-docker.yml b/.github/workflows/publish-dev-docker.yml index 6fc303092..96ba23db1 100644 --- a/.github/workflows/publish-dev-docker.yml +++ b/.github/workflows/publish-dev-docker.yml @@ -19,6 +19,8 @@ jobs: id: result with: run-for: PR + core-branch: ${{ github.ref_name }} + docker: name: Docker runs-on: ubuntu-latest diff --git a/.github/workflows/stress-tests.yml b/.github/workflows/stress-tests.yml index e2b943b08..51d6a2254 100644 --- a/.github/workflows/stress-tests.yml +++ b/.github/workflows/stress-tests.yml @@ -10,7 +10,7 @@ on: jobs: stress-tests: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - name: Set up Node.js diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index 2bd3d3cc9..892572364 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -6,7 +6,7 @@ on: jobs: dependency-branches: name: Dependency Branches - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 outputs: branches: ${{ steps.result.outputs.branches }} @@ -16,6 +16,7 @@ jobs: id: result with: run-for: PR + core-branch: ${{ github.head_ref }} test: name: Unit tests @@ -30,7 +31,7 @@ jobs: # - mysql # - mongodb - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Set up JDK 21.0.7 uses: actions/setup-java@v2 diff --git a/.gitignore b/.gitignore index d97d2e8d0..2be50678d 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ gradle-app.setting !cli/jar/**/*.jar !downloader/jar/**/*.jar !ee/jar/**/*.jar +!src/main/resources/**/*.jar *target* *.war diff --git a/CHANGELOG.md b/CHANGELOG.md index 8d04c79a4..9d8f639fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +## [11.1.1] + +- Adds opentelemetry-javaagent to the core distribution + ## [11.1.0] - Adds hikari logs to opentelemetry diff --git a/build.gradle b/build.gradle index 4502c5993..8f50fbd88 100644 --- a/build.gradle +++ b/build.gradle @@ -9,6 +9,7 @@ plugins { id 'application' id 'java-library' + id "io.freefair.aspectj" version "8.13" //same as gradle version! } compileJava { options.encoding = "UTF-8" } compileTestJava { options.encoding = "UTF-8" } @@ -26,7 +27,7 @@ java { } } -version = "11.1.0" +version = "11.1.1" repositories { mavenCentral() @@ -47,7 +48,6 @@ dependencies { // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.18.2' - // https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-core api group: 'org.apache.tomcat.embed', name: 'tomcat-embed-core', version: '11.0.8' @@ -99,6 +99,7 @@ dependencies { implementation("io.opentelemetry.semconv:opentelemetry-semconv") + implementation('org.aspectj:aspectjrt:1.9.24') compileOnly project(":supertokens-plugin-interface") diff --git a/cli/build.gradle b/cli/build.gradle index ace15859e..d5fa41c69 100644 --- a/cli/build.gradle +++ b/cli/build.gradle @@ -19,10 +19,10 @@ dependencies { implementation group: 'com.google.code.gson', name: 'gson', version: '2.13.1' // https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-yaml - implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.16.1' + implementation group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: '2.18.2' // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core - implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.16.1' + implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.18.2' // https://mvnrepository.com/artifact/de.mkammerer/argon2-jvm implementation group: 'de.mkammerer', name: 'argon2-jvm', version: '2.11' diff --git a/cli/implementationDependencies.json b/cli/implementationDependencies.json index f6a70637d..25fcbb696 100644 --- a/cli/implementationDependencies.json +++ b/cli/implementationDependencies.json @@ -12,19 +12,19 @@ "src":"https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.38.0/error_prone_annotations-2.38.0-sources.jar" }, { - "jar":"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1.jar", - "name":"jackson-dataformat-yaml 2.16.1", - "src":"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.16.1/jackson-dataformat-yaml-2.16.1-sources.jar" + "jar":"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.18.2/jackson-dataformat-yaml-2.18.2.jar", + "name":"jackson-dataformat-yaml 2.18.2", + "src":"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/dataformat/jackson-dataformat-yaml/2.18.2/jackson-dataformat-yaml-2.18.2-sources.jar" }, { - "jar":"https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/2.2/snakeyaml-2.2.jar", - "name":"snakeyaml 2.2", - "src":"https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/2.2/snakeyaml-2.2-sources.jar" + "jar":"https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/2.3/snakeyaml-2.3.jar", + "name":"snakeyaml 2.3", + "src":"https://repo.maven.apache.org/maven2/org/yaml/snakeyaml/2.3/snakeyaml-2.3-sources.jar" }, { - "jar":"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1.jar", - "name":"jackson-databind 2.16.1", - "src":"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.16.1/jackson-databind-2.16.1-sources.jar" + "jar":"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.18.2/jackson-databind-2.18.2.jar", + "name":"jackson-databind 2.18.2", + "src":"https://repo.maven.apache.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.18.2/jackson-databind-2.18.2-sources.jar" }, { "jar":"https://repo.maven.apache.org/maven2/de/mkammerer/argon2-jvm/2.11/argon2-jvm-2.11.jar", diff --git a/cli/src/main/java/io/supertokens/cli/commandHandler/start/StartHandler.java b/cli/src/main/java/io/supertokens/cli/commandHandler/start/StartHandler.java index 5bf579567..30c6145c9 100644 --- a/cli/src/main/java/io/supertokens/cli/commandHandler/start/StartHandler.java +++ b/cli/src/main/java/io/supertokens/cli/commandHandler/start/StartHandler.java @@ -43,12 +43,38 @@ public void doCommand(String installationDir, boolean viaInstaller, String[] arg String host = CLIOptionsParser.parseOption("--host", args); boolean foreground = CLIOptionsParser.hasKey("--foreground", args); boolean forceNoInMemDB = CLIOptionsParser.hasKey("--no-in-mem-db", args); + boolean javaagentEnabled = CLIOptionsParser.hasKey("--javaagent", args); + boolean jmxEnabled = CLIOptionsParser.hasKey("--jmx", args); + String jmxPort = CLIOptionsParser.parseOption("--jmx-port", args); + String jmxAuthenticate = CLIOptionsParser.parseOption("--jmx-authenticate", args); + String jmxSSL = CLIOptionsParser.parseOption("--jmx-ssl", args); List commands = new ArrayList<>(); if (OperatingSystem.getOS() == OperatingSystem.OS.WINDOWS) { commands.add(installationDir + "jre\\bin\\java.exe"); commands.add("-classpath"); commands.add("\"" + installationDir + "core\\*\";\"" + installationDir + "plugin-interface\\*\""); + if (javaagentEnabled) { + commands.add("-javaagent:\"" + installationDir + "agent\\opentelemetry-javaagent.jar\""); + } + if (jmxEnabled) { + commands.add("-Dcom.sun.management.jmxremote"); + if (jmxPort != null) { + commands.add("-Dcom.sun.management.jmxremote.port=" + jmxPort); + } else { + commands.add("-Dcom.sun.management.jmxremote.port=9010"); + } + if (jmxAuthenticate != null) { + commands.add("-Dcom.sun.management.jmxremote.authenticate=" + jmxAuthenticate); + } else { + commands.add("-Dcom.sun.management.jmxremote.authenticate=false"); + } + if (jmxSSL != null) { + commands.add("-Dcom.sun.management.jmxremote.ssl=" + jmxSSL); + } else { + commands.add("-Dcom.sun.management.jmxremote.ssl=false"); + } + } if (space != null) { commands.add("-Xmx" + space + "M"); } @@ -77,6 +103,27 @@ public void doCommand(String installationDir, boolean viaInstaller, String[] arg commands.add("-classpath"); commands.add( installationDir + "core/*:" + installationDir + "plugin-interface/*:" + installationDir + "ee/*"); + if (javaagentEnabled) { + commands.add("-javaagent:" + installationDir + "agent/opentelemetry-javaagent.jar"); + } + if (jmxEnabled) { + commands.add("-Dcom.sun.management.jmxremote"); + if (jmxPort != null) { + commands.add("-Dcom.sun.management.jmxremote.port=" + jmxPort); + } else { + commands.add("-Dcom.sun.management.jmxremote.port=9010"); + } + if (jmxAuthenticate != null) { + commands.add("-Dcom.sun.management.jmxremote.authenticate=" + jmxAuthenticate); + } else { + commands.add("-Dcom.sun.management.jmxremote.authenticate=false"); + } + if (jmxSSL != null) { + commands.add("-Dcom.sun.management.jmxremote.ssl=" + jmxSSL); + } else { + commands.add("-Dcom.sun.management.jmxremote.ssl=false"); + } + } if (space != null) { commands.add("-Xmx" + space + "M"); } @@ -101,6 +148,7 @@ public void doCommand(String installationDir, boolean viaInstaller, String[] arg if (!foreground) { try { ProcessBuilder pb = new ProcessBuilder(commands); + Logging.info("Command to be run: " + String.join(" ", pb.command())); pb.redirectErrorStream(true); Process process = pb.start(); try (InputStreamReader in = new InputStreamReader(process.getInputStream()); @@ -181,6 +229,13 @@ protected List